package Ġorg . ts des . user collections . db Ċ Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . context . annotation . Primary Ċ import Ġorg . springframework . context . annotation . Profile Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . test . context . Active Profiles Ċ import Ġorg . springframework . test . context . junit . jupiter . Spring Extension Ċ import Ġorg . ts des . user collections . Card Service Ċ import Ġorg . ts des . user collections . Fake Data Ċ import Ġorg . ts des . user collections . model . Collection Ċ Ċ @ Profile (" UserService Test ") Ċ @ Primary Ċ @ Service Ċ class ĠFake Card Service Ġ: ĠCard Service () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġfetch Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdto Ġ= ĠFake Data . get Collection Dto () ĊĠĠĠĠĠĠĠ Ġsuper . collection Ġ= ĠCollection ( dto ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Active Profiles (" UserService Test ", Ġ" test ") Ċ @ Extend With ( Spring Extension :: class ) Ċ @ SpringBootTest ( web Environment Ġ= ĠSpring Boot Test . Web Environment . NONE ) Ċ internal Ġclass ĠUserService Test Ġ{ ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠuserService : ĠUserService ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Repository : ĠUser Repository ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġinit Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Repository . delete All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create User () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ ĠassertTrue ( userService . register New User ( id )) ĊĠĠĠĠĠĠĠ ĠassertTrue ( user Repository . exists ById ( id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Fail Create User Tw ice () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ ĠassertTrue ( userService . register New User ( id )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( userService . register New User ( id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Buy Card () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġcard Id Ġ= Ġ" c 0 0 " ĊĠĠĠĠĠĠĠ ĠuserService . register New User ( userId ) ĊĠĠĠĠĠĠĠ ĠuserService . buy Card ( userId , Ġcard Id ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠuserService . findById E ager ( userId ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( user !!. owned Cards . any Ġ{ Ġit . card Id Ġ== Ġcard Id Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Buy Card Fail Not En ough Money () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ Ġval Ġcard Id Ġ= Ġ" c 0 9 " ĊĠĠĠĠĠĠĠ ĠuserService . register New User ( userId ) ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . buy Card ( userId , Ġcard Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue ( e . message !!. contains (" coin "), Ġ" Wrong Ġerror Ġmessage : Ġ${ e . message }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Open Pack () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ ĠuserService . register New User ( userId ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbefore Ġ= ĠuserService . findById E ager ( userId ) !! ĊĠĠĠĠĠĠĠ Ġval Ġtot Cards Ġ= Ġbefore . owned Cards . sum By Ġ{ Ġit . numberOf Cop ies Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtot Pack s Ġ= Ġbefore . card Pack s ĊĠĠĠĠĠĠĠ ĠassertTrue ( tot Pack s Ġ> Ġ 0 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( UserService . CAR DS _ PER _ PACK , ĠuserService . open Pack ( userId ). size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġafter Ġ= ĠuserService . findById E ager ( userId ) !! ĊĠĠĠĠĠĠĠ ĠassertEquals ( tot Pack s Ġ- Ġ 1 , Ġafter . card Pack s ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( tot Cards Ġ+ ĠUserService . CAR DS _ PER _ PACK , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter . owned Cards . sum By Ġ{ Ġit . numberOf Cop ies Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Open Pack Fail () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ ĠuserService . register New User ( userId ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbefore Ġ= ĠuserService . findById E ager ( userId ) !! ĊĠĠĠĠĠĠĠ Ġval Ġtot Pack s Ġ= Ġbefore . card Pack s ĊĊĠĠĠĠĠĠĠ Ġrepeat ( tot Pack s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . open Pack ( userId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , ĠuserService . findById E ager ( userId )?. card Pack s ) ĊĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . open Pack ( userId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest M ill Card () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= Ġ" Test " ĊĠĠĠĠĠĠĠ ĠuserService . register New User ( userId ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbefore Ġ= Ġuser Repository . findById ( userId ). get () ĊĠĠĠĠĠĠĠ Ġval Ġcoins Ġ= Ġbefore . coins ĊĊĠĠĠĠĠĠĠ ĠuserService . open Pack ( userId ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbetween Ġ= ĠuserService . findById E ager ( userId ) !! ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġbetween . owned Cards . sum By Ġ{ Ġit . numberOf Cop ies Ġ} ĊĠĠĠĠĠĠĠ ĠuserService . mill Card ( userId , Ġbetween . owned Cards [ 0 ]. card Id !! ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġafter Ġ= ĠuserService . findById E ager ( userId ) !! ĊĠĠĠĠĠĠĠ ĠassertTrue ( after . coins Ġ> Ġcoins ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( n Ġ- Ġ 1 , Ġafter . owned Cards . sum By Ġ{ Ġit . numberOf Cop ies Ġ}) ĊĠĠĠ Ġ} Ċ }