package Ġorg . cc ci . g to . android . common . api . okhttp 3 . interceptor Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġjava . io . IOException Ċ import Ġjava . util . concurrent . Callable Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġorg . cc ci . g to . android . common . api . Session Ċ import Ġorg . cc ci . g to . android . common . api . okhttp 3 . Est ablish Session ApiException Ċ import Ġorg . cc ci . g to . android . common . api . okhttp 3 . Invalid Session ApiException Ċ import Ġorg . junit . Assert . assert Throws Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mockito . RET URNS _ DE EP _ ST UB S Ċ import Ġorg . mockito . kotlin . any Ċ import Ġorg . mockito . kotlin . do Answer Ċ import Ġorg . mockito . kotlin . do Return Ċ import Ġorg . mockito . kotlin . do Throw Ċ import Ġorg . mockito . kotlin . eq Ċ import Ġorg . mockito . kotlin . mock Ċ import Ġorg . mockito . kotlin . never Ċ import Ġorg . mockito . kotlin . spy Ċ import Ġorg . mockito . kotlin . stub Ċ import Ġorg . mockito . kotlin . verify Ċ Ċ class ĠSession Interceptor Test Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġresponse : ĠResponse ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchain : ĠInter ceptor . Chain ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsession Interceptor : ĠMock Session Interceptor ĊĊĠĠĠ Ġprivate Ġval Ġvalid Session Ġ= Ġspy ( Mock Session (" valid ")) ĊĠĠĠ Ġprivate Ġval Ġinvalid Session Ġ= Ġspy ( Mock Session ( null )) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġresponse Ġ= Ġmock () ĊĠĠĠĠĠĠĠ Ġchain Ġ= Ġmock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġrequest () Ġ} Ġdo Return ĠRequest . Builder (). url (" https :// example . com "). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġproceed ( any ()) Ġ} Ġdo Return Ġresponse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġmock ( default Answer Ġ= ĠRET URNS _ DE EP _ ST UB S ) ĊĠĠĠĠĠĠĠ Ġsession Interceptor Ġ= ĠMock Session Interceptor ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Existing Ġsession Ġis Ġvalid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġsession Interceptor . stub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġload Session ( any ()) Ġ} Ġdo Return Ġvalid Session ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsession Interceptor . intercept ( chain ) ĊĠĠĠĠĠĠĠ Ġverify ( session Interceptor . est ablish Session , Ġnever ()). call () ĊĠĠĠĠĠĠĠ Ġverify ( session Interceptor . attach Session ). invoke ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( valid Session , Ġnever ()). save ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Existing Ġsession Ġis Ġinvalid Ġ- Ġestablish Session () Ġreturns Ġvalid Ġsession `() Ġ{ ĊĠĠĠĠĠĠĠ Ġsession Interceptor . stub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġload Session ( any ()) Ġ} Ġdo Return Ġinvalid Session ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġestablish Session () Ġ} Ġdo Return Ġvalid Session ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsession Interceptor . intercept ( chain ) ĊĠĠĠĠĠĠĠ Ġverify ( session Interceptor . est ablish Session ). call () ĊĠĠĠĠĠĠĠ Ġverify ( session Interceptor . attach Session ). invoke ( any (), Ġeq ( valid Session )) ĊĠĠĠĠĠĠĠ Ġverify ( valid Session ). save ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( invalid Session , Ġnever ()). save ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Existing Ġsession Ġis Ġinvalid Ġ- Ġestablish Session () Ġreturns Ġnull `() Ġ{ ĊĠĠĠĠĠĠĠ Ġsession Interceptor . stub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġload Session ( any ()) Ġ} Ġdo Return Ġinvalid Session ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġestablish Session () Ġ} Ġdo Return Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThrows ( Invalid Session ApiException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Interceptor . intercept ( chain ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( session Interceptor . est ablish Session ). call () ĊĠĠĠĠĠĠĠ Ġverify ( session Interceptor . attach Session , Ġnever ()). invoke ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( invalid Session , Ġnever ()). save ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Existing Ġsession Ġis Ġinvalid Ġ- Ġestablish Session () Ġthrows ĠIOException `() Ġ{ ĊĠĠĠĠĠĠĠ Ġsession Interceptor . stub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġload Session ( any ()) Ġ} Ġdo Return Ġinvalid Session ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġestablish Session () Ġ} Ġdo Throw ĠIOException :: class ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThrows ( Est ablish Session ApiException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Interceptor . intercept ( chain ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( session Interceptor . est ablish Session ). call () ĊĠĠĠĠĠĠĠ Ġverify ( session Interceptor . attach Session , Ġnever ()). invoke ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġverify ( invalid Session , Ġnever ()). save ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Existing Ġsession Ġis Ġnull Ġ- Ġestablish Session () Ġreturns Ġvalid Ġsession `() Ġ{ ĊĠĠĠĠĠĠĠ Ġsession Interceptor . stub Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġload Session ( any ()) Ġ} Ġdo Return Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġestablish Session () Ġ} Ġdo Return Ġvalid Session ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsession Interceptor . intercept ( chain ) ĊĠĠĠĠĠĠĠ Ġverify ( session Interceptor . est ablish Session ). call () ĊĠĠĠĠĠĠĠ Ġverify ( session Interceptor . attach Session ). invoke ( any (), Ġeq ( valid Session )) ĊĠĠĠĠĠĠĠ Ġverify ( valid Session ). save ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠMock Session ( id : ĠString ?) Ġ: ĠSession ( id ) ĊĠĠĠ Ġprivate Ġclass ĠMock Session Interceptor ( context : ĠContext ) Ġ: ĠSession Interceptor < Mock Session >( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġload Session Ġ= Ġmock <( SharedPreferences ) Ġ-> ĠMock Session ?> () ĊĠĠĠĠĠĠĠ Ġval Ġestablish Session Ġ= Ġmock < Callable < Mock Session ? >>() ĊĠĠĠĠĠĠĠ Ġval Ġattach Session Ġ= Ġmock <( Request , ĠMock Session ) Ġ-> ĠRequest > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Ġ{ Ġinvoke ( any (), Ġany ()) Ġ} Ġdo Answer Ġ{ Ġit . get Argument ( 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload Session ( prefs : ĠSharedPreferences ) Ġ= Ġload Session . invoke ( prefs ) ĊĠĠĠĠĠĠĠ Ġpublic Ġoverride Ġfun Ġestablish Session () Ġ= Ġestablish Session . call () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġattach Session ( request : ĠRequest , Ġsession : ĠMock Session ) Ġ= Ġattach Session . invoke ( request , Ġsession ) ĊĠĠĠ Ġ} Ċ } Ċ