package Ġe po . todo . backend . controller Ċ Ċ import Ġe po . todo . backend . model . Todo Element Dto Ċ import Ġe po . todo . backend . service . Todo Element Service Ċ import Ġorg . hamcrest . Matchers . notNull Value Ċ import Ġorg . hamcrest . core . Is .` is ` Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . mockito . Inject Mocks Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito .` when ` Ċ import Ġorg . mockito . Mockito . do Nothing Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . autoconfigure . web . servlet . Auto Configure MockMvc Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . test . web . servlet . MockMvc Ċ import Ġorg . springframework . test . web . servlet . request . MockMvc Request Builders Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers . header Ċ import Ġjava . util . UUID Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ @ SpringBootTest Ċ @ Auto Configure MockMvc Ċ class ĠTodo Element Controller Test Ġ{ ĊĊĠĠĠ Ġ@ Inject Mocks ĊĠĠĠ Ġlateinit Ġvar Ġtodo Element Controller : ĠTodo Element Controller ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġtodo Element Service : ĠTodo Element Service ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġmock Mvc : ĠMock Mvc ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` correlation Id Ġfrom ĠGET Ġrequest Ġshould Ġbe Ġreturned Ġin Ġresponse Ġheader `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcorrelation Id Ġ= ĠUUID . randomUUID (). toString () ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders . get ( TODO _ PATH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( COR REL ATION _ ID _ HEADER _ NAME , Ġcorrelation Id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( header (). string ( COR REL ATION _ ID _ HEADER _ NAME , Ġcorrelation Id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` generated Ġcorrelation Id Ġshould Ġbe Ġreturned Ġin Ġresponse Ġheader Ġwhen Ġnot Ġprovided Ġin Ġrequest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( MockMvc Request Builders . get ( TODO _ PATH )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( header (). string ( COR REL ATION _ ID _ HEADER _ NAME , Ġ` is `( notNull Value ()))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` correlation Id Ġfrom ĠDELETE Ġrequest Ġshould Ġbe Ġreturned Ġin Ġerror Ġresponse Ġheader `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcorrelation Id Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders . delete ("${ TODO _ PATH }/{ id }", Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header ( COR REL ATION _ ID _ HEADER _ NAME , Ġcorrelation Id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is NotFound ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path (" $. message "). isNotEmpty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( header (). string ( COR REL ATION _ ID _ HEADER _ NAME , Ġcorrelation Id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get Ġwith Ġcategory Ġfilter Ġshould Ġreturn Ġtodo `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtodo Element Dto Ġ= ĠTodo Element Dto ( text Ġ= Ġ" Clean Ġthe Ġk itchen ", Ġcategory Ġ= Ġ" House Ġch ores ") ĊĠĠĠĠĠĠĠ Ġ` when `( todo Element Service . get (" House Ġch ores ")). thenReturn ( listOf ( todo Element Dto )) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtodo Element Controller . get (" House Ġch ores ") ĊĠĠĠĠĠĠĠ Ġverify ( todo Element Service ). get (" House Ġch ores ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . has Body ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġresult . body ?. size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtodo Result Ġ= Ġresult . body ?. get ( 0 ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( todo Result ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( todo Element Dto , Ġtodo Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get Ġwithout Ġcategory Ġfilter Ġshould Ġreturn Ġtodo `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtodo Element Dto Ġ= ĠTodo Element Dto ( text Ġ= Ġ" Learn Ġto Ġkick flip ", Ġcategory Ġ= Ġ" Sk ate boarding ") ĊĊĠĠĠĠĠĠĠ Ġ` when `( todo Element Service . get ( null )). thenReturn ( listOf ( todo Element Dto )) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtodo Element Controller . get ( null ) ĊĠĠĠĠĠĠĠ Ġverify ( todo Element Service ). get ( null ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . has Body ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġresult . body ?. size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtodo Result Ġ= Ġresult . body ?. get ( 0 ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( todo Result ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( todo Element Dto , Ġtodo Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` update Ġtodo Ġshould Ġcall Ġservice Ġand Ġreturn Ġelement `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtodo Element Dto Ġ= ĠTodo Element Dto ( id Ġ= Ġ 1 , Ġtext Ġ= Ġ" Reach Ġglobal Ġel ite ", Ġcategory Ġ= Ġ" G aming ") ĊĠĠĠĠĠĠĠ Ġ` when `( todo Element Service . update ( 1 , Ġtodo Element Dto )). thenReturn ( todo Element Dto ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtodo Element Controller . update ( todo Element Dto , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġverify ( todo Element Service ). update ( 1 , Ġtodo Element Dto ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( result . has Body ()) ĊĠĠĠĠĠĠĠ Ġval Ġtodo Result Ġ= Ġresult . body ĊĠĠĠĠĠĠĠ ĠassertNotNull ( todo Result ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( todo Element Dto , Ġtodo Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` create Ġtodo Ġshould Ġcall Ġservice Ġand Ġreturn Ġelement `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtodo Element Dto Ġ= ĠTodo Element Dto ( text Ġ= Ġ" Reach Ġglobal Ġel ite ", Ġcategory Ġ= Ġ" G aming ") ĊĠĠĠĠĠĠĠ Ġval Ġtodo Element Returned Ġ= ĠTodo Element Dto ( id Ġ= Ġ 1 , Ġtext Ġ= Ġ" Reach Ġglobal Ġel ite ", Ġcategory Ġ= Ġ" G aming ") ĊĠĠĠĠĠĠĠ Ġ` when `( todo Element Service . create ( todo Element Dto )). thenReturn ( todo Element Returned ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtodo Element Controller . create ( todo Element Dto ) ĊĠĠĠĠĠĠĠ Ġverify ( todo Element Service ). create ( todo Element Dto ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( result . has Body ()) ĊĠĠĠĠĠĠĠ Ġval Ġtodo Result Ġ= Ġresult . body ĊĠĠĠĠĠĠĠ ĠassertNotNull ( todo Result ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( todo Element Returned , Ġtodo Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` delete Ġshould Ġcall Ġservice `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Nothing (). ` when `( todo Element Service ). delete ( 1 ) ĊĠĠĠĠĠĠĠ Ġtodo Element Controller . delete ( 1 ) ĊĠĠĠĠĠĠĠ Ġverify ( todo Element Service ). delete ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTODO _ PATH Ġ= Ġ"/ api / todo " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOR REL ATION _ ID _ HEADER _ NAME Ġ= Ġ" X - Correlation - Id " ĊĠĠĠ Ġ} Ċ } Ċ