/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠK a ush ik ĠN . ĠSan ji Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . ui . signup Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . R Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . data . repository . UserRepository Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . common . Event Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . common . Resource Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . network . Network Helper Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . rx . Test Scheduler Provider Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . test . DataModel Object Provider Ċ import Ġio . reactivex . rx java 3 . core . Single Ċ import Ġio . reactivex . rx java 3 . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . rx java 3 . schedul ers . Test Scheduler Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . Mockito . do Return Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . mockito . junit . Mockito JUnit Runner Ċ Ċ /** Ċ Ġ* ĠLocal ĠUnit ĠTest Ġon Ġ[ SignUp ViewModel ]. Ċ Ġ* Ċ Ġ* Ġ@ author ĠK a ush ik ĠN ĠSan ji Ċ Ġ*/ Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠSign Up ViewModel Test Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGetter Ġfor Ġ[ org . junit . rules . Test Rule ] Ġthat Ġreturns Ġ[ Instant Task Executor Rule ]. ĊĠĠĠĠ Ġ* Ġ[ Instant Task Executor Rule ] Ġensures Ġthat Ġthe Ġ` set ` Ġand Ġ` post ` Ġactions Ġon Ġ[ android x . lifecycle . LiveData ] ĊĠĠĠĠ Ġ* Ġhappens Ġon Ġthe Ġsame ĠThread Ġsynchronous ly , Ġfor Ġthe ĠTesting Ġpurpose . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ// ĠNetwork Helper Ġinstance ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnetwork Helper : ĠNetwork Helper ĊĊĠĠĠ Ġ// ĠUser Repository Ġinstance ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Repository : ĠUser Repository ĊĊĠĠĠ Ġ// ĠLive Data ĠObserver Ġfor ĠResource Ġmessages ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmessage String Id Observer : ĠObserver < Resource < Int >> ĊĊĠĠĠ Ġ// ĠLive Data ĠObserver Ġfor ĠSign Up Ġprogress ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsign Up Progress Observer : ĠObserver < Boolean > ĊĊĠĠĠ Ġ// ĠLive Data ĠObserver Ġfor ĠMainActivity Ġlaunch Ġevents ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlaunch Main Observer : ĠObserver < Event < Map < String , ĠString >>> ĊĊĠĠĠ Ġ// ĠLive Data ĠObserver Ġfor ĠLogin Activity Ġlaunch Ġevents ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlaunch Login Observer : ĠObserver < Event < Map < String , ĠString >>> ĊĊĠĠĠ Ġ// ĠLive Data ĠObserver Ġfor ĠName Ġvalidation Ġresults ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġname Validation Observer : ĠObserver < Resource < Int >> ĊĊĠĠĠ Ġ// ĠLive Data ĠObserver Ġfor ĠEmail Ġvalidation Ġresults ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġemail Validation Observer : ĠObserver < Resource < Int >> ĊĊĠĠĠ Ġ// ĠLive Data ĠObserver Ġfor ĠPassword Ġvalidation Ġresults ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpassword Validation Observer : ĠObserver < Resource < Int >> ĊĊĠĠĠ Ġ// ĠRx Java ĠTest ĠS chedulers ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtest Scheduler : ĠTest Scheduler ĊĊĠĠĠ Ġ// ĠThe ĠViewModel Ġunder Ġtest ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsign Up ViewModel : ĠSign Up ViewModel ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠComposite Disposable ĊĠĠĠĠĠĠĠ Ġval Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠTest Scheduler ĊĠĠĠĠĠĠĠ Ġtest Scheduler Ġ= ĠTest Scheduler () ĊĠĠĠĠĠĠĠ Ġ// ĠCreate ĠScheduler Provider Ġfor ĠTesting ĊĠĠĠĠĠĠĠ Ġval Ġtest Scheduler Provider Ġ= ĠTest Scheduler Provider ( test Scheduler ) ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠSign Up ViewModel ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel Ġ= ĠSign Up ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Scheduler Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomposite Disposable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Helper , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Repository ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġthe ĠLive Data ĠOb servers Ġforever ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . message String Id . observe Fore ver ( message String Id Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . sign Up Progress . observe Fore ver ( sign Up Progress Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . launch Main . observe Fore ver ( launch Main Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . launch Login . observe Fore ver ( launch Login Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . name Validation . observe Fore ver ( name Validation Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . email Validation . observe Fore ver ( email Validation Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . password Validation . observe Fore ver ( password Validation Observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRemove ĠRegistered ĠLive Data ĠOb servers ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . message String Id . remove Observer ( message String Id Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . sign Up Progress . remove Observer ( sign Up Progress Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . launch Main . remove Observer ( launch Main Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . launch Login . remove Observer ( launch Login Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . name Validation . remove Observer ( name Validation Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . email Validation . remove Observer ( email Validation Observer ) ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . password Validation . remove Observer ( password Validation Observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Server Response 2 0 0 _ when SignUp _ should Launch MainActivity () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate ĠDummy ĠUser ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠData Model Object Provider . signed In User ĊĠĠĠĠĠĠĠ Ġ// ĠPassword Ġfor Ġthe ĠUser Ġ( derived Ġfrom Ġemail Ġhash Ġfor Ġtesting ) ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġuser . email . hashCode (). toString () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġvalues Ġfor Ġthe ĠField ĠLive Data ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . name Field . value Ġ= Ġuser . name ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . email Field . value Ġ= Ġuser . email ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . password Field . value Ġ= Ġpassword ĊĊĠĠĠĠĠĠĠ Ġ// ĠMock Ġthe ĠNetwork ĠConnect ivity Ġto Ġstay ĠConnected ĊĠĠĠĠĠĠĠ Ġdo Return ( true ). ` when `( network Helper ). is Network Connected () ĊĊĠĠĠĠĠĠĠ Ġ// ĠMock Ġthe ĠUser Repository ĠSign Up ĠAction Ġto Ġprovide Ġthe ĠSingle Source Ġof Ġnewly Ġregistered ĠUser ĊĠĠĠĠĠĠĠ Ġdo Return ( Single . just ( user )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ` when `( user Repository ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do User SignUp ( user . email , Ġpassword , Ġuser . name ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġthe ĠSign Up ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . on SignUp () ĊĠĠĠĠĠĠĠ Ġ// ĠTrigger Ġthe ĠS chedulers Ġto Ġcomplete Ġpending Ġactions ĊĠĠĠĠĠĠĠ Ġtest Scheduler . trigger Actions () ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠResource Ġfor ĠName Ġvalidation Ġresults ĠLive Data ĊĠĠĠĠĠĠĠ Ġval Ġexpected Name Validation Resource Ġ= ĠResource . Success < Int >() ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠName Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . name Validation . value Ġ== Ġexpected Name Validation Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠName Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( name Validation Observer ). on Changed ( expected Name Validation Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠResource Ġfor ĠEmail Ġvalidation Ġresults ĠLive Data ĊĠĠĠĠĠĠĠ Ġval Ġexpected Email Validation Resource Ġ= ĠResource . Success < Int >() ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠEmail Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . email Validation . value Ġ== Ġexpected Email Validation Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠEmail Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( email Validation Observer ). on Changed ( expected Email Validation Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠResource Ġfor ĠPassword Ġvalidation Ġresults ĠLive Data ĊĠĠĠĠĠĠĠ Ġval Ġexpected Password Validation Resource Ġ= ĠResource . Success < Int >() ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠPassword Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . password Validation . value Ġ== Ġexpected Password Validation Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠPassword Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( password Validation Observer ). on Changed ( expected Password Validation Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthere Ġwas Ġa Ġcall Ġto Ġsave Ġthe Ġuser Ġinformation Ġin Ġthe Ġpreferences ĊĠĠĠĠĠĠĠ Ġverify ( user Repository ). save CurrentUser ( user ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠSign Up ĠProgress Ġindication ĠLive Data Ġhas Ġstopped ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . sign Up Progress . value Ġ== Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠSign Up ĠProgress ĠLive Data ĠObserver Ġreceived Ġboth ĠStart Ġand ĠStop Ġvalues ĊĠĠĠĠĠĠĠ Ġverify ( sign Up Progress Observer ). on Changed ( true ) ĊĠĠĠĠĠĠĠ Ġverify ( sign Up Progress Observer ). on Changed ( false ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠEvent Ġfor ĠMainActivity ĊĠĠĠĠĠĠĠ Ġval Ġexpected Main Event Ġ= ĠEvent < Map < String , ĠString >>( empty Map ()) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠMainActivity ĠLaunch ĠEvent ĠLive Data Ġis Ġtriggered ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . launch Main . value Ġ== Ġexpected Main Event ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠMainActivity ĠLaunch ĠEvent ĠLive Data ĠObserver Ġreceived Ġthe Ġexpected ĠEvent ĊĠĠĠĠĠĠĠ Ġverify ( launch Main Observer ). on Changed ( expected Main Event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Invalid Email _ when SignUp _ should Dispatch Email Invalid Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠValid ĠName ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġ// ĠInvalid ĠEmail ĊĠĠĠĠĠĠĠ Ġval Ġinvalid Email Ġ= Ġ" abcdef g " ĊĠĠĠĠĠĠĠ Ġ// ĠValid Ġpassword Ġderived Ġfrom Ġemail Ġhash Ġfor Ġtesting ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġinvalid Email . hashCode (). toString () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġvalues Ġfor Ġthe ĠField ĠLive Data ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . name Field . value Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . email Field . value Ġ= Ġinvalid Email ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . password Field . value Ġ= Ġpassword ĊĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġthe ĠSign Up ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . on SignUp () ĊĠĠĠĠĠĠĠ Ġ// ĠTrigger Ġthe ĠS chedulers Ġto Ġcomplete Ġpending Ġactions ĊĠĠĠĠĠĠĠ Ġtest Scheduler . trigger Actions () ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠResource Ġfor ĠName Ġvalidation Ġresults ĠLive Data ĊĠĠĠĠĠĠĠ Ġval Ġexpected Name Validation Resource Ġ= ĠResource . Success < Int >() ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠName Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . name Validation . value Ġ== Ġexpected Name Validation Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠName Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( name Validation Observer ). on Changed ( expected Name Validation Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠError ĠResource Ġfor ĠInvalid ĠEmail ĊĠĠĠĠĠĠĠ Ġval Ġexpected Email Error Resource Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Error ( R . string . error _ login _ sign _ up _ email _ field _ invalid ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠEmail Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠInvalid ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . email Validation . value Ġ== Ġexpected Email Error Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠEmail Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠInvalid ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( email Validation Observer ). on Changed ( expected Email Error Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠResource Ġfor ĠPassword Ġvalidation Ġresults ĠLive Data ĊĠĠĠĠĠĠĠ Ġval Ġexpected Password Validation Resource Ġ= ĠResource . Success < Int >() ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠPassword Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . password Validation . value Ġ== Ġexpected Password Validation Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠPassword Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( password Validation Observer ). on Changed ( expected Password Validation Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthere Ġwas Ġno Ġinteractions Ġwith Ġthe ĠUser Repository ĊĠĠĠĠĠĠĠ ĠMockito . verify No Interactions ( user Repository ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠSign Up ĠProgress ĠLive Data ĠObserver Ġnever Ġreceived Ġany Ġvalue ĊĠĠĠĠĠĠĠ ĠMockito . verify No Interactions ( sign Up Progress Observer ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠMainActivity ĠLaunch ĠEvent ĠLive Data ĠObserver Ġnever Ġreceived Ġany ĠEvent ĊĠĠĠĠĠĠĠ ĠMockito . verify No Interactions ( launch Main Observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven Invalid Password _ when SignUp _ should Dispatch Password Invalid Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠValid ĠName ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġ// ĠValid ĠEmail ĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġ" test @ mind ork s . com " ĊĠĠĠĠĠĠĠ Ġ// ĠInvalid ĠPassword Ġ( less Ġthan Ġ 6 Ġmin - character - length ) ĊĠĠĠĠĠĠĠ Ġval Ġinvalid Password Ġ= Ġ" abc " ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġvalues Ġfor Ġthe ĠField ĠLive Data ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . name Field . value Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . email Field . value Ġ= Ġemail ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . password Field . value Ġ= Ġinvalid Password ĊĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġthe ĠSign Up ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . on SignUp () ĊĠĠĠĠĠĠĠ Ġ// ĠTrigger Ġthe ĠS chedulers Ġto Ġcomplete Ġpending Ġactions ĊĠĠĠĠĠĠĠ Ġtest Scheduler . trigger Actions () ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠResource Ġfor ĠName Ġvalidation Ġresults ĠLive Data ĊĠĠĠĠĠĠĠ Ġval Ġexpected Name Validation Resource Ġ= ĠResource . Success < Int >() ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠName Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . name Validation . value Ġ== Ġexpected Name Validation Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠName Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( name Validation Observer ). on Changed ( expected Name Validation Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠResource Ġfor ĠEmail Ġvalidation Ġresults ĠLive Data ĊĠĠĠĠĠĠĠ Ġval Ġexpected Email Validation Resource Ġ= ĠResource . Success < Int >() ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠEmail Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . email Validation . value Ġ== Ġexpected Email Validation Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠEmail Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( email Validation Observer ). on Changed ( expected Email Validation Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠError ĠResource Ġfor ĠInvalid ĠPassword ĊĠĠĠĠĠĠĠ Ġval Ġexpected Password Error Resource Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Error ( R . string . error _ login _ sign _ up _ password _ field _ small _ length ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠPassword Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠInvalid ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . password Validation . value Ġ== Ġexpected Password Error Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠPassword Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠInvalid ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( password Validation Observer ). on Changed ( expected Password Error Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthere Ġwas Ġno Ġinteractions Ġwith Ġthe ĠUser Repository ĊĠĠĠĠĠĠĠ ĠMockito . verify No Interactions ( user Repository ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠSign Up ĠProgress ĠLive Data ĠObserver Ġnever Ġreceived Ġany Ġvalue ĊĠĠĠĠĠĠĠ ĠMockito . verify No Interactions ( sign Up Progress Observer ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠMainActivity ĠLaunch ĠEvent ĠLive Data ĠObserver Ġnever Ġreceived Ġany ĠEvent ĊĠĠĠĠĠĠĠ ĠMockito . verify No Interactions ( launch Main Observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven All Empty Fields _ when SignUp _ should Dispatch Empty Fields Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġempty Ġvalues Ġfor Ġthe ĠField ĠLive Data ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . name Field . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . email Field . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . password Field . value Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġthe ĠSign Up ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . on SignUp () ĊĠĠĠĠĠĠĠ Ġ// ĠTrigger Ġthe ĠS chedulers Ġto Ġcomplete Ġpending Ġactions ĊĠĠĠĠĠĠĠ Ġtest Scheduler . trigger Actions () ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠError ĠResource Ġfor ĠEmpty ĠName ĊĠĠĠĠĠĠĠ Ġval Ġexpected Name Error Resource Ġ= ĠResource . Error ( R . string . error _ sign _ up _ name _ field _ empty ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠName Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . name Validation . value Ġ== Ġexpected Name Error Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠName Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( name Validation Observer ). on Changed ( expected Name Error Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠError ĠResource Ġfor ĠEmpty ĠEmail ĊĠĠĠĠĠĠĠ Ġval Ġexpected Email Error Resource Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Error ( R . string . error _ login _ sign _ up _ email _ field _ empty ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠEmail Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . email Validation . value Ġ== Ġexpected Email Error Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠEmail Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( email Validation Observer ). on Changed ( expected Email Error Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠError ĠResource Ġfor ĠEmpty ĠPassword ĊĠĠĠĠĠĠĠ Ġval Ġexpected Password Error Resource Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Error ( R . string . error _ login _ sign _ up _ password _ field _ empty ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠPassword Ġvalidation Ġresults ĠLive Data Ġis Ġset Ġto Ġthe Ġexpected ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . password Validation . value Ġ== Ġexpected Password Error Resource ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠPassword Ġvalidation Ġresults ĠLive Data ĠObserver Ġhas Ġreceived Ġthe Ġexpected ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( password Validation Observer ). on Changed ( expected Password Error Resource ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthere Ġwas Ġno Ġinteractions Ġwith Ġthe ĠUser Repository ĊĠĠĠĠĠĠĠ ĠMockito . verify No Interactions ( user Repository ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠSign Up ĠProgress ĠLive Data ĠObserver Ġnever Ġreceived Ġany Ġvalue ĊĠĠĠĠĠĠĠ ĠMockito . verify No Interactions ( sign Up Progress Observer ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠMainActivity ĠLaunch ĠEvent ĠLive Data ĠObserver Ġnever Ġreceived Ġany ĠEvent ĊĠĠĠĠĠĠĠ ĠMockito . verify No Interactions ( launch Main Observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgiven No Internet _ when SignUp _ should Show Network Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate ĠDummy ĠUser ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠData Model Object Provider . signed In User ĊĠĠĠĠĠĠĠ Ġ// ĠPassword Ġfor Ġthe ĠUser Ġ( derived Ġfrom Ġemail Ġhash Ġfor Ġtesting ) ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġuser . email . hashCode (). toString () ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġvalues Ġfor Ġthe ĠField ĠLive Data ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . name Field . value Ġ= Ġuser . name ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . email Field . value Ġ= Ġuser . email ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . password Field . value Ġ= Ġpassword ĊĊĠĠĠĠĠĠĠ Ġ// ĠMock Ġthe ĠNetwork ĠConnect ivity Ġto Ġstay ĠDis connected ĊĠĠĠĠĠĠĠ Ġdo Return ( false ). ` when `( network Helper ). is Network Connected () ĊĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġthe ĠSign Up ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . on SignUp () ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠNetwork ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġval Ġexpected Network ErrorMessage Ġ= ĠResource . Error ( R . string . error _ network _ connection _ issue ) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġexpected ĠNetwork ĠError Ġis Ġset Ġon Ġthe ĠResource Ġmessages ĠLive Data ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . message String Id . value Ġ== Ġexpected Network ErrorMessage ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠResource Ġmessages ĠLive Data ĠObserver Ġreceived Ġthe Ġexpected ĠNetwork ĠError ĠResource ĊĠĠĠĠĠĠĠ Ġverify ( message String Id Observer ). on Changed ( expected Network ErrorMessage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen Login With Email _ should Launch Login Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInit iate Ġthe Ġ" Login Ġwith ĠEmail " Ġevent ĊĠĠĠĠĠĠĠ Ġsign Up ViewModel . on Login With Email () ĊĊĠĠĠĠĠĠĠ Ġ// ĠExpected ĠEvent Ġfor ĠLogin Activity ĊĠĠĠĠĠĠĠ Ġval Ġexpected Login Event Ġ= ĠEvent < Map < String , ĠString >>( empty Map ()) ĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġthat Ġthe ĠLogin Activity ĠLaunch ĠEvent ĠLive Data Ġis Ġtriggered ĊĠĠĠĠĠĠĠ Ġassert ( sign Up ViewModel . launch Login . value Ġ== Ġexpected Login Event ) ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe ĠLogin Activity ĠLaunch ĠEvent ĠLive Data ĠObserver Ġreceived Ġthe Ġexpected ĠEvent ĊĠĠĠĠĠĠĠ Ġverify ( launch Login Observer ). on Changed ( expected Login Event ) ĊĠĠĠ Ġ} Ċ Ċ }