package Ġadmin Ċ Ċ import Ġadmin . dao . Database Admin Commands Dao Ċ import Ġcom . github . j async . sql . db . QueryResult Ċ import Ġcom . github . j async . sql . db . ResultSet Ċ import Ġcom . github . j async . sql . db . Row Data Ċ import Ġcom . github . j async . sql . db . Sus pending Connection Ċ import Ġbase . model . Member Ċ import Ġbase . utils . to Instant Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . joda . time . LocalDateTime Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġbase . sql . Sql Queries Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ class ĠDatabase Admin Commands Dao Test Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMEMBER _ ID Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEVENT _ ID Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMEMBER _ NAME Ġ= Ġ" p ablo " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNEXT _ MAX _ ID _ FOR _ DB Ġ= Ġ 1 0 0 L ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTART _ ID Ġ= Ġ 0 L ĊĊĠĠĠĠĠĠĠ Ġval ĠMEMBER SHIP _ END _ TIME Ġ= ĠLocalDateTime . parse (" 2 0 2 0 - 0 1 - 0 1 ") !! ĊĊĠĠĠĠĠĠĠ Ġval ĠSUB SCR IBE _ 1 Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 1 - 0 1 ") !! ĊĠĠĠĠĠĠĠ Ġval ĠSUB SCR IBE _ 2 Ġ= ĠLocalDateTime . parse (" 2 0 2 2 - 0 6 - 0 3 ") !! ĊĠĠĠĠĠĠĠ Ġval ĠSUB SCR IBE _ 3 Ġ= ĠLocalDateTime . parse (" 2 0 2 1 - 0 9 - 1 1 ") !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconnection : ĠS us pending Connection ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġconnection Ġ= Ġmock k < Sus pending Connection >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġadd Ġmember `() Ġ= Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . in Transaction ( any < suspend Ġ( Sus pending Connection ) Ġ-> ĠMember ?> ()) ĊĠĠĠĠĠĠĠ Ġ}. co Answers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġargs [ 0 ] Ġas Ġsuspend Ġ( Sus pending Connection ) Ġ-> ĠMember ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġmock k < Sus pending Connection >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠgetId Rows Ġ= Ġmock k < ResultSet >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠgetId Row Ġ= Ġmock k < Row Data >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠgetId Rows [ 0 ] Ġ}. returns ( getId Row ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠgetId Row . getLong (" max id ") Ġ}. returns ( START _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . send PreparedStatement ( Sql Queries . getMax Member Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. returns ( QueryResult ( 0 , Ġ" OK ", ĠgetId Rows )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . send PreparedStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSql Queries . update Max Id For Members , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( NEXT _ MAX _ ID _ FOR _ DB , ĠSTART _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. returns ( QueryResult ( 0 , Ġ" OK ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . send PreparedStatement ( Sql Queries . add Member , ĠlistOf ( MEMBER _ ID , ĠMEMBER _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. returns ( QueryResult ( 0 , Ġ" OK ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( transaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġadmin Commands Dao Ġ= ĠDatabase Admin Commands Dao ( connection ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Member Id Ġ= Ġadmin Commands Dao . add Member ( MEMBER _ NAME ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( MEMBER _ ID , Ġactual Member Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġrenew Ġsubscription `() Ġ= Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . in Transaction ( any < suspend Ġ( Sus pending Connection ) Ġ-> ĠMember ?> ()) ĊĠĠĠĠĠĠĠ Ġ}. co Answers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġargs [ 0 ] Ġas Ġsuspend Ġ( Sus pending Connection ) Ġ-> ĠMember ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġmock k < Sus pending Connection >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Update Subscription ( transaction , ĠMEMBER _ ID , ĠMEMBER _ NAME , ĠMEMBER SHIP _ END _ TIME . to Instant (), ĠSUB SCR IBE _ 1 . to Instant (), ĠEVENT _ ID ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( transaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmanager Command Ġ= ĠDatabase Admin Commands Dao ( connection ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Result Ġ= Ġmanager Command . renew Subscription ( MEMBER _ ID , ĠSUB SCR IBE _ 1 . to Instant ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Unit , Ġactual Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġrenew Ġsubscription Ġmultiple Ġtimes `() Ġ= Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġmock k < Sus pending Connection >() ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . in Transaction ( any < suspend Ġ( Sus pending Connection ) Ġ-> ĠMember ?> ()) ĊĠĠĠĠĠĠĠ Ġ}. co Answers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġargs [ 0 ] Ġas Ġsuspend Ġ( Sus pending Connection ) Ġ-> ĠMember ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġmock k < Sus pending Connection >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Update Subscription ( transaction , ĠMEMBER _ ID , ĠMEMBER _ NAME , ĠMEMBER SHIP _ END _ TIME . to Instant (), ĠSUB SCR IBE _ 1 . to Instant (), ĠEVENT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Update Subscription ( transaction , ĠMEMBER _ ID , ĠMEMBER _ NAME , ĠSUB SCR IBE _ 1 . to Instant (), ĠSUB SCR IBE _ 2 . to Instant (), ĠEVENT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Update Subscription ( transaction , ĠMEMBER _ ID , ĠMEMBER _ NAME , ĠSUB SCR IBE _ 2 . to Instant (), ĠSUB SCR IBE _ 3 . to Instant (), ĠEVENT _ ID ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( transaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmanager Command Ġ= ĠDatabase Admin Commands Dao ( connection ) ĊĠĠĠĠĠĠĠ Ġval Ġactual First Result Ġ= Ġmanager Command . renew Subscription ( MEMBER _ ID , ĠSUB SCR IBE _ 1 . to Instant ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Unit , Ġactual First Result ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Second Result Ġ= Ġmanager Command . renew Subscription ( MEMBER _ ID , ĠSUB SCR IBE _ 2 . to Instant ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Unit , Ġactual Second Result ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Third Result Ġ= Ġmanager Command . renew Subscription ( MEMBER _ ID , ĠSUB SCR IBE _ 3 . to Instant ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Unit , Ġactual Third Result ) ĊĠĠĠ Ġ} Ċ }