package Ġcom . plus mobile apps . kotlin open espress o . test Ċ Ċ import Ġandroidx . test . core . app . launch Activity Ċ import Ġcom . plus mobile apps . kotlin open espress o . R Ċ import Ġcom . plus mobile apps . kotlin open espress o . data . Login DataSource Ċ import Ġcom . plus mobile apps . kotlin open espress o . data . Result Ċ import Ġcom . plus mobile apps . kotlin open espress o . data . model . LoggedIn User Ċ import Ġcom . plus mobile apps . kotlin open espress o . extension .* Ċ import Ġcom . plus mobile apps . kotlin open espress o . pages . Login Page Ċ import Ġcom . plus mobile apps . kotlin open espress o . ui . login . Login Activity Ċ import Ġdagger . h ilt . android . testing . Bind Value Ċ import Ġdagger . h ilt . android . testing . H ilt Android Rule Ċ import Ġdagger . h ilt . android . testing . H ilt Android Test Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . mock k Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ @ H ilt Android Test Ċ class ĠMock k Login Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġh ilt Rule Ġ= ĠH ilt Android Rule ( this ) ĊĊĠĠĠ Ġ@ Bind Value ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġlogin DataSource : ĠLogin DataSource Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĊĠĠĠ Ġprivate Ġval Ġusername Ġ= Ġ" some - awesome - user - name " ĊĠĠĠ Ġprivate Ġval Ġpassword Ġ= Ġ" password 1 2 3 " ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsuccessful Login () Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Login Returns Ġ{ ĠResult . Success ( LoggedIn User (" some - id ", Ġusername )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= Ġlaunch Activity < Login Activity >() ĊĊĠĠĠĠĠĠĠ Ġstart On Page < Login Page > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenter Info ( username Ġ= Ġusername , Ġpassword Ġ= Ġpassword ) ĊĠĠĠĠĠĠĠ Ġ}. goTo LoggedIn Page Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Body Text (). verify Text (" Welcome Ġ$ username !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġerror Login () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Error Ġ= Ġ" Something Ġbad Ġhappened " ĊĠĠĠĠĠĠĠ Ġevery Login Returns Ġ{ ĠResult . Error ( IllegalArgumentException ( expected Error )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= Ġlaunch Activity < Login Activity >() ĊĊĠĠĠĠĠĠĠ Ġstart On Page < Login Page > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenter Info ( username Ġ= Ġusername , Ġpassword Ġ= Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon SignIn Or Register Button (). click () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon ErrorMessage (). verify Text ( expected Error ). verify Visible () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscenario . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtoo Short Of Password Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= Ġlaunch Activity < Login Activity >() ĊĠĠĠĠĠĠĠ Ġstart On Page < Login Page > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Email (). type Text (" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Password (). type Text (" 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Email (). type Text (" 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Password (). verify TextField Error ( R . string . invalid _ password ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscenario . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġevery Login Returns ( result : Ġ() Ġ-> ĠResult < LoggedIn User >) Ġ{ ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġlogin DataSource . login ( username , Ġpassword ) Ġ} Ġreturns Ġresult () ĊĠĠĠ Ġ} Ċ }