package Ġcom . j pp . mp data . cache Ċ Ċ import Ġcom . j pp . mp data . cache . adapter . Domain Room Adapter Ċ import Ġcom . j pp . mp data . cache . adapter . Room Domain Adapter Ċ import Ġcom . j pp . mp data . cache . room . DB Movie Genre Ċ import Ġcom . j pp . mp data . cache . room . MP Room Data Base Ċ import Ġcom . j pp . mp data . cache . room . Movie Genre DAO Ċ import Ġcom . j pp . mp domain . Movie Genre Ċ import Ġio . mock k . Runs Ċ import Ġio . mock k . every Ċ import Ġio . mock k . impl . annotations . Rel ax ed Mock K Ċ import Ġio . mock k . junit 5 . Mock K Extension Ċ import Ġio . mock k . just Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . slot Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertNotNull Ċ import Ġorg . junit . jupiter . api . Assertions . assertNull Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ Ċ @ Extend With ( Mock K Extension :: class ) Ċ class ĠMovie Genre Cache Test Ġ{ ĊĊĠĠĠ Ġ@ Rel ax ed Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġto Domain : ĠRoom Domain Adapter ĊĊĠĠĠ Ġ@ Rel ax ed Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġto Room : ĠDomain Room Adapter ĊĊĠĠĠ Ġ@ Rel ax ed Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtimestamp : ĠCache Timestamp Helper ĊĊĠĠĠ Ġ@ Rel ax ed Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmovie Gen res Dao : ĠMovie Genre DAO ĊĊĠĠĠ Ġprivate Ġval Ġnow Ġ= Ġ 1 2 L ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsubject : ĠMovie Genre Cache ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroom Data Base Ġ= Ġmock k < MP Room Data Base >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġroom Data Base . movie Gen res Dao () Ġ} Ġreturns Ġmovie Gen res Dao ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtimestamp . now () Ġ} Ġreturns Ġnow ĊĊĠĠĠĠĠĠĠ Ġsubject Ġ= ĠMovie Genre Cache ( room Data Base , Ġto Domain , Ġto Room , Ġtimestamp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġreturn Ġnull Ġwhen Ġthere Ġare Ġno Ġgen res Ġstored Ġin Ġdb `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmovie Gen res Dao . get Movie Gen res ( any ()) Ġ} Ġreturns Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsubject . get Movie Gen res () ĊĊĠĠĠĠĠĠĠ ĠassertNull ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġmap Ġall Ġdb Ġgen res Ġto Ġdomain Ġgen res `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmovie Gen res Dao . get Movie Gen res ( any ()) Ġ} Ġreturns Ġdb Gen res ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġto Domain . movie Genre ( db Genre 1 ) Ġ} Ġreturns Ġdomain Genre 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġto Domain . movie Genre ( db Genre 2 ) Ġ} Ġreturns Ġdomain Genre 2 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġto Domain . movie Genre ( db Genre 3 ) Ġ} Ġreturns Ġdomain Genre 3 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġto Domain . movie Genre ( db Genre 4 ) Ġ} Ġreturns Ġdomain Genre 4 ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsubject . get Movie Gen res () ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( result ) ĊĠĠĠĠĠĠĠ Ġresult ?. forEach Indexed Ġ{ Ġindex , Ġmovie Genre Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( domain Gen res [ index ], Ġmovie Genre ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġsave Ġmapped Ġmovie Ġgenre `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapturing Slot Ġ= Ġslot < List < DB Movie Genre >>() ĊĊĠĠĠĠĠĠĠ Ġval Ġdue Date Ġ= Ġ 1 4 L ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtimestamp . now () Ġ} Ġreturns Ġ 4 L ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtimestamp . movie Gen res Refresh Time () Ġ} Ġreturns Ġ 1 0 L ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġto Room . movie Genre ( domain Genre 1 , Ġdue Date ) Ġ} Ġreturns Ġdb Genre 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġto Room . movie Genre ( domain Genre 2 , Ġdue Date ) Ġ} Ġreturns Ġdb Genre 2 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġto Room . movie Genre ( domain Genre 3 , Ġdue Date ) Ġ} Ġreturns Ġdb Genre 3 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġto Room . movie Genre ( domain Genre 4 , Ġdue Date ) Ġ} Ġreturns Ġdb Genre 4 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmovie Gen res Dao . save Movie Gen res ( capture ( capt uring Slot )) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġsubject . save Movie Gen res ( domain Gen res ) ĊĊĠĠĠĠĠĠĠ Ġcapturing Slot . captured . forEach Indexed Ġ{ Ġindex , Ġmovie Genre Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( db Gen res [ index ], Ġmovie Genre ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdb Genre 1 Ġ= Ġmock k < DB Movie Genre >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdb Genre 2 Ġ= Ġmock k < DB Movie Genre >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdb Genre 3 Ġ= Ġmock k < DB Movie Genre >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdb Genre 4 Ġ= Ġmock k < DB Movie Genre >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdb Gen res Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Genre 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Genre 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Genre 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Genre 4 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdomain Genre 1 Ġ= Ġmock k < Movie Genre >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdomain Genre 2 Ġ= Ġmock k < Movie Genre >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdomain Genre 3 Ġ= Ġmock k < Movie Genre >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdomain Genre 4 Ġ= Ġmock k < Movie Genre >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdomain Gen res Ġ= ĠlistOf ( domain Genre 1 , Ġdomain Genre 2 , Ġdomain Genre 3 , Ġdomain Genre 4 ) ĊĠĠĠ Ġ} Ċ } Ċ