import Ġio . mock k .* Ċ import Ġio . mock k . impl . annotations . Inject Mock Ks Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġorg . aspect j . lang . Pro ceeding Join Point Ċ import Ġorg . junit . jupiter . api . Assertions Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġsh . n unc . ny lon .* Ċ Ċ @ DisplayName (" Basic Ġtests Ġfor Ġthe ĠN ylon ĠCache ") Ċ class ĠN ylon Cache Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġkey Ġ= Ġ" key " ĊĠĠĠ Ġprivate Ġval Ġcache Name Ġ= Ġ" cache " ĊĠĠĠ Ġprivate Ġval Ġn ylon Value Ġ= ĠN ylon Cache Value . Found (" cached ", Ġ 0 L ) ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġjoin Point Util . extract ( join Point )} Ġreturns ĠN ylon Join Point Extract . Valid Extract ( annotation , Ġkey ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġannotation . key Ġ} Ġreturns Ġkey ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġannotation . cache Name Ġ} Ġreturns Ġcache Name ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġannotation . timeout Millis Ġ} Ġreturns Ġ 1 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Mock K Ġlateinit Ġvar Ġcache Facade : ĠCache Facade ĊĠĠĠ Ġ@ Mock K Ġlateinit Ġvar Ġn ylon Cache Checker : ĠN ylon Cache Checker ĊĠĠĠ Ġ@ Mock K Ġlateinit Ġvar Ġjoin Point Util : ĠJoin Point Util ĊĠĠĠ Ġ@ Mock K Ġlateinit Ġvar Ġjoin Point : ĠPro ceeding Join Point ĊĠĠĠ Ġ@ Mock K Ġlateinit Ġvar Ġannotation : ĠN ylon ĊĠĠĠ Ġ@ Inject Mock Ks Ġlateinit Ġvar Ġn ylon Aspect : ĠN ylon Aspect Redis ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" if Ġchecker Ġdec ides Ġto Ġdo Ġbackground refresh Ġcache facade Ġdoes Ġbackground refresh ") ĊĠĠĠ Ġfun Ġtest Background Refresh (){ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcache Facade . get From Cache ( cache Name , Ġkey ) Ġ} Ġreturns Ġn ylon Value ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġn ylon Cache Checker . check ( annotation , Ġn ylon Value ) Ġ} Ġreturns ĠN ylon State . Refresh In Background ( ny lon Value . value ) ĊĠĠĠĠĠĠĠ Ġjust Run Ġ{ Ġcache Facade . insert In Background ( join Point , Ġannotation , Ġkey ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġn ylon Aspect . ny lon Cache ( join Point ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( ny lon Value . value , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify All Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Facade . get From Cache ( cache Name , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Facade . insert In Background ( join Point , Ġannotation , Ġkey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" if Ġold Ġvalue Ġpasses Ġcheck , Ġnothing Ġis Ġdone ") ĊĠĠĠ Ġfun Ġtest Return Direct (){ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcache Facade . get From Cache ( cache Name , Ġkey ) Ġ} Ġreturns Ġn ylon Value ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġn ylon Cache Checker . check ( annotation , Ġn ylon Value ) Ġ} Ġreturns ĠN ylon State . Good ( ny lon Value . value ) ĊĊĠĠĠĠĠĠĠ Ġn ylon Aspect . ny lon Cache ( join Point ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( ny lon Value . value , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify All Ġ{ Ġcache Facade . get From Cache ( cache Name , Ġkey ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" if Ġold Ġvalue Ġfails Ġcheck , Ġnew Ġitem Ġis Ġfetched Ġand Ġimmediately Ġput Ġinto Ġcache ") ĊĠĠĠ Ġfun Ġtest Fetch Check Failed (){ ĊĠĠĠĠĠĠĠ Ġval ĠnewVal Ġ= Ġ" NEW " ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcache Facade . get From Cache ( cache Name , Ġkey ) Ġ} Ġreturns Ġn ylon Value ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġn ylon Cache Checker . check ( annotation , Ġn ylon Value ) Ġ} Ġreturns ĠN ylon State . Fetch Now ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcache Facade . insert Now ( join Point , Ġannotation , Ġkey ) Ġ} Ġreturns ĠnewVal ĊĊĠĠĠĠĠĠĠ Ġn ylon Aspect . ny lon Cache ( join Point ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( new Val , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify All Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Facade . get From Cache ( cache Name , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Facade . insert Now ( join Point , Ġannotation , Ġkey ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊ Ċ } ĊĊ