package Ġorg . jd . ben og gl . resources Ċ Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . quarkus . test . common . Qu ark us Test Resource Ċ import Ġio . quarkus . test . h 2 . H 2 Database Test Resource Ċ import Ġio . quarkus . test . junit . Qu ark us Test Ċ import Ġio . rest ass ured . Rest Ass ured . given Ċ import Ġorg . jd . ben og gl . entities .* Ċ import Ġorg . jd . ben og gl . models .* Ċ import Ġorg . jd . ben og gl . resources . d tos . Hand Dto Ċ import Ġorg . jd . ben og gl . truncate All Tables Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjavax . enterprise . inject . Default Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . persistence . EntityManager Ċ import Ġjavax . transaction . Transactional Ċ Ċ @ Qu ark us Test Ċ @ Qu ark us Test Resource ( H 2 Database Test Resource :: class ) Ċ @ Transactional Ċ class ĠHand Resource Test Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġ@ field : ĠDefault ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġentity Manager : ĠEntity Manager ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġprepare () Ġ{ ĊĠĠĠĠĠĠĠ Ġentity Manager . truncate All Tables () ĊĊĠĠĠĠĠĠĠ Ġval Ġgame Ġ= Ġcreate Game (" 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= Ġcreate Player (" 1 ", Ġgame ) ĊĠĠĠĠĠĠĠ Ġcreate Hand ( player , Ġgame , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġcreate Hand ( player , Ġgame , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġcreate Hand ( player , Ġgame , Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfinds Valid Hand () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdto Ġ= Ġgiven () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Player - UID ", Ġ" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` when ` (). get ("/ game / 1 / round / 1 / hand ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. extract (). body (). ` as `( Hand Dto :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġdto . type ĠshouldBe ĠHand Type . NORMAL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfails On Missing Hand () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Player - UID ", Ġ" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` when ` (). get ("/ game / 1 / round / 4 2 / hand ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( 4 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfails On Duplicate Hand () Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Player - UID ", Ġ" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` when ` (). get ("/ game / 1 / round / 2 / hand ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. then () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. statusCode ( 5 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Game ( game Uid : ĠString ): ĠGame Entity Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgame Ġ= ĠGame Entity () ĊĠĠĠĠĠĠĠ Ġgame . uid Ġ= Ġgame Uid ĊĠĠĠĠĠĠĠ Ġgame . type Ġ= ĠGame Type . NORMAL ĊĠĠĠĠĠĠĠ Ġgame . state Ġ= ĠGameState . RUNNING ĊĠĠĠĠĠĠĠ Ġgame . persist () ĊĠĠĠĠĠĠĠ Ġreturn Ġgame ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Player ( player Uid : ĠString , Ġgame : ĠGame Entity ): ĠPlayer Entity Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= ĠPlayer Entity () ĊĠĠĠĠĠĠĠ Ġplayer . uid Ġ= Ġplayer Uid ĊĠĠĠĠĠĠĠ Ġplayer . name Ġ= Ġ" Player Ġ$ player Uid " ĊĠĠĠĠĠĠĠ Ġplayer . game Ġ= Ġgame ĊĠĠĠĠĠĠĠ Ġplayer . persist () ĊĠĠĠĠĠĠĠ Ġreturn Ġplayer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Hand ( player : ĠPlayer Entity , Ġgame : ĠGame Entity , Ġround Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb idding Ġ= ĠB idding Entity () ĊĠĠĠĠĠĠĠ Ġb idding . state Ġ= ĠB idding State . RUNNING ĊĠĠĠĠĠĠĠ Ġb idding . persist () ĊĊĠĠĠĠĠĠĠ Ġval Ġd abb Ġ= ĠHand Entity () ĊĠĠĠĠĠĠĠ Ġd abb . type Ġ= ĠHand Type . D ABB ĊĠĠĠĠĠĠĠ Ġd abb . persist () ĊĊĠĠĠĠĠĠĠ Ġval Ġdiscard Ġ= ĠHand Entity () ĊĠĠĠĠĠĠĠ Ġdiscard . type Ġ= ĠHand Type . DISCARD ĊĠĠĠĠĠĠĠ Ġdiscard . persist () ĊĊĠĠĠĠĠĠĠ Ġval Ġround Ġ= ĠRound Entity () ĊĠĠĠĠĠĠĠ Ġround . number Ġ= Ġround Number ĊĠĠĠĠĠĠĠ Ġround . state Ġ= ĠRound State . TR ICK ING ĊĠĠĠĠĠĠĠ Ġround . type Ġ= ĠRound Type . NORMAL ĊĠĠĠĠĠĠĠ Ġround . game Ġ= Ġgame ĊĠĠĠĠĠĠĠ Ġround . b idding Ġ= Ġb idding ĊĠĠĠĠĠĠĠ Ġround . d abb Ġ= Ġd abb ĊĠĠĠĠĠĠĠ Ġround . discard Ġ= Ġdiscard ĊĠĠĠĠĠĠĠ Ġround . persist () ĊĊĠĠĠĠĠĠĠ Ġval Ġhand Ġ= ĠHand Entity () ĊĠĠĠĠĠĠĠ Ġhand . type Ġ= ĠHand Type . NORMAL ĊĠĠĠĠĠĠĠ Ġhand . cards Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġhand . persist () ĊĊĠĠĠĠĠĠĠ Ġval Ġplayer Hand Ġ= ĠPlayer Hand Entity () ĊĠĠĠĠĠĠĠ Ġplayer Hand . player Ġ= ĠPlayer Entity . findById ( player . id !! ) !! ĊĠĠĠĠĠĠĠ Ġplayer Hand . round Ġ= Ġround ĊĠĠĠĠĠĠĠ Ġplayer Hand . hand Ġ= Ġhand ĊĠĠĠĠĠĠĠ Ġplayer Hand . persist () ĊĠĠĠ Ġ} Ċ }