package Ġcom . github . j actor . persistence . service Ċ Ċ import Ġcom . github . j actor . persistence . command . Create User Command Ċ import Ġcom . github . j actor . persistence . dto . Address Internal Dto Ċ import Ġcom . github . j actor . persistence . dto . Persistent Dto Ċ import Ġcom . github . j actor . persistence . dto . Person Internal Dto Ċ import Ġcom . github . j actor . persistence . dto . User Internal Dto Ċ import Ġcom . github . j actor . persistence . dto . User Internal Dto . User type Ċ import Ġcom . github . j actor . persistence . entity . Person Entity Ċ import Ġcom . github . j actor . persistence . entity . User Entity Ċ import Ġcom . github . j actor . persistence . entity . User Entity . Companion . a User Ċ import Ġcom . github . j actor . persistence . repository . Person Repository Ċ import Ġcom . github . j actor . persistence . repository . UserRepository Ċ import Ġcom . nin jas quad . spring mock k . Mock k Bean Ċ import Ġio . mock k . every Ċ import Ġio . mock k . slot Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Assertions . assert All Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . util .* Ċ Ċ @ SpringBootTest Ċ internal Ġclass ĠUserService Test Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠuserService To Test : ĠUserService ĊĊĠĠĠ Ġ@ Mock k Bean ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġperson Repository : ĠPerson Repository ĊĊĠĠĠ Ġ@ Mock k Bean ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Repository Mock : ĠUser Repository ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġmap Ġa Ġuser Ġentity Ġto Ġa Ġdto `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaddress Dto Ġ= ĠAddress Internal Dto () ĊĠĠĠĠĠĠĠ Ġval Ġperson Dto Ġ= ĠPerson Internal Dto () ĊĊĠĠĠĠĠĠĠ Ġperson Dto . address Ġ= Ġaddress Dto ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository Mock . findBy Username (" j actor ") Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa User ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Internal Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPersistent Dto (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperson Dto , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" j actor ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser type . ACTIVE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠuserService To Test . find (" j actor "). orElse Throw Ġ{ ĠAssertionError (" mock ing ?") Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( user ). ` as ` (" user "). isNotNull () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( user . username ). ` as ` (" user . username "). isEqualTo (" j actor ") Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġalso Ġmap Ġa Ġuser Ġentity Ġto Ġa Ġdto Ġwhen Ġfinding Ġby Ġid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaddress Dto Ġ= ĠAddress Internal Dto () ĊĠĠĠĠĠĠĠ Ġval Ġperson Dto Ġ= ĠPerson Internal Dto () ĊĠĠĠĠĠĠĠ Ġperson Dto . address Ġ= Ġaddress Dto ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository Mock . findById ( 6 9 L ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa User ( User Internal Dto ( Persistent Dto (), Ġperson Dto , Ġnull , Ġ" j actor ", ĠUser type . ACTIVE )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠuserService To Test . find ( 6 9 L ). orElse Throw Ġ{ ĠAssertionError (" mock ing ?") Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( user ). ` as ` (" user "). isNotNull () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( user . username ). ` as ` (" user . username "). isEqualTo (" j actor ") Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġupdate Ġa ĠUser Dto Ġwith Ġan ĠUser Entity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Dto Ġ= ĠUser Internal Dto () ĊĠĠĠĠĠĠĠ Ġuser Dto . id Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġuser Dto . username Ġ= Ġ" mar ley " ĊĊĠĠĠĠĠĠĠ Ġval Ġpersistent Dto Ġ= ĠPersistent Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 L , Ġ"", ĠLocalDateTime . now (). minus Months ( 1 ), Ġ"", ĠLocalDateTime . now (). minus Days ( 1 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository Mock . findById ( 1 L ) Ġ} Ġreturns ĠOptional . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Entity ( User Internal Dto ( persistent Dto , Ġuser Dto )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġoptional User Ġ= ĠuserService To Test . update ( user Dto ) ĊĠĠĠĠĠĠĠ ĠassertThat ( optional User ). isPresent . get (). extract ing ( User Internal Dto :: username ). isEqualTo (" mar ley ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate Ġand Ġsave Ġperson Ġfor Ġthe Ġuser `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate User Command Ġ= ĠCreate User Command (" j actor ", Ġ" J ac obs en ") ĊĠĠĠĠĠĠĠ Ġval Ġuser Dto Ġ= ĠUser Internal Dto () ĊĠĠĠĠĠĠĠ Ġval Ġuser Entity Ġ= ĠUser Entity ( user Dto ) ĊĠĠĠĠĠĠĠ Ġval Ġperson Entity Slot Ġ= Ġslot < Person Entity >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġuser Repository Mock . save ( any ()) Ġ} Ġreturns Ġuser Entity ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġperson Repository . save ( capture ( person Entity Slot )) Ġ} Ġreturns ĠPerson Entity ( Person Internal Dto ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠuserService To Test . create ( createUser Command ) ĊĊĠĠĠĠĠĠĠ Ġassert All ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( user ). ` as ` (" user "). isEqualTo ( user Dto ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠassertThat ( person Entity Slot . captured ). ` as ` (" person Ġto Ġsave "). isNotNull Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ