package Ġnl . t ude lf t . hyper ion . ag gregator . workers Ċ Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . un mock k All Ċ import Ġio . mock k . verify Ċ import Ġkotlinx . coroutines . cancel And Join Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġnl . t ude lf t . hyper ion . ag gregator . Configuration Ċ import Ġnl . t ude lf t . hyper ion . ag gregator . utils . Test Without Logging Ċ import Ġnl . t ude lf t . hyper ion . ag gregator . utils . with Specific Transaction Ċ import Ġorg . jetbrains . ex posed . sql . Transaction Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠExp iry Test Ġ: ĠTest Without Logging () Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Expiry Ġhandler Ġshould Ġrun Ġwith Ġthe Ġgranularity Ġinterval `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMock ĠTransaction . exec ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġmock k < Transaction >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . exec ( any ()) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith Specific Transaction ( transaction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRun Ġexpiry Ġhandler Ġfor Ġ 1 . 1 Ġseconds . ĠIt Ġshould Ġinvoke Ġthe Ġdeletion Ġtwice Ġ( once , Ġdelay , Ġtwice ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġworker Ġ= Ġstart Expiry Worker ( Configuration (" a ", Ġ 1 , Ġ 1 , Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 1 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworker . cancel And Join () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġtwice . ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . exec ( match Ġ{ Ġit . contains (" DELETE ĠFROM ") Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġun mock k All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Expiry Ġhandler Ġshould Ġcontinue Ġeven Ġif Ġremoval Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMock ĠTransaction . exec ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġmock k < Transaction >() ĊĠĠĠĠĠĠĠ Ġvar Ġcalled Once Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . exec ( any ()) ĊĠĠĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThrow Ġon Ġfirst Ġcall . ĠElse , Ġdo Ġnothing . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! calledOnce ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalled Once Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Something Ġbad Ġhappened !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith Specific Transaction ( transaction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRun Ġexpiry Ġhandler Ġfor Ġ 1 . 1 Ġseconds . ĠIt Ġshould Ġinvoke Ġthe Ġdeletion Ġtwice Ġ( once , Ġdelay , Ġtwice ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġworker Ġ= Ġstart Expiry Worker ( Configuration (" a ", Ġ 1 , Ġ 1 , Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 1 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworker . cancel And Join () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAssert Ġtwice . ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . exec ( match Ġ{ Ġit . contains (" DELETE ĠFROM ") Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġun mock k All () ĊĠĠĠ Ġ} Ċ } Ċ