package Ġcom . not o . app . data . source Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . filters . Small Test Ċ import Ġcom . not o . app . util . local DataSource Module Ċ import Ġcom . not o . app . domain . model . Library Ċ import Ġcom . not o . app . domain . source . Local Library DataSource Ċ import Ġcom . not o . app . in Memory Database Module Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . k oin . core . context . load K oin Modules Ċ import Ġorg . k oin . core . context . unload K oin Modules Ċ import Ġorg . k oin . test . K oin Test Ċ import Ġorg . k oin . test . get Ċ import Ġkotlin . test . assertContains Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ Ċ @ Experimental Cor outines Api Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ @ Small Test Ċ class ĠLocal Library DataSource Test Ġ: ĠK oin Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsource : ĠLocal Library DataSource ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġinstant Task Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġun load K oin Modules ( local DataSource Module ) ĊĠĠĠĠĠĠĠ Ġload K oin Modules ( in Memory Database Module ) ĊĠĠĠĠĠĠĠ Ġsource Ġ= Ġget () ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . clear Libraries () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget _ all _ libraries _ should _ return _ an _ empty _ list () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdb Libraries Ġ= Ġsource . get Libraries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġdb Libraries . isEmpty () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcreate _ new _ library _ should _ insert _ new _ library _ in _ the _ database () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlibrary Ġ= Ġcreate Library () ĊĠĠĠĠĠĠĠ Ġsource . create Library ( library ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdb Libraries Ġ= Ġsource . get Libraries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠĠĠĠĠ Ġassert Contains ( db Libraries , Ġlibrary . copy ( id Ġ= Ġ 7 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget _ library _ by _ id _ should _ return _ a _ library _ with _ matching _ id () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlibrary Ġ= Ġcreate Library () ĊĠĠĠĠĠĠĠ Ġsource . create Library ( library ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdb Library Ġ= Ġsource . get Library ById ( library Id Ġ= Ġ 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( library . copy ( id Ġ= Ġ 9 ), Ġdb Library ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdate _ library _ should _ update _ library _ with _ matching _ id () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlibrary Ġ= Ġcreate Library () ĊĠĠĠĠĠĠĠ Ġsource . create Library ( library ) ĊĊĠĠĠĠĠĠĠ Ġval Ġupdated Library Ġ= Ġlibrary . copy ( id Ġ= Ġ 8 , Ġtitle Ġ= Ġ" Code ") ĊĠĠĠĠĠĠĠ Ġsource . update Library ( updated Library ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdb Library Ġ= Ġsource . get Library ById ( 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( updated Library , Ġdb Library ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete _ library _ should _ remove _ library _ with _ matching _ id () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlibrary Ġ= Ġcreate Library () ĊĠĠĠĠĠĠĠ Ġsource . create Library ( library ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdb Libraries Ġ= Ġsource . get Libraries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠĠĠĠĠ Ġassert Contains ( db Libraries , Ġlibrary . copy ( id Ġ= Ġ 6 )) ĊĊĠĠĠĠĠĠĠ Ġsource . delete Library ( library . copy ( id Ġ= Ġ 6 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġupdated Db Libraries Ġ= Ġsource . get Libraries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġupdated Db Libraries . isEmpty () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġclear _ libraries _ should _ remove _ all _ libraries () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Ġ= Ġcreate Library ( title Ġ= Ġ" Work Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . create Library ( library ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdb Libraries Ġ= Ġsource . get Libraries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġdb Libraries . count () Ġ== Ġ 5 Ġ} ĊĊĠĠĠĠĠĠĠ Ġsource . clear Libraries () ĊĊĠĠĠĠĠĠĠ Ġval Ġupdated Db Libraries Ġ= Ġsource . get Libraries () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġupdated Db Libraries . isEmpty () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Library ( title : ĠString Ġ= Ġ" Work ") Ġ= ĠLibrary ( title Ġ= Ġtitle , Ġposition Ġ= Ġ 0 ) Ċ }