package Ġorg . simple . clin ic . recent pat ients view Ċ Ċ import Ġcom . n ha ar man . mockito _ kotlin . mock Ċ import Ġcom . n ha ar man . mockito _ kotlin . verify Ċ import Ġcom . n ha ar man . mockito _ kotlin . wh enever Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . plugins . Rx Java Plugins Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġio . reactivex . subjects . Subject Ċ import Ġjunit params . JUnit Params Runner Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . simple . clin ic . facility . Facility Repository Ċ import Ġorg . simple . clin ic . patient . Age Ċ import Ġorg . simple . clin ic . patient . Gender . Female Ċ import Ġorg . simple . clin ic . patient . Gender . Male Ċ import Ġorg . simple . clin ic . patient . Gender . Trans gender Ċ import Ġorg . simple . clin ic . patient . Patient Config Ċ import Ġorg . simple . clin ic . patient . Patient M ocker Ċ import Ġorg . simple . clin ic . patient . Patient Repository Ċ import Ġorg . simple . clin ic . user . User Session Ċ import Ġorg . simple . clin ic . util . Relative Timestamp . Today Ċ import Ġorg . simple . clin ic . util . Relative Timestamp . Within Six Months Ċ import Ġorg . simple . clin ic . util . Relative Timestamp . Y esterday Ċ import Ġorg . simple . clin ic . util . Relative Timestamp Generator Ċ import Ġorg . simple . clin ic . util . Rx Errors Rule Ċ import Ġorg . simple . clin ic . util . Test User Clock Ċ import Ġorg . simple . clin ic . util . to Optional Ċ import Ġorg . simple . clin ic . widgets . Screen Created Ċ import Ġorg . simple . clin ic . widgets . Ui Event Ċ import Ġorg . th reet en . bp . Instant Ċ import Ġorg . th reet en . bp . format . DateTime Formatter Ċ import Ġorg . th reet en . bp . temporal . Ch rono Unit Ċ import Ġjava . util . UUID Ċ Ċ @ RunWith ( JUnit Params Runner :: class ) Ċ class ĠRecent Pat ients ViewController Test Ġ{ ĊĊĠ Ġ@ get : Rule ĊĠ Ġval Ġrx Errors Rule Ġ= ĠRx Errors Rule () ĊĊĠ Ġprivate Ġval Ġscreen : ĠRecent Pat ients View Ġ= Ġmock () ĊĠ Ġprivate Ġval Ġuser Session : ĠUser Session Ġ= Ġmock () ĊĠ Ġprivate Ġval Ġpatient Repository : ĠPatient Repository Ġ= Ġmock () ĊĠ Ġprivate Ġval Ġfacility Repository : ĠFac ility Repository Ġ= Ġmock () ĊĊĠ Ġprivate Ġval Ġui Events : ĠSubject < Ui Event > Ġ= ĠPublish Subject . create () ĊĠ Ġprivate Ġval Ġlogged In User Ġ= ĠPatient M ocker . logged In User () ĊĠ Ġprivate Ġval Ġfacility Ġ= ĠPatient M ocker . facility () ĊĠ Ġprivate Ġval Ġrecent Patient Limit Ġ= Ġ 3 ĊĠ Ġprivate Ġval Ġrecent Patient Limit Plus One Ġ= Ġrecent Patient Limit Ġ+ Ġ 1 ĊĠ Ġprivate Ġval Ġdate Formatter Ġ= ĠDateTime Formatter . ISO _ INST ANT ĊĠ Ġprivate Ġval Ġuser Clock Ġ= ĠTest User Clock () ĊĊĠ Ġprivate Ġval Ġcontroller Ġ= ĠRecent Pat ients ViewController ( ĊĠĠĠĠĠ Ġuser Session Ġ= Ġuser Session , ĊĠĠĠĠĠ Ġpatient Repository Ġ= Ġpatient Repository , ĊĠĠĠĠĠ Ġfacility Repository Ġ= Ġfacility Repository , ĊĠĠĠĠĠ Ġrelative Timestamp Generator Ġ= ĠRelative Timestamp Generator (), ĊĠĠĠĠĠ Ġuser Clock Ġ= Ġuser Clock , ĊĠĠĠĠĠ Ġpatient Config Ġ= ĠObservable . just ( Patient Config ( ĊĠĠĠĠĠĠĠĠĠ Ġlimit Of SearchResults Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠ Ġscan Simple Card Feature Enabled Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠ Ġrecent Patient Limit Ġ= Ġrecent Patient Limit ĊĠĠĠĠĠ Ġ)), ĊĠĠĠĠĠ Ġexact Date Formatter Ġ= Ġdate Formatter ĊĠ Ġ) ĊĊĠ Ġ@ Before ĊĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠ Ġ// ĠThis Ġis Ġneeded Ġbecause Ġwe Ġmanually Ġsubscribe Ġto Ġthe Ġrefresh Ġuser Ġstatus ĊĠĠĠ Ġ// Ġoperation Ġon Ġthe ĠIO Ġthread , Ġwhich Ġwas Ġcausing Ġfl ak iness Ġin Ġthis Ġtest . ĊĠĠĠ ĠRx Java Plugins . set Io Scheduler Handler Ġ{ ĠS chedulers . tr amp oline () Ġ} ĊĊĠĠĠ Ġwhenever ( user Session . logged In User ()). thenReturn ( Observable . just ( logged In User . to Optional ())) ĊĠĠĠ Ġwhenever ( facility Repository . current Facility ( logged In User )). thenReturn ( Observable . just ( facility )) ĊĊĠĠĠ Ġui Events ĊĠĠĠĠĠĠĠ Ġ. compose ( controller ) ĊĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġui Change Ġ-> Ġui Change ( screen ) Ġ} ĊĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` when Ġscreen Ġopens Ġthen Ġfetch Ġand Ġset Ġrecent Ġpatients `() Ġ{ ĊĠĠĠ Ġval Ġpatient Uuid 1 Ġ= ĠUUID . randomUUID () ĊĠĠĠ Ġval Ġpatient Uuid 2 Ġ= ĠUUID . randomUUID () ĊĠĠĠ Ġval Ġpatient Uuid 3 Ġ= ĠUUID . randomUUID () ĊĠĠĠ Ġwhenever ( patient Repository . recent Pat ients ( ĊĠĠĠĠĠĠĠ Ġfacility Uuid Ġ= Ġfacility . uuid , ĊĠĠĠĠĠĠĠ Ġlimit Ġ= Ġrecent Patient Limit Plus One ĊĠĠĠ Ġ )). thenReturn ( Observable . just ( listOf ( ĊĠĠĠĠĠĠĠ ĠPatient M ocker . recent Patient ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= Ġ" Aj ay ĠK umar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= ĠAge ( 4 2 , ĠInstant . now ( user Clock )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠTrans gender , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠInstant . now ( user Clock ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠPatient M ocker . recent Patient ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= Ġ" V ij ay ĠK umar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= ĠAge ( 2 4 , ĠInstant . now ( user Clock )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠM ale , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠInstant . now ( user Clock ). minus ( 1 , ĠCh rono Unit . DAYS ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠPatient M ocker . recent Patient ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= Ġ" V in aya ĠK um ari ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= ĠAge ( 2 7 , ĠInstant . now ( user Clock )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠF emale , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠInstant . now ( user Clock ). minus ( 3 , ĠCh rono Unit . DAYS ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ))) ĊĊĠĠĠ Ġui Events . onNext ( Screen Created ()) ĊĊĠĠĠ Ġverify ( screen ). update Recent Pat ients ( listOf ( ĊĠĠĠĠĠĠĠ ĠRecent Patient Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Aj ay ĠK umar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= Ġ 4 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠTrans gender , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠToday , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Formatter Ġ= Ġdate Formatter ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠRecent Patient Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" V ij ay ĠK umar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= Ġ 2 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠM ale , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠY esterday , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Formatter Ġ= Ġdate Formatter ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠRecent Patient Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" V in aya ĠK um ari ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= Ġ 2 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠF emale , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠWith in Six Months ( 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Formatter Ġ= Ġdate Formatter ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ)) ĊĠĠĠ Ġverify ( screen ). show Or Hide Recent Pat ients ( isVisible Ġ= Ġtrue ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` when Ġnumber Ġof Ġrecent Ġpatients Ġis Ġgreater Ġthan Ġrecent Ġpatient Ġlimit Ġthen Ġadd Ġsee Ġall Ġitem `() Ġ{ ĊĠĠĠ Ġval Ġpatient Uuid 1 Ġ= ĠUUID . randomUUID () ĊĠĠĠ Ġval Ġpatient Uuid 2 Ġ= ĠUUID . randomUUID () ĊĠĠĠ Ġval Ġpatient Uuid 3 Ġ= ĠUUID . randomUUID () ĊĠĠĠ Ġval Ġpatient Uuid 4 Ġ= ĠUUID . randomUUID () ĊĠĠĠ Ġwhenever ( patient Repository . recent Pat ients ( ĊĠĠĠĠĠĠĠ Ġfacility Uuid Ġ= Ġfacility . uuid , ĊĠĠĠĠĠĠĠ Ġlimit Ġ= Ġrecent Patient Limit Plus One ĊĠĠĠ Ġ )). thenReturn ( Observable . just ( listOf ( ĊĠĠĠĠĠĠĠ ĠPatient M ocker . recent Patient ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= Ġ" Aj ay ĠK umar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= ĠAge ( 4 2 , ĠInstant . now ( user Clock )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠTrans gender , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠInstant . now ( user Clock ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠPatient M ocker . recent Patient ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= Ġ" V ij ay ĠK umar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= ĠAge ( 2 4 , ĠInstant . now ( user Clock )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠM ale , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠInstant . now ( user Clock ). minus ( 1 , ĠCh rono Unit . DAYS ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠPatient M ocker . recent Patient ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= Ġ" V in aya ĠK um ari ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= ĠAge ( 2 7 , ĠInstant . now ( user Clock )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠF emale , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠInstant . now ( user Clock ). minus ( 4 , ĠCh rono Unit . DAYS ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠPatient M ocker . recent Patient ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfullName Ġ= Ġ" Ab hil ash ĠDe vi ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= ĠAge ( 3 7 , ĠInstant . now ( user Clock )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠTrans gender ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ))) ĊĊĠĠĠ Ġui Events . onNext ( Screen Created ()) ĊĊĠĠĠ Ġverify ( screen ). update Recent Pat ients ( listOf ( ĊĠĠĠĠĠĠĠ ĠRecent Patient Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Aj ay ĠK umar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= Ġ 4 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠTrans gender , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠToday , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Formatter Ġ= Ġdate Formatter ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠRecent Patient Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" V ij ay ĠK umar ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= Ġ 2 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠM ale , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠY esterday , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Formatter Ġ= Ġdate Formatter ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠRecent Patient Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġpatient Uuid 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" V in aya ĠK um ari ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġage Ġ= Ġ 2 7 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= ĠF emale , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠWith in Six Months ( 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Formatter Ġ= Ġdate Formatter ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠSee All Item ĊĠĠĠ Ġ)) ĊĠĠĠ Ġverify ( screen ). show Or Hide Recent Pat ients ( isVisible Ġ= Ġtrue ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` when Ġscreen Ġopens Ġand Ġthere Ġare Ġno Ġrecent Ġpatients Ġthen Ġshow Ġempty Ġstate `() Ġ{ ĊĠĠĠ Ġwhenever ( patient Repository . recent Pat ients ( ĊĠĠĠĠĠĠĠ Ġfacility Uuid Ġ= Ġfacility . uuid , ĊĠĠĠĠĠĠĠ Ġlimit Ġ= Ġrecent Patient Limit Plus One ĊĠĠĠ Ġ )). thenReturn ( Observable . just ( emptyList ())) ĊĊĠĠĠ Ġui Events . onNext ( Screen Created ()) ĊĊĠĠĠ Ġverify ( screen ). show Or Hide Recent Pat ients ( isVisible Ġ= Ġfalse ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` when Ġany Ġrecent Ġpatient Ġitem Ġis Ġclicked , Ġthen Ġopen Ġpatient Ġsummary `() Ġ{ ĊĠĠĠ Ġval Ġpatient Uuid Ġ= ĠUUID . randomUUID () ĊĠĠĠ Ġui Events . onNext ( Recent Patient Item Clicked ( patient Uuid Ġ= Ġpatient Uuid )) ĊĊĠĠĠ Ġverify ( screen ). open Patient Summary ( patient Uuid ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` when Ġsee Ġall Ġis Ġclicked , Ġthen Ġopen Ġrecent Ġpatients Ġscreen `() Ġ{ ĊĠĠĠ Ġui Events . onNext ( See All Item Clicked ) ĊĊĠĠĠ Ġverify ( screen ). open Recent Pat ients Screen () ĊĠ Ġ} Ċ } Ċ