package Ġorg . mt g . screen . report Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . do Return Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġio . reactivex . Observable Transformer Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġorg . mt g . domain . Current League UseCase Ċ import Ġorg . mt g . model . User Ċ import Ġorg . mt g . view model . Test Life Cycle Owner Ċ import Ġorg . mt g . view model . Test Observer Ċ import Ġjava . io . IOException Ċ Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠReport ViewModel Test Ġ{ ĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠG AMES Ġ= Ġ 3 L ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLE AG UE _ ID Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLE AG UE _ NAME Ġ= Ġ" M 2 0 " ĊĊĠĠĠĠĠĠĠ Ġval ĠERROR Ġ= ĠIOException (" bad Ġstuff ") ĊĠĠĠĠĠĠĠ Ġval ĠLO SER Ġ= ĠUser ( id Ġ= Ġ 2 , ĠfirstName Ġ= Ġ" Some one ", ĠlastName Ġ= Ġ" Else ") ĊĠĠĠĠĠĠĠ Ġval ĠWIN NER Ġ= ĠUser ( id Ġ= Ġ 1 , ĠfirstName Ġ= Ġ" Nick ", ĠlastName Ġ= Ġ" C ip ollo ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġtask Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġval Ġle ague Subject Ġ= ĠPublish Subject . create < Current League UseCase . Result >() ĊĠĠĠ Ġprivate Ġval Ġle ague UseCase Ġ= Ġmock < Current League UseCase > Ġ{ ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġget () Ġ} Ġdo Return Ġle ague Subject ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġreport Subject Ġ= ĠPublish Subject . create < Report UseCase . Result >() ĊĠĠĠ Ġprivate Ġval Ġreport UseCase Ġ= Ġmock < Report UseCase > Ġ{ ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġcreate () Ġ} Ġdo Return ĠObservable Transformer Ġ{ Ġsource Ġ-> Ġsource . switch Map Ġ{ Ġreport Subject . take ( 2 ) Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġclear Fields Observer Ġ= ĠTest Observer < Unit >() ĊĠĠĠ Ġprivate Ġval Ġlifecycle Owner Ġ= ĠTest Life Cycle Owner . started () ĊĠĠĠ Ġprivate Ġval Ġsn ack State Observer Ġ= ĠTest Observer < String >() ĊĠĠĠ Ġprivate Ġval Ġview State Observer Ġ= ĠTest Observer < Report ViewState >() ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġ= ĠReport ViewModel ( league UseCase , Ġreport UseCase ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsend Event _ report Failed () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . clear Fields . observe ( lifecycle Owner , Ġclear Fields Observer ) ĊĠĠĠĠĠĠĠ ĠviewModel . sn ack Text . observe ( lifecycle Owner , Ġsn ack State Observer ) ĊĠĠĠĠĠĠĠ ĠviewModel . view State . observe ( lifecycle Owner , Ġview State Observer ) ĊĊĠĠĠĠĠĠĠ Ġrespond With Current League () ĊĠĠĠĠĠĠĠ Ġrespond With Refresh Complete () ĊĠĠĠĠĠĠĠ Ġsend Report () ĊĠĠĠĠĠĠĠ Ġrespond With Report Error () ĊĊĠĠĠĠĠĠĠ Ġclear Fields Observer . assert Values () ĊĠĠĠĠĠĠĠ Ġsn ack State Observer . assert Values (" Failed Ġto Ġreport Ġmatch !\ n Error : Ġ${ ERROR . message }") ĊĠĠĠĠĠĠĠ Ġview State Observer . assert Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport ViewState (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport ViewState ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Submit Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġle ague Id Ġ= ĠLE AG UE _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Ġ= ĠlistOf ( LO SER , ĠWIN NER ). items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport ViewState ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Submit Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġle ague Id Ġ= ĠLE AG UE _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreporting Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Ġ= ĠlistOf ( LO SER , ĠWIN NER ). items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport ViewState ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Submit Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġle ague Id Ġ= ĠLE AG UE _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Text Ġ= Ġ" Failed Ġto Ġreport Ġmatch !\ n Error : Ġ${ ERROR . message }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Ġ= ĠlistOf ( LO SER , ĠWIN NER ). items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsend Event _ report Successful () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . clear Fields . observe ( lifecycle Owner , Ġclear Fields Observer ) ĊĠĠĠĠĠĠĠ ĠviewModel . sn ack Text . observe ( lifecycle Owner , Ġsn ack State Observer ) ĊĠĠĠĠĠĠĠ ĠviewModel . view State . observe ( lifecycle Owner , Ġview State Observer ) ĊĊĠĠĠĠĠĠĠ Ġrespond With Current League () ĊĠĠĠĠĠĠĠ Ġrespond With Refresh Complete () ĊĠĠĠĠĠĠĠ Ġsend Report () ĊĠĠĠĠĠĠĠ Ġrespond With Report Success () ĊĊĠĠĠĠĠĠĠ Ġclear Fields Observer . assert Values ( Unit ) ĊĠĠĠĠĠĠĠ Ġsn ack State Observer . assert Values (" Reported ĠMatch ! ĠS ick !") ĊĠĠĠĠĠĠĠ Ġview State Observer . assert Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport ViewState (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport ViewState ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Submit Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġle ague Id Ġ= ĠLE AG UE _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Ġ= ĠlistOf ( LO SER , ĠWIN NER ). items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport ViewState ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Submit Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġle ague Id Ġ= ĠLE AG UE _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreporting Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Ġ= ĠlistOf ( LO SER , ĠWIN NER ). items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport ViewState ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Submit Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġle ague Id Ġ= ĠLE AG UE _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Text Ġ= Ġ" Reported ĠMatch ! ĠS ick !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccessful Report Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Ġ= ĠlistOf ( LO SER , ĠWIN NER ). items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġview State () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . clear Fields . observe ( lifecycle Owner , Ġclear Fields Observer ) ĊĠĠĠĠĠĠĠ ĠviewModel . sn ack Text . observe ( lifecycle Owner , Ġsn ack State Observer ) ĊĠĠĠĠĠĠĠ ĠviewModel . view State . observe ( lifecycle Owner , Ġview State Observer ) ĊĊĠĠĠĠĠĠĠ Ġrespond With Current League () ĊĠĠĠĠĠĠĠ Ġrespond With Refresh Complete () ĊĊĠĠĠĠĠĠĠ Ġclear Fields Observer . assert Values () ĊĠĠĠĠĠĠĠ Ġsn ack State Observer . assert Values () ĊĠĠĠĠĠĠĠ Ġview State Observer . assert Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport ViewState (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport ViewState ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Submit Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġle ague Id Ġ= ĠLE AG UE _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Ġ= ĠlistOf ( LO SER , ĠWIN NER ). items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrespond With Current League () Ġ= ĊĠĠĠĠĠĠĠ Ġle ague Subject . onNext ( Current League UseCase . Result ( LE AG UE _ ID , ĠLE AG UE _ NAME )) ĊĊĠĠĠ Ġprivate Ġfun Ġrespond With Refresh Complete () Ġ= ĊĠĠĠĠĠĠĠ Ġreport Subject . onNext ( Report UseCase . Result . Refresh Complete ( listOf ( LO SER , ĠWIN NER ))) ĊĊĠĠĠ Ġprivate Ġfun Ġrespond With Report Error () Ġ= ĊĠĠĠĠĠĠĠ Ġreport Subject . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Next ( Report UseCase . Result . Report InProgress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Next ( Report UseCase . Result . Report Error ( ERROR )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrespond With Report Success () Ġ= ĊĠĠĠĠĠĠĠ Ġreport Subject . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Next ( Report UseCase . Result . Report InProgress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Next ( Report UseCase . Result . Report Success ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Report () Ġ= ĊĠĠĠĠĠĠĠ ĠviewModel . send Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReport View Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwinner Id Ġ= ĠWIN NER . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo ser Id Ġ= ĠLO SER . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgames Count Ġ= ĠG AMES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun ĠList < User >. items () Ġ= Ġmap Ġ{ ĠUser Item ( name Ġ= Ġ"${ it . firstName } Ġ${ it . lastName }", Ġuser Ġ= Ġit ) Ġ} Ċ } Ċ