package Ġcom . github . c et one k . big biz nis . core Ċ Ċ import Ġcom . github . c et one k . big biz nis . Test Profile Ċ import Ġcom . github . c et one k . big biz nis . domain . service . Ev ict All Cache UseCase Ċ import Ġcom . github . c et one k . big biz nis . domain . entity . pers isted . Average Salary Ċ import Ġcom . github . c et one k . big biz nis . domain . repository . Average Salary Repository Ċ import Ġcom . github . c et one k . big biz nis . domain . service . Fetch Salary UseCase Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . mockito . BDD Mockito .* Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . boot . test . mock . mockito . Mock Bean Ċ Ċ @ SpringBootTest Ċ @ Test Profile Ċ class ĠCache Test Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġfetch Salary : ĠFetch Salary UseCase ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġev ict Cache : ĠEv ict All Cache UseCase ĊĊĠĠĠ Ġ@ Mock Bean ĊĠĠĠ Ġlateinit Ġvar Ġaverage Salary Repository : ĠAverage Salary Repository ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġev ict Cache . execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fetch Ġall Ġis Ġcached Ġif Ġresult Ġis nt Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġgiven ( average Salary Repository . findAll ()). willReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAverage Salary ( quarter Ġ= Ġ 4 , Ġyear Ġ= Ġ 2 0 2 0 , Ġc row ns Ġ= Ġ 2 5 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġfetch Salary . fetch All () ĊĠĠĠĠĠĠĠ Ġfetch Salary . fetch All () ĊĠĠĠĠĠĠĠ Ġfetch Salary . fetch All () ĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġverify ( average Salary Repository , Ġtimes ( 1 )). findAll () ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( average Salary Repository ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fetch Ġall Ġis ĠNOT Ġcached Ġwhen Ġresult Ġis Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġgiven ( average Salary Repository . findAll ()). willReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ()) ĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġfetch Salary . fetch All () ĊĠĠĠĠĠĠĠ Ġfetch Salary . fetch All () ĊĠĠĠĠĠĠĠ Ġfetch Salary . fetch All () ĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġverify ( average Salary Repository , Ġtimes ( 3 )). findAll () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fetch Ġall Ġis Ġcached Ġthen Ġev ict ed Ġand Ġthen Ġcached Ġagain `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġgiven ( average Salary Repository . findAll ()). willReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Average Salary ( quarter Ġ= Ġ 4 , Ġyear Ġ= Ġ 2 0 2 0 , Ġc row ns Ġ= Ġ 2 5 0 0 0 ))) ĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġfetch Salary . fetch All () ĊĊĠĠĠĠĠĠĠ Ġev ict Cache . execute () ĊĊĠĠĠĠĠĠĠ Ġfetch Salary . fetch All () ĊĠĠĠĠĠĠĠ Ġfetch Salary . fetch All () ĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġverify ( average Salary Repository , Ġtimes ( 2 )). findAll () ĊĠĠĠ Ġ} ĊĊ Ċ }