import Ġk json . K JsonObject Ċ import Ġk sqlite . K Sqlite Ċ import Ġk sqlite . with Sqlite Ċ import Ġkotlin . test .* Ċ import Ġplatform . posix . unlink Ċ Ċ val ĠDB _ PATH Ġ= Ġ" test . db lite " Ċ Ċ fun Ġmake Test Session ( name : ĠString , Ġpassword : ĠString , Ġdb : ĠK Sqlite , Ġcolor : ĠInt ): ĠSession Ġ{ ĊĠĠĠ Ġval Ġfresh B ak ery Ġ= Ġ"${ rnd (). toString ( 1 6 )} ${ rnd (). toString ( 1 6 )} ${ rnd (). toString ( 1 6 )}" ĊĠĠĠ Ġdb . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" INSERT ĠINTO Ġsessions Ġ( cookie , Ġcolor , Ġname , Ġcounter , Ġwinner ) ĠVALUES Ġ(' $ fresh B ak ery ', Ġ$ color , Ġ'${ db . escape ( name )} ', Ġ 0 , Ġ 0 )") ĊĠĠĠ Ġreturn ĠSession ( color , Ġname , Ġfresh B ak ery , Ġpassword ) Ċ } Ċ Ċ class ĠServer Test Ġ{ ĊĊĠĠĠ Ġ@ Before Test ĊĠĠĠ Ġfun Ġcreate Database () Ġ= Ġwith Sqlite Ġ( DB _ PATH ) Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠ Ġdb . execute ( create Db Command ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠMAX _ COLORS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . execute (" INSERT ĠINTO Ġcolors Ġ( counter ) ĠVALUES Ġ( 0 )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdb . execute (" INSERT ĠINTO Ġauth Ġ( user , Ġsecret ) ĠVALUES Ġ(' root ', Ġ' root ') ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Test ĊĠĠĠ Ġfun Ġremove Database () Ġ{ ĊĠĠĠĠĠĠĠ Ġunlink ( DB _ PATH ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġassert Color Has Count After Action ( color : ĠInt , Ġexpected Count : ĠInt , Ġaction : Ġ( K JsonObject ) Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Json ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . get Array (" colors "). getObject ( color Ġ- Ġ 1 ). getInt (" counter ") Ġ== Ġexpected Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġwith Json ( action : Ġ( K JsonObject ) Ġ-> ĠUnit ): ĠK JsonObject Ġ= ĠK JsonObject (). apply Ġ{ Ġaction ( this ) Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġassert Json Custom ( action : Ġ( K JsonObject ) Ġ-> ĠK JsonObject , Ġcheck : Ġ( K JsonObject ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠK JsonObject () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġaction ( json ) ĊĠĠĠĠĠĠĠ Ġcheck ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġassert Json ( action : Ġ( K JsonObject ) Ġ-> ĠUnit , Ġcheck : Ġ( K JsonObject ) Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Json Custom ({ Ġaction ( it ); Ġit Ġ}, Ġcheck ) ĊĊĠĠĠ Ġinline Ġfun Ġassert Stats ( db : ĠK Sqlite , Ġsession : ĠSession , Ġcheck : Ġ( K JsonObject ) Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Json ({ ĠSp inner . stats ( db , Ġsession , Ġit ) Ġ}, Ġcheck ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġclick Test () Ġ= Ġwith Sqlite ( DB _ PATH ) Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġadmin Ġ= Ġmake Session (" root ", Ġ" root ", Ġdb , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠK JsonObject () ĊĠĠĠĠĠĠĠ ĠSp inner . start ( db , Ġadmin , Ġjson ) ĊĊĠĠĠĠĠĠĠ Ġval Ġalice Ġ= Ġmake Session (" Alice ", Ġ Ġ" pass ", Ġdb , Ġnull ) ĊĠĠĠĠĠĠĠ Ġvar Ġbob : ĠSession ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbob Ġ= Ġmake Session (" Bob ", Ġ" pass ", Ġdb , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġwhile ( bob . color Ġ== Ġalice . color ) ĊĊĠĠĠĠĠĠĠ Ġassert Color Has Count After Action ( alice . color , Ġ 1 ) Ġ{ ĠSp inner . click ( db , Ġalice , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Color Has Count After Action ( alice . color , Ġ 2 ) Ġ{ ĠSp inner . click ( db , Ġalice , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Color Has Count After Action ( bob . color , Ġ 1 ) Ġ{ ĠSp inner . click ( db , Ġbob , Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert Color Has Count After Action ( alice . color , Ġ 2 ) Ġ{ ĠSp inner . stats ( db , Ġbob , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Color Has Count After Action ( bob . color , Ġ 1 ) Ġ{ ĠSp inner . stats ( db , Ġalice , Ġit ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstart Stop Test () Ġ= Ġwith Sqlite ( DB _ PATH ) Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġadmin Ġ= Ġmake Test Session (" root ", Ġ" root ", Ġdb , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġwith Json Ġ{ ĠSp inner . start ( db , Ġadmin , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġwith Json Ġ{ ĠSp inner . click ( db , Ġadmin , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Stats ( db , Ġadmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . getInt (" status ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith Json Ġ{ ĠSp inner . stop ( db , Ġadmin , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Stats ( db , Ġadmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġit . getInt (" status ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . getInt (" winner ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . getInt (" contribution ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith Json Ġ{ ĠSp inner . start ( db , Ġadmin , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Stats ( db , Ġadmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġit . getInt (" contribution ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpause Resume Test () Ġ= Ġwith Sqlite ( DB _ PATH ) Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġadmin Ġ= Ġmake Test Session (" root ", Ġ" root ", Ġdb , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġwith Json Ġ{ ĠSp inner . start ( db , Ġadmin , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġwith Json Ġ{ ĠSp inner . click ( db , Ġadmin , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Stats ( db , Ġadmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . getInt (" status ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith Json Ġ{ ĠSp inner . pause ( db , Ġadmin , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Stats ( db , Ġadmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġit . getInt (" status ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . getInt (" winner ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . getInt (" contribution ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith Json Ġ{ ĠSp inner . resume ( db , Ġadmin , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert Stats ( db , Ġadmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . getInt (" contribution ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwinner Test () Ġ= Ġwith Sqlite ( DB _ PATH ) Ġ{ Ġdb Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġadmin Ġ= Ġmake Test Session (" root ", Ġ" root ", Ġdb , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġalice Ġ= Ġmake Test Session (" Alice ", Ġ" pass ", Ġdb , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġbob Ġ= Ġmake Test Session (" Bob ", Ġ" pass ", Ġdb , Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġwith Json Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp inner . start ( db , Ġadmin , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp inner . click ( db , Ġadmin , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp inner . click ( db , Ġadmin , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp inner . click ( db , Ġalice , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp inner . click ( db , Ġbob , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp inner . click ( db , Ġbob , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp inner . stop ( db , Ġadmin , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert Stats ( db , Ġadmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġit . getInt (" contribution ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . getInt (" winner ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert Stats ( db , Ġalice ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . getInt (" contribution ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . getInt (" winner ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert Stats ( db , Ġbob ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġit . getInt (" contribution ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġit . getInt (" winner ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }