/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 0 4 - 2 0 1 9 , ĠUniversity Ġof ĠOs lo Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* ĠNeither Ġthe Ġname Ġof Ġthe ĠH ISP Ġproject Ġnor Ġthe Ġnames Ġof Ġits Ġcontributors Ġmay Ċ Ġ* Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ċ Ġ* Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " ĠAND Ċ Ġ* ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED Ċ Ġ* ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE Ċ Ġ* ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠOWNER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR Ċ Ġ* ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ċ Ġ* Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; Ċ Ġ* ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON Ċ Ġ* ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ċ Ġ* Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS Ċ Ġ* ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġorg . dh is 2 . use sc ases . program stage selection Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . do Answer Ċ 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 Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġio . reactivex . Flow able Ċ import Ġjava . lang . Exception Ċ import Ġorg . dh is 2 . data . schedul ers . Tr amp oline Scheduler Provider Ċ import Ġorg . dh is 2 . use sc ases . program Stage Selection . Program Stage Selection Contract Ċ import Ġorg . dh is 2 . use sc ases . program Stage Selection . Program Stage Selection Presenter Ċ import Ġorg . dh is 2 . use sc ases . program Stage Selection . Program Stage Selection Repository Ċ import Ġorg . dh is 2 . utils . Result Ċ import Ġorg . dh is 2 . utils . Rules Utils Provider Ċ import Ġorg . h isp . dh is . android . core . common . Access Ċ import Ġorg . h isp . dh is . android . core . common . DataAccess Ċ import Ġorg . h isp . dh is . android . core . period . Period Type Ċ import Ġorg . h isp . dh is . android . core . program . Program Stage Ċ import Ġorg . h isp . dh is . rules . models . Rule Action Hide Program Stage Ċ import Ġorg . h isp . dh is . rules . models . Rule Effect Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ class ĠProgram Stage Selection Presenter Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpresenter : ĠProgram Stage Selection Presenter ĊĊĠĠĠ Ġprivate Ġval Ġview : ĠProgram Stage Selection Contract . View Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠProgram Stage Selection Repository Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġrules Utils : ĠRules Utils Provider Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġscheduler Ġ= ĠTr amp oline Scheduler Provider () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter Ġ= ĠProgram Stage Selection Presenter ( view , Ġrepository , Ġrules Utils , Ġscheduler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġset Ġprogram Stages `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogram Id Ġ= Ġ" program Id " ĊĠĠĠĠĠĠĠ Ġval Ġenrollment Uid Ġ= Ġ" program Uid " ĊĠĠĠĠĠĠĠ Ġval Ġprogram Stages Ġ= ĠlistOf ( Program Stage . builder (). uid (" program Stage "). build ()) ĊĠĠĠĠĠĠĠ Ġval Ġcalc Result Ġ= ĠResult . success ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRule Effect . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRule Action Hide Program Stage . create (" program Stage ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . enrollment Program Stages ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenrollment Uid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġdo Return ĠFlow able . just ( program Stages ) ĊĠĠĠĠĠĠĠ Ġwhenever ( repository . calculate ()) Ġdo Return ĠFlow able . just ( calc Result ) ĊĠĠĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrules Utils . apply Rule Effects ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Stages . associate By ({ Ġit . uid () Ġ}, Ġ{ Ġit Ġ}). to Mutable Map (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc Result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġdo Answer Ġ{ Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ Ġpresenter . get Program Stages ( program Id , Ġenrollment Uid ) ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). setData ( program Stages ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġhide Ġprogram Stage Ġwhen Ġapp `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogram Stages : ĠMutable List < Program Stage > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( Program Stage . builder (). uid (" program Stage "). build ()) ĊĠĠĠĠĠĠĠ Ġval Ġcalc Result Ġ= ĠResult . success ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRule Effect . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRule Action Hide Program Stage . create (" program Stage ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrules Utils . apply Rule Effects ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Stages . associate By ({ Ġit . uid () Ġ}, Ġ{ Ġit Ġ}). to Mutable Map (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc Result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġdo Answer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . get Argument < Mutable Map < String , ĠProgram Stage >>( 0 ). remove (" program Stage ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( presenter . apply Effects ( program Stages , Ġcalc Result ). size , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġdo Ġnothing Ġwhen Ġrule Ġeffect Ġhas Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogram Stages : ĠMutable List < Program Stage > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( Program Stage . builder (). uid (" program Stage "). build ()) ĊĠĠĠĠĠĠĠ Ġval Ġcalc Result : ĠResult < Rule Effect > Ġ= ĠResult . failure ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠException (" error ") ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠResult < Rule Effect > ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . apply Effects ( program Stages , Ġcalc Result ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Stages ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġset Ġprogram Ġstage Ġwhen Ġit Ġis Ġclicked `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogram Stage Ġ= ĠProgram Stage . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. uid (" program Stage ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. repeat able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. period Type ( Period Type . Monthly ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. access ( Access . create ( true , Ġtrue , ĠData Access . create ( true , Ġtrue ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġpresenter . on Program Stage Click ( program Stage ) ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). set Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Stage . uid (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Stage . repeat able () !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Stage . period Type () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġgo Ġback Ġwhen Ġback Ġbutton Ġis Ġclicked `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . on Back Click () ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). back () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġdispose Ġof Ġall Ġdis pos ables `() Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . on Det t ach () ĊĊĠĠĠĠĠĠĠ Ġval Ġdis posable Size Ġ= Ġpresenter . composite Disposable . size () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( dis posable Size Ġ== Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġdisplay Ġmessage `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" message " ĊĊĠĠĠĠĠĠĠ Ġpresenter . display Message ( message ) ĊĊĠĠĠĠĠĠĠ Ġverify ( view ). display Message ( message ) ĊĠĠĠ Ġ} Ċ } Ċ