package Ġorg . k store . demo . stars . game play . model . turn . stage Ċ Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api .* Ċ import Ġorg . k store . Random Bean Ċ import Ġorg . k store . demo . stars . await That Ċ import Ġorg . k store . demo . stars . game play . model .* Ċ import Ġorg . k store . demo . stars . game play . model . player . Player Id Ċ import Ġorg . k store . demo . stars . game play . model . turn .* Ċ import Ġorg . k store . demo . stars . rule . Player Turn Stage Type .* Ċ import Ġorg . k store . store . Test Sub scri b able Ċ import Ġreact . k store . action . Failed Action Ċ Ċ @ St ars Test Ċ internal Ġclass ĠPlayer Turn Stage Store Test Ġ: ĠGame Description Environment Test () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġplayer Turn : ĠPlayer Turn ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġplayer Turn Store : ĠTest Sub scri b able < Player Turn > ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer Turn Ġ= ĠPlayer Turn ( game Description . current Turn , Ġgame Description . current Player Id , Ġgame Description . current Player (). name ) ĊĠĠĠĠĠĠĠ Ġplayer Turn Store Ġ= ĠTest Sub scri b able ( player Turn ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` initial Ġstate Ġis Ġtaken Ġfrom Ġgame Description `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( Player Turn Stage Store ( game Description , Ġplayer Turn Store , Ġdispatcher ). state ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Turn Stage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id Ġ= Ġgame Description . current Player Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Name Ġ= Ġgame Description . current Player (). name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Number Ġ= Ġgame Description . current Turn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Stage Ġ= Ġgame Description . current Player Turn Stage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` not Ġupdates Ġfrom Ġplayer Turn Store Ġwhen Ġplayer Ġand Ġturn Ġremains Ġsame `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Random Bean Ġplayer Name : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtested Ġ= ĠPlayer Turn Stage Store ( game Description , Ġplayer Turn Store , Ġdispatcher ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġtested . state ĊĊĠĠĠĠĠĠĠ Ġplayer Turn Store . setState ( player Turn . copy ( player Name Ġ= Ġplayer Name )) ĊĊĠĠĠĠĠĠĠ Ġawait That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( tested . state ). is Same As ( state ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` updates Ġfrom Ġplayer Turn Store Ġwhen Ġplayer Ġchanges `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Random Bean Ġplayer Id : ĠPlayer Id ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtested Ġ= ĠPlayer Turn Stage Store ( game Description . copy ( current Player Turn Stage Ġ= ĠMOVE MENT ), Ġplayer Turn Store , Ġdispatcher ) ĊĊĠĠĠĠĠĠĠ Ġplayer Turn Store . setState ( player Turn . copy ( player Id Ġ= Ġplayer Id )) ĊĊĠĠĠĠĠĠĠ Ġawait That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( tested . state ). isEqualTo ( Player Turn Stage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id Ġ= Ġplayer Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Name Ġ= Ġplayer Turn . player Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Number Ġ= Ġplayer Turn . turn Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Stage Ġ= ĠIN CO ME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` updates Ġfrom Ġplayer Turn Store Ġwhen Ġturn Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtested Ġ= ĠPlayer Turn Stage Store ( game Description . copy ( current Player Turn Stage Ġ= ĠMOVE MENT ), Ġplayer Turn Store , Ġdispatcher ) ĊĊĠĠĠĠĠĠĠ Ġplayer Turn Store . setState ( player Turn . copy ( turn Number Ġ= Ġgame Description . current Turn Ġ+ Ġ 1 )) ĊĊĠĠĠĠĠĠĠ Ġawait That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( tested . state ). isEqualTo ( Player Turn Stage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id Ġ= Ġplayer Turn . player Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Name Ġ= Ġplayer Turn . player Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Number Ġ= Ġplayer Turn . turn Number Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Stage Ġ= ĠIN CO ME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` updates Ġstage Ġon ĠStart Player Turn Stage Action `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtested Ġ= ĠPlayer Turn Stage Store ( game Description . copy ( current Player Turn Stage Ġ= ĠRE SEARCH ), Ġplayer Turn Store , Ġdispatcher ) ĊĊĠĠĠĠĠĠĠ Ġdispatcher . action ( Start Player Turn Stage Action ( BUILD )) ĊĊĠĠĠĠĠĠĠ Ġawait That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( tested . state ). isEqualTo ( Player Turn Stage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id Ġ= Ġplayer Turn . player Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Name Ġ= Ġplayer Turn . player Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Number Ġ= Ġplayer Turn . turn Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Stage Ġ= ĠBUILD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` for bids Ġstage Ġupdate Ġif ĠStart Player Turn Stage Action Ġhas Ġincorrect Ġstage `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtested Ġ= ĠPlayer Turn Stage Store ( game Description . copy ( current Player Turn Stage Ġ= ĠRE SEARCH ), Ġplayer Turn Store , Ġdispatcher ) ĊĊĠĠĠĠĠĠĠ Ġdispatcher . action ( Start Player Turn Stage Action ( MOVE MENT )) ĊĊĠĠĠĠĠĠĠ Ġawait That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( tested . state ). isEqualTo ( Player Turn Stage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id Ġ= Ġplayer Turn . player Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Name Ġ= Ġplayer Turn . player Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Number Ġ= Ġplayer Turn . turn Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Stage Ġ= ĠRE SEARCH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` em its ĠEnd Of Player Turn Action Ġif Ġit Ġis Ġlast Ġstage Ġon ĠEnd Of Player Turn Stage Action `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtested Ġ= ĠPlayer Turn Stage Store ( game Description . copy ( current Player Turn Stage Ġ= ĠMOVE MENT ), Ġplayer Turn Store , Ġdispatcher ) ĊĊĠĠĠĠĠĠĠ Ġdispatcher . action ( EndOf Player Turn Stage Action ( MOVE MENT )) ĊĊĠĠĠĠĠĠĠ Ġawait That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( tested . state ). isEqualTo ( Player Turn Stage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id Ġ= Ġplayer Turn . player Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Name Ġ= Ġplayer Turn . player Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Number Ġ= Ġplayer Turn . turn Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Stage Ġ= ĠMOVE MENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( emit ted Actions . last OrNull ( EndOf Player Turn Action :: class )). isNotNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` em its ĠEnd Of Player Turn Action Ġif Ġit Ġis Ġnot Ġlast Ġstage Ġon ĠEnd Of Player Turn Stage Action `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġemitted Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġtested Ġ= ĠPlayer Turn Stage Store ( game Description . copy ( current Player Turn Stage Ġ= ĠRE SEARCH ), Ġplayer Turn Store , Ġdispatcher ) ĊĊĠĠĠĠĠĠĠ Ġdispatcher . intercept ( Start Player Turn Stage Action :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . turn Stage ). isEqualTo ( BUILD ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFailed Action ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdispatcher . action ( EndOf Player Turn Stage Action ( RE SEARCH )) ĊĊĠĠĠĠĠĠĠ Ġawait That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( tested . state ). isEqualTo ( Player Turn Stage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id Ġ= Ġplayer Turn . player Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Name Ġ= Ġplayer Turn . player Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Number Ġ= Ġplayer Turn . turn Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Stage Ġ= ĠRE SEARCH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( emit ted ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` for bids Ġstage Ġupdate Ġif ĠEnd Of Player Turn Stage Action Ġhas Ġincorrect Ġstage `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtested Ġ= ĠPlayer Turn Stage Store ( game Description . copy ( current Player Turn Stage Ġ= ĠRE SEARCH ), Ġplayer Turn Store , Ġdispatcher ) ĊĊĠĠĠĠĠĠĠ Ġdispatcher . action ( EndOf Player Turn Stage Action ( BUILD )) ĊĊĠĠĠĠĠĠĠ Ġawait That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( tested . state ). isEqualTo ( Player Turn Stage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id Ġ= Ġplayer Turn . player Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Name Ġ= Ġplayer Turn . player Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Number Ġ= Ġplayer Turn . turn Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġturn Stage Ġ= ĠRE SEARCH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ