package Ġcom . mo hs en oid . rick and mort y . data Ċ Ċ import Ġcom . mo hs en oid . rick and mort y . data . api . model . Api Character Ċ import Ġcom . mo hs en oid . rick and mort y . data . api . model . Api Result Ċ import Ġcom . mo hs en oid . rick and mort y . data . db . model . Db Character Ċ import Ġcom . mo hs en oid . rick and mort y . test . Api Factory Ċ import Ġcom . mo hs en oid . rick and mort y . test . Character Data Factory Ċ import Ġcom . mo hs en oid . rick and mort y . test . Data Factory Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . co Verify Ċ import Ġio . mock k . just Ċ import Ġio . mock k . runs Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . Test Ċ Ċ @ Opt In ( Experimental Cor outines Api :: class ) Ċ class ĠRepository Get Characters Test Ġ: ĠRepository Test () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġif Ġget Characters ById s Ġcalls Ġnetwork Client Ġwhen Ġis Online `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Ids : ĠList < Int > Ġ= ĠData Factory . random Int List ( count Ġ= Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġstub Status Provider Is Online ( is Online Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġstub Api Fetch Characters ById s ( Api Factory . Characters . make Characters ()) ĊĠĠĠĠĠĠĠ Ġstub Db Query Characters ById s ( Character Data Factory . make Db Characters ( count Ġ= Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġstub Db Insert OrUpdate Character () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWHEN ĊĠĠĠĠĠĠĠ Ġrepository . get Characters ById s ( character Ids Ġ= Ġcharacter Ids ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġapi . fetch Characters ById s ( character Ids Ġ= Ġany ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġdb . insert OrUpdate Character ( character Ġ= Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġdb . query Characters ById s ( character Ids Ġ= Ġany ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġif Ġget Characters ById s Ġcalls Ġdb Ġonly Ġwhen Ġis Offline `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN ĊĠĠĠĠĠĠĠ Ġval Ġcharacter Ids : ĠList < Int > Ġ= ĠData Factory . random Int List ( count Ġ= Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġstub Status Provider Is Online ( is Online Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġstub Db Query Characters ById s ( Character Data Factory . make Db Characters ( count Ġ= Ġ 5 )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWHEN ĊĠĠĠĠĠĠĠ Ġrepository . get Characters ById s ( character Ids Ġ= Ġcharacter Ids ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġapi . fetch Characters ById s ( character Ids Ġ= Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġdb . query Characters ById s ( character Ids Ġ= Ġany ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstub Api Fetch Characters ById s ( characters : ĠList < Api Character >) Ġ{ ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġapi . fetch Characters ById s ( character Ids Ġ= Ġany ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Result . Success ( characters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstub Db Query Characters ById s ( characters : ĠList < Db Character >) Ġ{ ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġdb . query Characters ById s ( character Ids Ġ= Ġany ()) Ġ} Ġreturns Ġcharacters ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstub Db Insert OrUpdate Character () Ġ{ ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġdb . insert OrUpdate Character ( any ()) Ġ} Ġjust Ġruns ĊĠĠĠ Ġ} Ċ } Ċ