/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 / 2 0 2 0 Ġe - voy age urs Ġtechnologies Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġai . to ck . bot . connector . messenger Ċ Ċ import Ġai . to ck . bot . connector . messenger . Messenger Connector . Companion . connector Id Application Id Map Ċ import Ġai . to ck . bot . connector . messenger . Messenger Connector . Companion . connector Id Connector Controller Map Ċ import Ġai . to ck . bot . connector . messenger . Messenger Connector . Companion . connector Id Token Map Ċ import Ġai . to ck . bot . connector . messenger . Messenger Connector . Companion . page Id Connector Id Map Ċ import Ġai . to ck . bot . engine . Connector Controller Ċ import Ġai . to ck . bot . engine . action . Action Ċ import Ġai . to ck . bot . engine . user . Player Id Ċ import Ġai . to ck . shared . Executor Ċ import Ġai . to ck . shared . Simple Executor Ċ import Ġai . to ck . shared . to ck Internal Injector Ċ import Ġcom . github . sal om on br ys . kode in . K ode in Ċ import Ġcom . github . sal om on br ys . kode in . K ode in Injector Ċ import Ġcom . github . sal om on br ys . kode in . bind Ċ import Ġcom . github . sal om on br ys . kode in . singleton Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . spy k Ċ import Ġio . mock k . verify Order Ċ import Ġorg . junit . jupiter . api . After All Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Before All Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ internal Ġclass ĠMess enger Connector Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġclear State () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Id Connector Id Map . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnector Id Connector Controller Map . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnector Id Token Map . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnector Id Application Id Map . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Before All ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġinject Executor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto ck Internal Injector Ġ= ĠK ode in Injector (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinject ( K ode in Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK ode in . Module Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind < Executor >() Ġwith Ġsingleton Ġ{ ĠSimple Executor ( 2 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ After All ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġreset Injection () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto ck Internal Injector Ġ= ĠK ode in Injector () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġclear State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġconnector Id 1 Ġ= Ġ" connector Id 1 " ĊĠĠĠ Ġval Ġpath 1 Ġ= Ġ" path A " ĊĠĠĠ Ġval ĠappId 1 Ġ= Ġ" app A " ĊĠĠĠ Ġval Ġpage Id 1 Ġ= Ġ" page A " ĊĠĠĠ Ġval Ġapp Token 1 Ġ= Ġ" app Token " ĊĠĠĠ Ġval Ġtoken 1 Ġ= Ġ" token " ĊĠĠĠ Ġval Ġverify Token 1 Ġ= Ġ" verify Token " ĊĊĠĠĠ Ġval Ġmess enger Client Ġ= Ġmock k < Messenger Client >() ĊĊĠĠĠ Ġval Ġmess enger Connector 1 : ĠMess enger Connector Ġ= ĊĠĠĠĠĠĠĠ ĠMess enger Connector ( connector Id 1 , ĠappId 1 , Ġpath 1 , Ġpage Id 1 , Ġapp Token 1 , Ġtoken 1 , Ġverify Token 1 , Ġmess enger Client ) ĊĠĠĠ Ġval Ġcontroller 1 Ġ= Ġmock k < Connector Controller >( relax ed Ġ= Ġtrue ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġconnector Ġ} Ġreturns Ġmess enger Connector 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun ĠafterEach () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` G IV EN Ġone Ġmess enger Ġconnector ĠWHEN Ġregistering Ġa Ġnew Ġversion Ġof Ġthis Ġconnector Ġand Ġunregister ing Ġthe Ġold Ġversion ĠTHEN Ġthe Ġnew Ġversion Ġis Ġcorrectly Ġregistered `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontroller 2 Ġ= Ġmock k < Connector Controller >( relax ed Ġ= Ġtrue ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġconnector Ġ} Ġreturns Ġmess enger Connector 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmess enger Connector 1 . register ( controller 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( controller 1 , Ġconnector Id Connector Controller Map [ connector Id 1 ]) ĊĠĠĠĠĠĠĠ Ġmess enger Connector 1 . register ( controller 2 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( controller 2 , Ġconnector Id Connector Controller Map [ connector Id 1 ]) ĊĠĠĠĠĠĠĠ Ġmess enger Connector 1 . unregister ( controller 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( controller 2 , Ġconnector Id Connector Controller Map [ connector Id 1 ]) ĊĠĠĠĠĠĠĠ ĠassertTrue ( page Id Connector Id Map [ page Id 1 ] !!. contains ( connector Id 1 )) ĊĠĠĠĠĠĠĠ ĠassertTrue ( connector Id Application Id Map [ connector Id 1 ] !!. contains ( appId 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` G IV EN Ġone Ġmess enger Ġconnector ĠWHEN Ġunregister ing Ġthe Ġversion ĠTHEN Ġversion Ġis Ġnot Ġregistered Ġanymore `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmess enger Connector 1 . register ( controller 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( controller 1 , Ġconnector Id Connector Controller Map [ connector Id 1 ]) ĊĠĠĠĠĠĠĠ Ġmess enger Connector 1 . unregister ( controller 1 ) ĊĠĠĠĠĠĠĠ ĠassertNull ( connector Id Connector Controller Map [ connector Id 1 ]) ĊĠĠĠĠĠĠĠ ĠassertTrue ( page Id Connector Id Map [ page Id 1 ]. isNull OrEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( connector Id Application Id Map [ connector Id 1 ]. isNull OrEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` G IV EN Ġtwo Ġactions Ġof Ġsame Ġuser ĠWHEN Ġsending Ġthe Ġtwo Ġactions ĠTHEN Ġthe Ġsecond Ġaction Ġwait Ġthe Ġfirst Ġto Ġbe Ġsent `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnector Ġ= Ġspy k ( messenger Connector 1 ) ĊĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= ĠPlayer Id (" userId ") ĊĠĠĠĠĠĠĠ Ġval Ġaction 1 Ġ= Ġmock k < Action > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġrecipient Id Ġ} Ġreturns ĠuserId ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġaction 2 Ġ= Ġmock k < Action > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġrecipient Id Ġ} Ġreturns ĠuserId ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠMess enger Connector Callback (" appId ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġtime : ĠLong ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġconnector . send Event ( any ()) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// check Ġthe Ġsecond Ġcall Ġoccurs Ġat Ġleast Ġ 1 0 0 s Ġafter Ġthe Ġfirst Ġ( as Ġwe Ġwait Ġ 1 0 0 Ġfor Ġthe Ġfirst Ġcall ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( System . currentTimeMillis () Ġ- Ġtime !! Ġ>= Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconnector . send ( action 1 , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġconnector . send ( action 2 , Ġcallback ) ĊĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnector . send Event ( action 1 , Ġany (), Ġany (), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnector . send Event ( action 2 , Ġany (), Ġany (), Ġany (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }