package Ġnl . j ov mit . friends . signup Ċ Ċ import Ġandroidx . compose . ui . test . junit 4 . create Android Compose Rule Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġnl . j ov mit . friends . MainActivity Ċ import Ġnl . j ov mit . friends . domain . exceptions . Backend Exception Ċ import Ġnl . j ov mit . friends . domain . exceptions . Connection Unavailable Exception Ċ import Ġnl . j ov mit . friends . domain . user . InMemory User Catalog Ċ import Ġnl . j ov mit . friends . domain . user . User Ċ import Ġnl . j ov mit . friends . domain . user . User Catalog Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . k oin . core . context . load K oin Modules Ċ import Ġorg . k oin . dsl . module Ċ Ċ class ĠSign Up Screen Test Ġ{ ĊĊĠ Ġ@ get : Rule ĊĠ Ġval Ġsign Up Test Rule Ġ= Ġcreate Android Compose Rule < MainActivity >() ĊĊĠ Ġprivate Ġval Ġsign Up Module Ġ= Ġmodule Ġ{ ĊĠĠĠ Ġfactory < User Catalog >( override Ġ= Ġtrue ) Ġ{ ĠIn Memory User Catalog () Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Before ĊĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠ Ġload K oin Modules ( sign Up Module ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġperform SignUp () Ġ{ ĊĠĠĠ Ġlaunch SignUp Screen ( sign Up Test Rule ) Ġ{ ĊĠĠĠĠĠ Ġtype Email (" j ov mit @ friends . app ") ĊĠĠĠĠĠ Ġtype Password (" Pass W 0 rd !") ĊĠĠĠĠĠ Ġsubmit () ĊĠĠĠ Ġ} Ġverify Ġ{ ĊĠĠĠĠĠ Ġtimeline Screen Is Present () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġdisplay Bad Email Error () Ġ{ ĊĠĠĠ Ġlaunch SignUp Screen ( sign Up Test Rule ) Ġ{ ĊĠĠĠĠĠ Ġtype Email (" email ") ĊĠĠĠĠĠ Ġsubmit () ĊĠĠĠ Ġ} Ġverify Ġ{ ĊĠĠĠĠĠ Ġbad Email Error Is Shown () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġreset Bad Email Error () Ġ{ ĊĠĠĠ Ġlaunch SignUp Screen ( sign Up Test Rule ) Ġ{ ĊĠĠĠĠĠ Ġtype Email (" email ") ĊĠĠĠĠĠ Ġsubmit () ĊĠĠĠĠĠ Ġtype Email (" email @ ") ĊĠĠĠ Ġ} Ġverify Ġ{ ĊĠĠĠĠĠ Ġbad Email Error IsNot Shown () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġdisplay Bad Password Error () Ġ{ ĊĠĠĠ Ġlaunch SignUp Screen ( sign Up Test Rule ) Ġ{ ĊĠĠĠĠĠ Ġtype Email (" j ov @ friends . com ") ĊĠĠĠĠĠ Ġtype Password (" abc ") ĊĠĠĠĠĠ Ġsubmit () ĊĠĠĠ Ġ} Ġverify Ġ{ ĊĠĠĠĠĠ Ġbad Password Error Is Shown () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġreset Bad Password Error () Ġ{ ĊĠĠĠ Ġlaunch SignUp Screen ( sign Up Test Rule ) Ġ{ ĊĠĠĠĠĠ Ġtype Email (" valid @ email . com ") ĊĠĠĠĠĠ Ġtype Password (" ads ") ĊĠĠĠĠĠ Ġsubmit () ĊĠĠĠĠĠ Ġtype Password (" new Try ") ĊĠĠĠ Ġ} Ġverify Ġ{ ĊĠĠĠĠĠ Ġbad Password Error IsNot Shown () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġdisplay Duplicate Account Error () Ġ= Ġrun Blocking < Unit > Ġ{ ĊĠĠĠ Ġval Ġsigned Up User Email Ġ= Ġ" alice @ friends . com " ĊĠĠĠ Ġval Ġsigned Up User Password Ġ= Ġ"@ l 1 ce Pass " ĊĠĠĠ Ġreplace User Catalog With ( InMemory User Catalog (). apply Ġ{ ĊĠĠĠĠĠ Ġcreate User ( signed Up User Email , Ġsigned Up User Password , Ġ"") ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġlaunch SignUp Screen ( sign Up Test Rule ) Ġ{ ĊĠĠĠĠĠ Ġtype Email ( signed Up User Email ) ĊĠĠĠĠĠ Ġtype Password ( signed Up User Password ) ĊĠĠĠĠĠ Ġsubmit () ĊĠĠĠ Ġ} Ġverify Ġ{ ĊĠĠĠĠĠ Ġduplicate Account Error Is Shown () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġdisplay Backend Error () Ġ{ ĊĠĠĠ Ġreplace User Catalog With ( Unavailable User Catalog ()) ĊĊĠĠĠ Ġlaunch SignUp Screen ( sign Up Test Rule ) Ġ{ ĊĠĠĠĠĠ Ġtype Email (" jo e @ friends . com ") ĊĠĠĠĠĠ Ġtype Password (" Jo 3 Pass Word # @ ") ĊĠĠĠĠĠ Ġsubmit () ĊĠĠĠ Ġ} Ġverify Ġ{ ĊĠĠĠĠĠ Ġbackend Error Is Shown () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġdisplay Offline Error () Ġ{ ĊĠĠĠ Ġreplace User Catalog With ( Offline User Catalog ()) ĊĊĠĠĠ Ġlaunch SignUp Screen ( sign Up Test Rule ) Ġ{ ĊĠĠĠĠĠ Ġtype Email (" jo e @ friends . com ") ĊĠĠĠĠĠ Ġtype Password (" Jo 3 Pass Word # @ ") ĊĠĠĠĠĠ Ġsubmit () ĊĠĠĠ Ġ} Ġverify Ġ{ ĊĠĠĠĠĠ Ġoffline Error Is Shown () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġdisplay Blocking Loading () Ġ{ ĊĠĠĠ Ġreplace User Catalog With ( Delay ing User Catalog ()) ĊĠĠĠ Ġlaunch SignUp Screen ( sign Up Test Rule ) Ġ{ ĊĠĠĠĠĠ Ġtype Email (" cal y @ friends . com ") ĊĠĠĠĠĠ Ġtype Password (" C @ ly P 1 ss # ") ĊĠĠĠĠĠ Ġsubmit () ĊĠĠĠ Ġ} Ġverify Ġ{ ĊĠĠĠĠĠ Ġblocking Loading Is Shown () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ After ĊĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠ Ġreplace User Catalog With ( InMemory User Catalog ()) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġreplace User Catalog With ( user Catalog : ĠUser Catalog ) Ġ{ ĊĠĠĠ Ġval Ġreplace Module Ġ= Ġmodule Ġ{ ĊĠĠĠĠĠ Ġfactory ( override Ġ= Ġtrue ) Ġ{ Ġuser Catalog Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġload K oin Modules ( replace Module ) ĊĠ Ġ} ĊĊĠ Ġclass ĠDelay ing User Catalog Ġ: ĠUser Catalog Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate User ( email : ĠString , Ġpassword : ĠString , Ġabout : ĠString ): ĠUser Ġ{ ĊĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠ Ġreturn ĠUser (" some Id ", Ġemail , Ġabout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfollowed By ( userId : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġclass ĠUn available User Catalog Ġ: ĠUser Catalog Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate User ( email : ĠString , Ġpassword : ĠString , Ġabout : ĠString ): ĠUser Ġ{ ĊĠĠĠĠĠ Ġthrow ĠBackend Exception () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfollowed By ( userId : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġclass ĠOff line User Catalog Ġ: ĠUser Catalog Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate User ( email : ĠString , Ġpassword : ĠString , Ġabout : ĠString ): ĠUser Ġ{ ĊĠĠĠĠĠ Ġthrow ĠConnection Unavailable Exception () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfollowed By ( userId : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }