package Ġcom . bracket co ve . po str ainer Ċ Ċ import Ġcom . bracket co ve . po str ainer . dependency injection . Android Reminder Provider Ċ import Ġcom . bracket co ve . po str ainer . reminder . Reminder Detail Contract Ċ import Ġcom . bracket co ve . po str ainer . reminder . Reminder Detail Event Ċ import Ġcom . bracket co ve . po str ainer . reminder . Reminder Detail Logic Ċ import Ġcom . wise ass blog . common . Reminder Repository Exception Ċ import Ġcom . wise ass blog . common . Result Wrapper Ċ import Ġcom . wise ass blog . domain . use case . Delete Reminder Ċ import Ġcom . wise ass blog . domain . use case . Get Reminder Ċ import Ġcom . wise ass blog . domain . use case . Update OrCreate Reminder Ċ import Ġio . mock k .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠRem inder Logic Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġview : ĠRem inder Detail Contract . View Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠRem inder Detail Contract . ViewModel Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġprovider : ĠAndroid Reminder Provider Ġ= Ġmock k () ĊĊĠĠĠ Ġ/* ĊĠĠĠ ĠUse ĠC ases Ġfor Ġthis Ġfeature : ĊĠĠĠ ĠGet Reminder ĊĠĠĠ ĠUpdate OrCreate Reminder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġget Reminder : ĠGet Reminder Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġval Ġdelete Reminder : ĠDelete Reminder Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġval Ġupdate Reminder : ĠUpdate OrCreate Reminder Ġ= Ġmock k () ĊĊĠĠĠ Ġprivate Ġval Ġalarm Detail Logic Ġ= ĠRem inder Detail Logic ( ĊĠĠĠĠĠĠĠ Ġview , ĊĠĠĠĠĠĠĠ ĠviewModel , ĊĠĠĠĠĠĠĠ Ġprovider , ĊĠĠĠĠĠĠĠ ĠDispatch ers . Un conf ined ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear All Mocks () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġprovider . get Reminder Ġ} Ġreturns Ġget Reminder ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġprovider . update OrCreate Reminder Ġ} Ġreturns Ġupdate Reminder ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġprovider . delete Reminder Ġ} Ġreturns Ġdelete Reminder ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNote : ĠViewModel Ġwill Ġhave Ġa Ġdummy Ġreminder Ġadded Ġto Ġit Ġwithin Ġthe ĠDependency ĠInjection Ġclass , Ġwhich Ġwill Ġcontain Ġthe ĠRem inder ĠID Ġwhich Ġwas Ġpassed Ġin Ġto Ġthis Ġfeature . ĠHowever , Ġthe Ġrest Ġof Ġthe Ġstate ĊĠĠĠĠ Ġ* Ġfor Ġthat Ġdummy Ġreminder Ġis Ġwrong , Ġso Ġit Ġwill Ġneed Ġto Ġbe Ġupdated Ġimmediately Ġon Ġstart . ĊĠĠĠĠ Ġ* Ġ 1 . ĠAsk ĠViewModel Ġfor Ġid ĊĠĠĠĠ Ġ* Ġ 2 . ĠCall Ġget Reminder ( id ) ĊĠĠĠĠ Ġ* Ġ 3 . Ġupdate ĠViewModel ĊĠĠĠĠ Ġ* Ġ 4 . Ġupdate ĠView ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` On ĠStart Ġid Ġvalid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAL ARM Ġ= Ġget Reminder () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠviewModel . get Reminder () Ġ} Ġreturns ĠAL ARM ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġget Reminder . execute ( any ()) Ġ} Ġreturns ĠResult Wrapper . build Ġ{ Ġcom . bracket co ve . po str ainer . get Reminder () Ġ} ĊĊĠĠĠĠĠĠĠ Ġalarm Detail Logic . handle Event ( Reminder Detail Event . On Start ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĠviewModel . get Reminder () Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĠviewModel . set Reminder ( ALARM ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġview . set Picker Time ( ALARM . hour OfDay , ĠAL ARM . minute ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġview . set Reminder Title ( ALARM . reminder Title ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġview . set V ibrate Only ( ALARM . is V ibrate Only ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġview . set Renew Autom atically ( ALARM . is Renew Autom atically ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġco Verify Ġ{ Ġget Reminder . execute ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBl ank Ġid Ġindicates Ġthat Ġthe Ġuser Ġwants Ġto Ġcreate Ġa Ġnew Ġreminder . ĊĠĠĠĠ Ġ* Ġ 1 . ĠRetrieve Ġreminder Ġfrom ĠVM ĊĠĠĠĠ Ġ* Ġ 2 . ĠWrite Ġreminder Ġback Ġto ĠVM Ġwith Ġnewly Ġgenerated Ġid ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` On ĠStart Ġid Ġblank `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAL ARM Ġ= Ġget Reminder ( id Ġ= Ġ"") ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠviewModel . get Reminder () Ġ} Ġreturns ĠAL ARM ĊĊĠĠĠĠĠĠĠ Ġalarm Detail Logic . handle Event ( Reminder Detail Event . On Start ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĠviewModel . get Reminder () Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĠviewModel . set Reminder ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġview . set Picker Time ( ALARM . hour OfDay , ĠAL ARM . minute ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġview . set Reminder Title ( ALARM . reminder Title ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġview . set V ibrate Only ( ALARM . is V ibrate Only ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġview . set Renew Autom atically ( ALARM . is Renew Autom atically ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġget Reminder . execute ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` On ĠStart Ġid Ġinvalid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAL ARM Ġ= Ġget Reminder ( id Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠviewModel . get Reminder () Ġ} Ġreturns ĠAL ARM ĊĊĠĠĠĠĠĠĠ Ġalarm Detail Logic . handle Event ( Reminder Detail Event . On Start ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĠviewModel . get Reminder () Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . start Reminder List Activity () Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . showMessage ( ERROR _ GENERIC ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOn Ġdone : ĠUser Ġis Ġready Ġto Ġadd / update Ġthe Ġcurrent Ġreminder Ġand Ġreturn Ġto ĠRem inder ĠList ĊĠĠĠĠ Ġ* Ġ 1 . ĠGrab Ġcurrent Ġstate Ġof Ġthe ĠView Ġ( includes ĠTitle , Ġpicker Ġtime , Ġvi br ate Only , Ġrenew Autom atically ) ĊĠĠĠĠ Ġ* Ġ 2 . ĠCreate Ġnew Ġcopy Ġfrom ĠView ĠState Ġ+ Ġproper ĠID Ġfrom ĠViewModel ĊĠĠĠĠ Ġ* Ġ 3 . ĠGive Ġthat Ġcopy Ġto Ġupdate OrCreate Reminder Ġuse Ġcase : ĠSuccess ĊĠĠĠĠ Ġ* Ġ 4 . ĠStart List ĠActivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` On ĠDone ĠUpdate ĠSuccessful `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAL ARM Ġ= Ġget Reminder () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġview . getState () Ġ} Ġreturns ĠAL ARM ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠviewModel . get Reminder () Ġ} Ġreturns ĠAL ARM ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġupdate Reminder . execute ( ALARM ) Ġ} Ġreturns ĠResult Wrapper . build Ġ{ ĠUnit Ġ} ĊĊĠĠĠĠĠĠĠ Ġalarm Detail Logic . handle Event ( Reminder Detail Event . On Done Icon Press ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĠviewModel . get Reminder () Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . getState () Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . showMessage ( REM IND ER _ UPDATED ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . start Reminder List Activity () Ġ} ĊĠĠĠĠĠĠĠ Ġco Verify Ġ{ Ġupdate Reminder . execute ( ALARM ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` On ĠDone ĠUpdate Ġun successful `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAL ARM Ġ= Ġget Reminder () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġview . getState () Ġ} Ġreturns ĠAL ARM ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠviewModel . get Reminder () Ġ} Ġreturns ĠAL ARM ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġupdate Reminder . execute ( ALARM ) Ġ} Ġreturns ĠResult Wrapper . build Ġ{ Ġthrow ĠRem inder Repository Exception Ġ} ĊĊĠĠĠĠĠĠĠ Ġalarm Detail Logic . handle Event ( Reminder Detail Event . On Done Icon Press ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĠviewModel . get Reminder () Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . getState () Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . showMessage ( ERROR _ GENERIC ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . start Reminder List Activity () Ġ} ĊĠĠĠĠĠĠĠ Ġco Verify Ġ{ Ġupdate Reminder . execute ( ALARM ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` On ĠDone Ġempty Ġreminder Ġname `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAL ARM Ġ= Ġget Reminder ( id Ġ= Ġ"") ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġview . getState () Ġ} Ġreturns ĠAL ARM ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠviewModel . get Reminder () Ġ} Ġreturns ĠAL ARM ĊĊĊĠĠĠĠĠĠĠ Ġalarm Detail Logic . handle Event ( Reminder Detail Event . On Done Icon Press ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĠviewModel . get Reminder () Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . getState () Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . showMessage ( PROMPT _ ENTER _ NAME ) Ġ} ĊĠĠĠĠĠĠĠ Ġco Verify Ġ{ Ġupdate Reminder . execute ( ALARM ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* On Ġback : ĠUser Ġw ishes Ġto Ġreturn Ġto ĠList ĠView Ġwithout Ġupdates ĊĠĠĠĠ Ġ* Ġ 1 . ĠTell Ġview Ġto Ġnavigate ĊĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` On ĠBack `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġalarm Detail Logic . handle Event ( Reminder Detail Event . On Back Icon Press ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . start Reminder List Activity () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* On ĠDelete : ĠUser Ġprobably Ġwants Ġto Ġdelete Ġthe Ġreminder ĊĠĠĠĠ Ġ* Ġ 1 . ĠAsk Ġuser Ġfor Ġconfirmation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` On ĠDelete ĠIcon ĠPress `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġalarm Detail Logic . handle Event ( Reminder Detail Event . On Delete Icon Press ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . show Delete Confirm () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* On ĠDelete Ġconfirmed : ĠUser Ġdefinitely Ġwants Ġto Ġdelete Ġthe Ġreminder ĊĠĠĠĠ Ġ* Ġ 1 . ĠAsk ĠviewModel Ġfor Ġid ĊĠĠĠĠ Ġ* Ġ 2 . ĠGive Ġid Ġto Ġdelete Reminder Ġuse Ġcase ĊĠĠĠĠ Ġ* Ġ 3 . Ġstart Ġlist Ġactivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` On ĠDelete Ġconfirmed `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠAL ARM Ġ= Ġget Reminder () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠviewModel . get Reminder () Ġ} Ġreturns ĠAL ARM ĊĠĠĠĠĠĠĠ Ġco Every { Ġdelete Reminder . execute ( ALARM )} Ġreturns ĠResult Wrapper . build Ġ{ ĠUnit Ġ} ĊĊĠĠĠĠĠĠĠ Ġalarm Detail Logic . handle Event ( Reminder Detail Event . On Delete Confirmed ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . start Reminder List Activity () Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . showMessage ( REM IND ER _ DELETED ) Ġ} ĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġdelete Reminder . execute ( ALARM ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ