package Ġcom . gl . hab ital arm . data Ċ Ċ import Ġcom . gl . hab ital arm . enums . ED ay Ċ import Ġcom . gl . hab ital arm . enums . E Re petition State Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . flow . flow Of Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . hamcrest . Core Matchers .` is ` Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mockito .* Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . Local Time Ċ Ċ class ĠH abit Repository Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Mock Dao Ġ= Ġmock ( H abit Dao :: class . java ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Repository : ĠH abit Repository ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdb Ġ= Ġmock ( H abit Alarm Database :: class . java ) ĊĠĠĠĠĠĠĠ Ġ` when `( db . habit Dao ()). thenReturn ( m Mock Dao ) ĊĠĠĠĠĠĠĠ Ġm Repository Ġ= ĠH abit Repository ( db . habit Dao ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget H abit ByName _ habit _ habit WI th Same Values () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠH abit ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Reading Ġa Ġbook ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ= Ġboolean ArrayOf ( false , Ġtrue , Ġtrue , Ġfalse , Ġfalse , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ing Time Ġ= ĠLocal Time . of ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġflow Of ( expected ) ĊĠĠĠĠĠĠĠ Ġ` when `( m Mock Dao . get H abit ByName ( expected . name )). thenReturn ( data ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠH abit Ġ= Ġm Repository . get H abit ByName ( expected . name ). first () ĊĠĠĠĠĠĠĠ Ġverify ( m Mock Dao ). get H abit ByName ( expected . name ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġ` is `( expected )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget H ab its With Re pet itions By Day _ hab its And Re pet itions _ habit And Re petition With Same Values () Ġ= ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovided 1 Ġ= ĠH abit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Reading Ġa Ġbook ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ= Ġboolean ArrayOf ( false , Ġtrue , Ġtrue , Ġfalse , Ġfalse , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ing Time Ġ= ĠLocal Time . of ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovided 2 Ġ= ĠH abit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 0 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Work out ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ= Ġboolean ArrayOf ( false , Ġtrue , Ġtrue , Ġfalse , Ġfalse , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ing Time Ġ= ĠLocal Time . of ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovided 3 Ġ= ĠRe petition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhabit Id Ġ= Ġprovided 1 . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠE Re petition State . Done ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovided 4 Ġ= ĠRe petition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhabit Id Ġ= Ġprovided 1 . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= ĠLocalDate . now (). minus Days ( 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠE Re petition State . Done ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected 1 Ġ= ĠH abit With Re pet itions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhabit Ġ= Ġprovided 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepet itions Ġ= ĠlistOf ( provided 3 , Ġprovided 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected 2 Ġ= ĠH abit With Re pet itions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhabit Ġ= Ġprovided 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` when `( m Mock Dao . get H ab its With Re pet itions By Day ( ED ay . Monday . ordinal )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( flow Of ( listOf ( expected 1 , Ġexpected 2 ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Repository . get H ab its With Re pet itions By Day ( ED ay . Monday ). first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( m Mock Dao ). get H ab its With Re pet itions By Day ( ED ay . Monday . ordinal ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult 1 : ĠH abit With Re pet itions Ġ= Ġresult [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult 2 : ĠH abit With Re pet itions Ġ= Ġresult [ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result 1 , Ġ` is `( expected 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result 2 , Ġ` is `( expected 2 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget H ab its With Re pet itions By Date _ hab its And Re pet itions _ habit And Re petition With Same Values () Ġ= ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovided 1 Ġ= ĠH abit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Reading Ġa Ġbook ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ= Ġboolean ArrayOf ( false , Ġtrue , Ġtrue , Ġfalse , Ġfalse , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ing Time Ġ= ĠLocal Time . of ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovided 2 Ġ= ĠH abit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 0 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Work out ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ= Ġboolean ArrayOf ( false , Ġtrue , Ġtrue , Ġfalse , Ġfalse , Ġfalse , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify ing Time Ġ= ĠLocal Time . of ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovided 3 Ġ= ĠRe petition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhabit Id Ġ= Ġprovided 1 . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= ĠLocalDate . of ( 2 0 2 0 , Ġ 1 2 , Ġ 2 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠE Re petition State . Done ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected 1 Ġ= ĠH abit With Re petition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhabit Ġ= Ġprovided 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepet ition Ġ= Ġprovided 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected 2 Ġ= ĠH abit With Re petition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhabit Ġ= Ġprovided 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġday Ġ= ĠE Day . S unday . ordinal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġepoch Day Ġ= Ġprovided 3 . date . to Epoch Day () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` when `( m Mock Dao . get H ab its With Re pet itions By Day And Date ( day , Ġepoch Day )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( flow Of ( listOf ( expected 1 , Ġexpected 2 ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġm Repository . get H ab its With Re pet itions By Date ( provided 3 . date ). first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( m Mock Dao ). get H ab its With Re pet itions By Day And Date ( day , Ġepoch Day ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult 1 : ĠH abit With Re petition Ġ= Ġresult [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult 2 : ĠH abit With Re petition Ġ= Ġresult [ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result 1 , Ġ` is `( expected 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result 2 , Ġ` is `( expected 2 )) ĊĠĠĠĠĠĠĠ Ġ} Ċ }