/* ĠReleased Ġunder Ġthe ĠMIT Ġlicense , Ġ 2 0 1 8 Ġ*/ Ċ Ċ package Ġcom . github . ptr te ix e ira . nus ports . dao Ċ Ċ import Ġcom . github . ptr te ix e ira . nus ports . model . Connection FailureException Ċ import Ġcom . github . ptr te ix e ira . nus ports . model . Match Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . assertj . core . api . Assertions . assertThat Exception OfType Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . mockito . Argument Matchers . any String Ċ import Ġorg . mockito . BDD Mockito . given Ċ import Ġorg . mockito . BDD Mockito . then Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . Mockito . mock Ċ import Ġorg . mockito . Mockito . never Ċ import Ġretrofit 2 . mock . Calls Ċ import Ġjava . io . IOException Ċ import Ġjava . time . Clock Ċ import Ġjava . time . Instant Ċ import Ġjava . time . Zone Offset Ċ Ċ class ĠSchedule Dao Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġc aa Service Ġ= Ġmock ( C aa Service :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġcache Ġ= Ġmutable Map Of < String , ĠList < Match >>() ĊĠĠĠ Ġprivate Ġval Ġclock Ġ= ĠClock . fixed ( Instant . EPOCH , ĠZone Offset . UTC ) ĊĠĠĠ Ġprivate Ġval Ġschedule Dao Ġ= ĠSchedule Dao ( cache , Ġclock , Ġc aa Service ) ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito . reset ( caa Service ) ĊĠĠĠĠĠĠĠ Ġcache . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġdoes Ġnot Ġsave Ġto Ġthe Ġcache Ġafter Ġerrors `() Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven ( caa Service . get Schedule ( any String (), Ġany String (), Ġany String (), Ġany String ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. willReturn ( Calls . failure ( IOException ())) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ ĠassertThat Exception OfType ( Connection FailureException :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Thrown By Ġ{ Ġrun Blocking Ġ{ Ġschedule Dao . get (" sport - id ") Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( cache ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġloads Ġfrom Ġthe Ġcache Ġfirst Ġif Ġpossible `() Ġ= Ġrun Blocking < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġcache [" sport - id "] Ġ= Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġschedule Dao . get (" sport - id ") ĊĊĠĠĠĠĠĠĠ Ġthen ( caa Service ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. should ( never ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Schedule ( any String (), Ġany String (), Ġany String (), Ġany String ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġsaves Ġresults Ġinto Ġthe Ġcache `() Ġ= Ġrun Blocking < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven ( caa Service . get Schedule ( any String (), Ġany String (), Ġany String (), Ġany String ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. willReturn ( Calls . response ( emptyList ())) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġschedule Dao . get (" sport - id ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( cache ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Only Keys (" sport - id ") ĊĠĠĠ Ġ} Ċ }