package Ġcom . v ct apps . idd og challenge . login . domain Ċ Ċ import Ġcom . v ct apps . idd og challenge . login . data . The Guard ian Repository Ċ import Ġcom . v ct apps . idd og challenge . login . data . throw ables . Invalid User Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Maybe Ċ import Ġorg . hamcrest . Core Matchers . equalTo Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . BDD Mockito . given Ċ import Ġorg . mockito . Mockito . mock Ċ Ċ class ĠThe Guard ian Test Ġ{ ĊĊĠĠĠ Ġval Ġthe Guard ian Repository Ġ= Ġmock ( The Guard ian Repository :: class . java ) ĊĊĠĠĠ Ġlateinit Ġvar Ġthe Guard ian : ĠThe Guard ian ĊĊĠĠĠ Ġval ĠVALID _ USER Ġ= Ġ" test @ mail . com " ĊĊĠĠĠ Ġval ĠVALID _ TOKEN Ġ= Ġ" 1 2 3 " ĊĊĠĠĠ Ġval ĠINVALID _ USER Ġ= Ġ" 1 2 3 " ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp (){ ĊĠĠĠĠĠĠĠ Ġthe Guard ian Ġ= ĠThe Guard ian Impl ( the Guard ian Repository ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġif Ġcan Ġcome Ġin Ġwithout Ġuser Ġstored ` (){ ĊĠĠĠĠĠĠĠ Ġgiven ( the Guard ian Repository . has User Stored ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. willReturn ( Maybe . just ( true )) ĊĊĠĠĠĠĠĠĠ Ġthe Guard ian . check Can Come In () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value ( true ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġif Ġcan Ġcome Ġin Ġwith Ġuser Ġstored ` (){ ĊĠĠĠĠĠĠĠ Ġgiven ( the Guard ian Repository . has User Stored ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. willReturn ( Maybe . just ( false )) ĊĊĠĠĠĠĠĠĠ Ġthe Guard ian . check Can Come In () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Value ( false ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġget Ġtoken Ġwithout Ġuser Ġstored ` (){ ĊĠĠĠĠĠĠĠ Ġgiven ( the Guard ian Repository . getToken ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. willReturn ( Maybe . empty ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġthe Guard ian . getToken () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( observer . values (). size , ĠequalTo ( 0 )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġget Ġtoken Ġwith Ġuser Ġstored ` (){ ĊĠĠĠĠĠĠĠ Ġgiven ( the Guard ian Repository . getToken ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. willReturn ( Maybe . just ( VALID _ TOKEN )) ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġthe Guard ian . getToken () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( observer . values ()[ 0 ], ĠequalTo ( VALID _ TOKEN )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġauthenticate Ġuser ` (){ ĊĠĠĠĠĠĠĠ Ġgiven ( the Guard ian Repository . save User ( VALID _ USER )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. willReturn ( Comp letable . complete ()) ĊĊĠĠĠĠĠĠĠ Ġthe Guard ian . do Login ( VALID _ USER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġcant Ġauthenticate Ġuser ` (){ ĊĠĠĠĠĠĠĠ Ġgiven ( the Guard ian Repository . save User ( INVALID _ USER )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. willReturn ( Comp letable . error ( Invalid User ())) ĊĊĠĠĠĠĠĠĠ Ġthe Guard ian . do Login ( INVALID _ USER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Error ( Invalid User :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġre voke Ġaccess ` (){ ĊĠĠĠĠĠĠĠ Ġgiven ( the Guard ian Repository . clear Token ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. willReturn ( Comp letable . complete ()) ĊĊĠĠĠĠĠĠĠ Ġthe Guard ian . revoke Access () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĠĠĠ Ġ} Ċ Ċ }