package Ġbet man . db . ex posed Ċ Ċ import Ġbet man . Unknown Match Exception Ċ import Ġbet man . Unknown User Exception Ċ import Ġbet man . po jos . Bet Ċ import Ġbet man . po jos . Group Ċ import Ġbet man . po jos . Score Bet Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġjava . time . Instant Ċ Ċ class ĠEx posed Bet ting Repository Test Ġ: ĠDb Test () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrepository Ġ= ĠEx posed Bet ting Repository () ĊĠĠĠ Ġprivate Ġval Ġname Ġ= Ġ" user " ĊĠĠĠ Ġprivate Ġval Ġkey Ġ= Ġ" my key " ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgame : ĠGame Dao ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgroup : ĠGroup ĊĠĠĠ Ġval Ġbet Ġ= ĠBet ( key , Ġscores Ġ= ĠlistOf ( Score Bet ( 1 , Ġ 1 , Ġ 2 ))) ĊĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate User ( name ) ĊĠĠĠĠĠĠĠ Ġgame Ġ= Ġcreate Game () ĊĠĠĠĠĠĠĠ Ġgroup Ġ= Ġcreate Group (" new Group ", Ġkey , Ġgame , Ġname ). blocking Get () ĊĠĠĠĠĠĠĠ Ġval Ġgroup Repo Ġ= ĠEx posed Group Repository () ĊĠĠĠĠĠĠĠ Ġgroup Repo . join ( group . key !! , Ġname , Ġ" displayName ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠUnknown Match Exception :: class ) ĊĠĠĠ Ġfun Ġinvalid Match Id () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . bet ( key , Ġbet , Ġname ) ĊĠĠĠĠĠĠĠ Ġrepository . get ( key , Ġname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠUnknown User Exception :: class ) ĊĠĠĠ Ġfun Ġinvalid UserId () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . bet ( key , Ġbet , Ġ" invalid ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠUnknown Match Exception :: class ) ĊĠĠĠ Ġfun Ġinvalid Game Id () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . bet ( key , Ġbet , Ġname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbet () Ġ{ ĊĠĠĠĠĠĠĠ Ġmake Bet ( game ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġmake Bet ( game ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Jack ", Ġrepository . get ( group . key !! , Ġname ). blocking Get (). goal King ) ĊĠĠĠĠĠĠĠ Ġval Ġbet Ġ= ĠBet ( key , Ġscores Ġ= ĠlistOf ( Score Bet ( match . external Id , Ġ 5 6 , Ġ 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoal King Ġ= Ġ" John ", Ġwinner Ġ= Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġrepository . bet ( key , Ġbet , Ġname ) ĊĠĠĠĠĠĠĠ Ġval Ġupdate Ġ= Ġrepository . get ( key , Ġname ). blocking Get () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 6 , Ġupdate . scores [ 0 ]. home ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" John ", Ġupdate . goal King ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġupdate . winner ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( group . key , Ġupdate . group Key ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmultiple Games () Ġ{ ĊĠĠĠĠĠĠĠ Ġmake Bet ( game ) ĊĠĠĠĠĠĠĠ Ġval Ġgame 2 Ġ= Ġcreate Game (" other ") ĊĠĠĠĠĠĠĠ Ġval Ġger many Ġ= Ġcreate Team ( game 2 , Ġ" ger many ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġeng land Ġ= Ġcreate Team ( game 2 , Ġ" eng land ", Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġmatch : ĠMatch Dao Ġ= Ġcreate Match ( game 2 , Ġger many , Ġeng land , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġmatch 2 : ĠMatch Dao Ġ= Ġcreate Match ( game 2 , Ġeng land , Ġger many , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġbet Ġ= ĠBet ( key , Ġscores Ġ= ĠlistOf ( Score Bet ( match . external Id , Ġ 4 4 , Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScore Bet ( match 2 . external Id , Ġ 2 2 , Ġ 2 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwinner Ġ= Ġger many . external Id , Ġgoal King Ġ= Ġ" Jack ") ĊĠĠĠĠĠĠĠ Ġrepository . bet ( key , Ġbet , Ġname ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Bet () Ġ{ ĊĠĠĠĠĠĠĠ Ġmake Bet ( game ) ĊĠĠĠĠĠĠĠ Ġval Ġbet Ġ= Ġrepository . get ( key , Ġname ). blocking Get () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġbet . scores . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 4 , Ġbet . scores [ 0 ]. home ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġbet . winner ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcant Bet On Past () Ġ{ ĊĠĠĠĠĠĠĠ Ġmake Bet ( game ) ĊĠĠĠĠĠĠĠ Ġvar Ġbet Ġ= Ġrepository . get ( key , Ġname ). blocking Get () ĊĠĠĠĠĠĠĠ Ġbet . scores [ 0 ]. home Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġbet Ġ= Ġrepository . bet ( key , Ġbet , Ġname ). blocking Get () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 , Ġbet . scores [ 0 ]. home ) ĊĠĠĠĠĠĠĠ Ġset Game To Past ( 2 ) ĊĠĠĠĠĠĠĠ Ġbet . scores [ 0 ]. home Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġbet Ġ= Ġrepository . bet ( key , Ġbet , Ġname ). blocking Get () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 , Ġbet . scores [ 0 ]. home ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Game To Past ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= ĠMatch Dao . find Ġ{ ĠMat ches . external Id Ġeq Ġid Ġ}. single () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatch . date Ġ= ĠInstant . now (). minus Seconds ( 1 0 0 0 ). to Epoch Milli () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Bet ( game : ĠGame Dao ): ĠMatch Dao Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġger many Ġ= Ġcreate Team ( game , Ġ" ger many ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġeng land Ġ= Ġcreate Team ( game , Ġ" eng land ", Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġmatch : ĠMatch Dao Ġ= Ġcreate Match ( game , Ġger many , Ġeng land , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġmatch 2 : ĠMatch Dao Ġ= Ġcreate Match ( game , Ġeng land , Ġger many , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġbet Ġ= ĠBet ( key , Ġscores Ġ= ĠlistOf ( Score Bet ( match . external Id , Ġ 4 4 , Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScore Bet ( match 2 . external Id , Ġ 2 2 , Ġ 2 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwinner Ġ= Ġger many . external Id , Ġgoal King Ġ= Ġ" Jack ") ĊĠĠĠĠĠĠĠ Ġrepository . bet ( key , Ġbet , Ġname ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmatch ĊĠĠĠ Ġ} ĊĊ Ċ }