package Ġk job . mongo . repository Ċ Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . provided . Project Config Ċ import Ġk job . core . repository . Lock Repository Ċ import Ġk job . core . repository . Lock Repository Contract Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . reactive . as Flow Ċ import Ġkotlinx . coroutines . run Blocking Ċ Ċ class ĠMongo Lock Repository Spec Ġ: ĠLock Repository Contract () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmongo Client Ġ= ĠProject Config . new Mongo Client () ĊĊĠĠĠ Ġoverride Ġval Ġtest ee : ĠLock Repository Ġ= ĠMongo Lock Repository ( mongo Client , Ġclock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase Name Ġ= Ġ" test -" Ġ+ Ġid () ĊĠĠĠĠĠĠĠ Ġclient Ġ= Ġmongo Client ĊĠĠĠĠĠĠĠ Ġexpire Lock In Minutes Ġ= Ġ 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmongo Test ee Ġ= Ġtest ee Ġas ĠMongo Lock Repository ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete All () Ġ{ ĊĠĠĠĠĠĠĠ Ġmongo Test ee . delete All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Spec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġmongo Test ee . ensure Indexes () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshould (" return Ġapplied Ġttl ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġttl Index Ġ= Ġmongo Client ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Database ( mongo Test ee . conf . database Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Collection ( mongo Test ee . conf . lock Collection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. list Indexes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Ġ{ Ġit . getString (" name ") Ġ== Ġ" updated _ at _ ttl " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġttl Index . getLong (" expire After Seconds ") ĠshouldBe Ġ 3 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }