package Ġde . r ki . cor on aw arn app . presence tracing . storage . retention Ċ Ċ import Ġde . r ki . cor on aw arn app . presence tracing . check ins . qrcode . Trace Location Ċ import Ġde . r ki . cor on aw arn app . presence tracing . storage . repo . Trace Location Repository Ċ import Ġde . r ki . cor on aw arn app . server . protocols . internal . pt . Trace Location OuterClass Ċ import Ġde . r ki . cor on aw arn app . util . TimeStamp er Ċ import Ġio . mock k . Mock K Annotations Ċ import Ġio . mock k . Runs Ċ import Ġio . mock k . every Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġio . mock k . just Ċ import Ġio . mock k . verify Ċ import Ġkotlinx . coroutines . flow . flow Of Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġok io . ByteString . Companion . encode Ċ import Ġorg . joda . time . Instant Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġtest helpers . Base Test Ċ Ċ internal Ġclass ĠTrace Location Clean er Test Ġ: ĠBaseTest () Ġ{ ĊĊĠĠĠ Ġ@ Mock K Ġlateinit Ġvar Ġtrace Location Repository : ĠTrace Location Repository ĊĠĠĠ Ġ@ Mock K Ġlateinit Ġvar Ġtime Stamp er : ĠTime Stamp er ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrace Location Repository . delete Trace Location ( any ()) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġ// ĠNow Ġ= ĠJan Ġ 1 6 th Ġ 2 0 2 0 , Ġ 0 0 : 0 0 ĊĠĠĠĠĠĠĠ Ġ// ĠTrace Locations Ġshould Ġbe Ġkept Ġfor Ġ 1 5 Ġdays , Ġso Ġevery Ġtrace Ġlocation Ġwith Ġand Ġend Ġdate Ġbefore ĊĠĠĠĠĠĠĠ Ġ// ĠJan Ġ 1 st Ġ 2 0 2 0 , Ġ 0 0 : 0 0 Ġshould Ġget Ġdeleted ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtime Stamp er . now UTC Ġ} Ġreturns ĠInstant . parse (" 2 0 2 0 - 0 1 - 1 6 T 0 0 : 0 0 : 0 0 . 0 0 0 Z ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Instance () Ġ= ĠTrace Location Clean er ( trace Location Repository , Ġtime Stamp er ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` clean Up () Ġshould Ġdo Ġnothing Ġwhen Ġno Ġtrace Ġlocations Ġare Ġstored `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrace Location Repository . all Trace Locations Ġ} Ġreturns Ġflow Of ( emptyList ()) ĊĊĠĠĠĠĠĠĠ Ġcreate Instance (). clean Up () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġtrace Location Repository . delete Trace Location ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` clean Up () Ġshould ĠNOT Ġdelete Ġtrace Ġlocations Ġwith Ġan Ġend Ġdate Ġthat Ġis Ġnot Ġolder Ġthan Ġ 1 5 Ġdays `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Blocking Test Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Valid Trace Location Ġ= Ġcreate Trace Location With EndDate ( Instant . parse (" 2 0 2 0 - 0 1 - 0 1 T 0 0 : 0 0 : 0 0 . 0 0 0 Z ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrace Location Repository . all Trace Locations Ġ} Ġreturns Ġflow Of ( listOf ( last Valid Trace Location )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Instance (). clean Up () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġtrace Location Repository . delete Trace Location ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` clean Up () Ġshould ĠNOT Ġdelete Ġtrace Ġlocations Ġwithout Ġend Ġdates `() Ġ= Ġrun Blocking Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpermanent Trace Location Ġ= Ġcreate Trace Location With EndDate ( null ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrace Location Repository . all Trace Locations Ġ} Ġreturns Ġflow Of ( listOf ( permanent Trace Location )) ĊĊĠĠĠĠĠĠĠ Ġcreate Instance (). clean Up () ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġtrace Location Repository . delete Trace Location ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` clean Up () Ġshould Ġdelete Ġtrace Ġlocations Ġthat Ġare Ġolder Ġthan Ġ 1 5 Ġdays `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Blocking Test Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Trace Location Ġ= Ġcreate Trace Location With EndDate ( Instant . parse (" 2 0 1 9 - 1 2 - 3 1 T 2 3 : 5 9 : 5 9 . 0 0 0 Z ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtrace Location Repository . all Trace Locations Ġ} Ġreturns Ġflow Of ( listOf ( old Trace Location )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Instance (). clean Up () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtrace Location Repository . delete Trace Location ( old Trace Location ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Trace Location With EndDate ( endDate : ĠInstant ?) Ġ= ĠTrace Location ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠTrace Location OuterClass . Trace Location Type . UN RE CO GN IZED , ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġaddress Ġ= Ġ"", ĊĠĠĠĠĠĠĠ ĠstartDate Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠendDate Ġ= ĠendDate , ĊĠĠĠĠĠĠĠ Ġdefault Check In Length In Minutes Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠ Ġcrypto graphic Seed Ġ= Ġ" seed Ġbyte Ġarray ". encode (), ĊĠĠĠĠĠĠĠ Ġcn PublicKey Ġ= Ġ" cn PublicKey " ĊĠĠĠ Ġ) Ċ } Ċ