package Ġcom . rb k money . port er . controller Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . rb k money . openapi . notification . model . Delete Notification Ċ import Ġcom . rb k money . openapi . notification . model . Mark All Notifications Ċ import Ġcom . rb k money . openapi . notification . model . Mark Notifications Ċ import Ġcom . rb k money . port er . repository . entity . Notification Entity Ċ import Ġcom . rb k money . port er . repository . entity . Notification Status Ċ import Ġcom . rb k money . port er . service . Id Generator Ċ import Ġcom . rb k money . port er . service . Notification Service Ċ import Ġcom . rb k money . port er . service . model . Notification Filter Ċ import Ġcom . rb k money . port er . service . pagination . Page Ċ import Ġorg . hamcrest . Matchers .` is ` Ċ import Ġorg . hamcrest . Matchers . equalTo Ċ import Ġorg . je asy . random . Easy Random Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . mockito . Mockito . any Int Ċ import Ġorg . mockito . Mockito . any String Ċ import Ġorg . mockito . Mockito . times Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . mockito . kotlin . any OrNull Ċ import Ġorg . mockito . kotlin . argument Captor Ċ import Ġorg . mockito . kotlin . wh enever Ċ import Ġorg . springframework . boot . test . mock . mockito . Mock Bean Ċ import Ġorg . springframework . test . web . servlet . request . MockMvc Request Builders Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers Ċ import Ġjava . util . UUID Ċ Ċ class ĠNotification Controller Test Ġ: ĠAbstract Controller Test () Ġ{ ĊĊĠĠĠ Ġ@ Mock Bean ĊĠĠĠ Ġlateinit Ġvar Ġnotification Service : ĠNotification Service ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` delete Ġnotification `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġnotification Id Ġ= ĠId Generator . random String () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġm vc Actions Ġ= Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders . delete ( String . format ("/ notification /% s ", Ġnotification Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType (" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ" Ġ+ Ġgenerate R bk Admin Jwt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" X - Request - ID ", Ġ" test RequestId ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġargument Captor < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( notification Service , Ġtimes ( 1 )). soft Delete Notification ( any String (), Ġcapture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( notification Id , Ġfirst Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` delete Ġmultiple Ġnotification `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġfirst Notification Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġsecond Notification Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġdelete Notification Ġ= ĠDelete Notification (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Notification Ids Item ( first Notification Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Notification Ids Item ( second Notification Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġm vc Actions Ġ= Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders . delete ("/ notification / remove ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType (" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ" Ġ+ Ġgenerate R bk Admin Jwt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" X - Request - ID ", Ġ" test RequestId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( ObjectMapper (). writeValue AsString ( delete Notification )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġargument Captor < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( notification Service , Ġtimes ( 1 )). soft Delete Notification ( any String (), Ġcapture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( all Values . contains ( first Notification Id . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( all Values . contains ( second Notification Id . toString ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get Ġnotification `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġnotification Id Ġ= ĠId Generator . random String () ĊĠĠĠĠĠĠĠ Ġval Ġnotification Entity Ġ= ĠEasy Random (). next Object ( Notification Entity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . notification Id Ġ= Ġnotification Id . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhenever ( notification Service . get Notification ( any String ())). then Ġ{ Ġnotification Entity Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġm vc Actions Ġ= Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders . get ( String . format ("/ notification /% s ", Ġnotification Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType (" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ" Ġ+ Ġgenerate R bk Admin Jwt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" X - Request - ID ", Ġ" test RequestId ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġm vc Actions . andExpect ( MockMvc Result Matchers . status (). is 2 xx Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path (" $. id ", ĠequalTo ( notification Id ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path (" $. createdAt "). isNotEmpty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path (" $. status ", ĠequalTo ( notification Entity . status . name ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Result Matchers . json Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ . title ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠequalTo ( notification Entity . notification Template Entity ?. title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Result Matchers . json Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ . content ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠequalTo ( notification Entity . notification Template Entity ?. content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` mark Ġnotification `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġnotification Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= ĠMark Notifications (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠMark Notifications . Status Enum . READ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Ids Ġ= Ġmutable ListOf ( notification Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġm vc Actions Ġ= Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders . post ("/ notification / mark ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType (" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ" Ġ+ Ġgenerate R bk Admin Jwt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" X - Request - ID ", Ġ" test RequestId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( ObjectMapper (). writeValue AsString ( request Body )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġm vc Actions . andExpect ( MockMvc Result Matchers . status (). is 2 xx Successful ) ĊĠĠĠĠĠĠĠ Ġargument Captor < List < String >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( notification Service , Ġtimes ( 1 )). notification Mark ( any String (), Ġcapture (), Ġany OrNull ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( notification Id . toString (), Ġfirst Value [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` mark Ġmultiple Ġnotification `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġnotification Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= ĠMark All Notifications (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠMark All Notifications . Status Enum . READ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġm vc Actions Ġ= Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders . post ("/ notification / mark / all ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType (" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ" Ġ+ Ġgenerate R bk Admin Jwt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" X - Request - ID ", Ġ" test RequestId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( ObjectMapper (). writeValue AsString ( request Body )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġm vc Actions . andExpect ( MockMvc Result Matchers . status (). is 2 xx Successful ) ĊĠĠĠĠĠĠĠ Ġargument Captor < Notification Status > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( notification Service , Ġtimes ( 1 )). notification Mark All ( any String (), Ġcapture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Notification Status . read , Ġfirst Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` search Ġnotifications `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġtitle Filter Ġ= Ġ" my Ġtitle " ĊĠĠĠĠĠĠĠ Ġval Ġnotification Entity Ġ= ĠEasy Random (). next Object ( Notification Entity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Id Ġ= ĠId Generator . random String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠNotification Status . unread ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠWhen ĊĠĠĠĠĠĠĠ Ġwhenever ( notification Service . find Notifications ( any OrNull (), Ġany OrNull (), Ġany Int ())). then Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPage ( listOf ( notification Entity ), Ġtoken Ġ= Ġnull , Ġhas Next Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm vc Actions Ġ= Ġmock Mvc . perform ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders . get ("/ notification ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType (" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġ" Bearer Ġ" Ġ+ Ġgenerate R bk Admin Jwt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" X - Request - ID ", Ġ" test RequestId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" title ", Ġtitle Filter ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġm vc Actions . andExpect ( MockMvc Result Matchers . status (). is 2 xx Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path (" $. result "). isNotEmpty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path (" $. result [ 0 ]. id ", Ġ` is `( notification Entity . notification Id ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . json Path (" $. result [ 0 ]. status ", Ġ` is `( notification Entity . status . name ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Result Matchers . json Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ . result [ 0 ]. title ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` is `( notification Entity . notification Template Entity ?. title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Result Matchers . json Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ . result [ 0 ]. content ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` is `( notification Entity . notification Template Entity ?. content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġargument Captor < Notification Filter > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( notification Service , Ġtimes ( 1 )). find Notifications ( capture (), Ġany OrNull (), Ġany Int ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( title Filter , Ġfirst Value . title ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ