package Ġreactive circ us . blueprint . demo . data . repository Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Ċ import Ġio . mock k . verify All Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . single Ċ import Ġkotlinx . coroutines . flow . take Ċ import Ġkotlinx . coroutines . test . run Test Ċ import Ġorg . junit . Test Ċ import Ġreactive circ us . blueprint . demo . data . cache . Note Cache Ċ import Ġreactive circ us . blueprint . demo . domain . model . Note Ċ Ċ @ Experimental Cor outines Api Ċ class ĠCor outines InMemory Note Repository Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdummy Notes Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠNote ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġ" uuid 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ" Note Ġ 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Created Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Last Updated Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠNote ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġ" uuid 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ" Note Ġ 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Created Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Last Updated Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġnote Cache Ġ= Ġmock k < Note Cache >() ĊĊĠĠĠ Ġprivate Ġval Ġin Memory Repository Ġ= ĠCor outines InMemory Note Repository ( note Cache ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` start Ġstreaming Ġall Ġnotes Ġfrom Ġcache Ġwhen Ġcollected `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnote Cache . all Notes () Ġ} Ġreturns Ġdummy Notes ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġin Memory Repository . stream All Notes (). take ( 1 ). single () ĊĊĠĠĠĠĠĠĠ Ġverify All Ġ{ Ġnote Cache . all Notes () Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( dummy Notes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` return Ġexisting Ġnote Ġfrom Ġcache Ġwhen Ġnote Ġwith Ġmatching Ġuuid Ġexists `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnote Cache . find Note ( any ()) Ġ} Ġreturns Ġdummy Notes [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġin Memory Repository . get Note By Uuid ( dummy Notes [ 0 ]. uuid ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify All Ġ{ Ġnote Cache . find Note ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( dummy Notes [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` return Ġnull Ġwhen Ġno Ġnote Ġwith Ġmatching Ġuuid Ġexists `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnote Cache . find Note ( any ()) Ġ} Ġreturns Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġin Memory Repository . get Note By Uuid ( dummy Notes [ 0 ]. uuid ) ĊĊĠĠĠĠĠĠĠ Ġverify All Ġ{ Ġnote Cache . find Note ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` a Ġnote Ġcan Ġbe Ġadded Ġto Ġcache `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnote Cache . add Notes ( any ()) Ġ} Ġreturns ĠUnit ĊĊĠĠĠĠĠĠĠ Ġin Memory Repository . add Note ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNote ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ" Note ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Created Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Last Updated Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġverify All Ġ{ Ġnote Cache . add Notes ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` trigger Ġnew Ġemission Ġof Ġall Ġnotes Ġwhen Ġadded Ġnew Ġnote `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnote Cache . all Notes () Ġ} Ġreturns Ġdummy Notes ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnote Cache . add Notes ( any ()) Ġ} Ġreturns ĠUnit ĊĊĠĠĠĠĠĠĠ Ġin Memory Repository . add Note ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNote ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ" Note ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Created Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Last Updated Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġin Memory Repository . stream All Notes (). take ( 1 ). single () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġnote Cache . all Notes () Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( dummy Notes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` a Ġnote Ġin Ġcache Ġcan Ġbe Ġupdated `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnote Cache . update Note ( any ()) Ġ} Ġreturns ĠUnit ĊĊĠĠĠĠĠĠĠ Ġin Memory Repository . update Note ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Notes [ 0 ]. copy ( content Ġ= Ġ" New Ġnote ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġverify All Ġ{ Ġnote Cache . update Note ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` trigger Ġnew Ġemission Ġof Ġall Ġnotes Ġwhen Ġupdated Ġexisting Ġnote `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnote Cache . all Notes () Ġ} Ġreturns Ġdummy Notes ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnote Cache . update Note ( any ()) Ġ} Ġreturns ĠUnit ĊĊĠĠĠĠĠĠĠ Ġin Memory Repository . update Note ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Notes [ 0 ]. copy ( content Ġ= Ġ" New Ġnote ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġin Memory Repository . stream All Notes (). take ( 1 ). single () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġnote Cache . all Notes () Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( dummy Notes ) ĊĠĠĠ Ġ} Ċ } Ċ