package Ġde . r ki . cor on aw arn app . presence tracing . risk . calculation Ċ Ċ import Ġde . r ki . cor on aw arn app . covid certificate . common . crypto graphy . Aes Cryptography Ċ import Ġde . r ki . cor on aw arn app . presence tracing . check ins . crypto graphy . Check In Cryptography Ċ import Ġde . r ki . cor on aw arn app . presence tracing . warning . Warning Package Id Ċ import Ġde . r ki . cor on aw arn app . presence tracing . warning . storage . Trace Warning Package Ċ import Ġde . r ki . cor on aw arn app . server . protocols . internal . pt . Check In OuterClass Ċ import Ġde . r ki . cor on aw arn app . server . protocols . internal . pt . Trace Warning Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġtest helpers . Test Dispatcher Provider Ċ import Ġjava . security . Secure Random Ċ import Ġkotlin . random . as Kotlin Random Ċ Ċ class ĠFind Matches Test Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Instance () Ġ= ĠCheck In Warning Matcher ( ĊĠĠĠĠĠĠĠ ĠTest Dispatcher Provider (), ĊĠĠĠĠĠĠĠ ĠCheck In Cryptography ( Secure Random (). as Kotlin Random (), ĠA es Cryptography ()) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` find Matches Ġworks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcheck In 1 Ġ= Ġcreate Check In ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 2 L , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Location Id Ġ= Ġ" fe 8 4 3 9 4 e 7 3 8 3 8 5 9 0 cc 7 7 0 7 aba 0 3 5 0 c 1 3 0 f 6 d 0 fb 6 f 0 f 2 5 3 5 f 9 7 3 5 f 4 8 1 dee 6 1 8 7 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Str Ġ= Ġ" 2 0 2 1 - 0 3 - 0 4 T 1 0 : 1 5 + 0 1 : 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendDate Str Ġ= Ġ" 2 0 2 1 - 0 3 - 0 4 T 1 0 : 1 7 + 0 1 : 0 0 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcheck In 2 Ġ= Ġcreate Check In ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġ 3 L , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Location Id Ġ= Ġ" 6 9 eb 4 2 7 e 1 a 4 8 1 3 3 9 7 0 4 8 6 2 4 4 4 8 7 e 3 1 b 3 f 1 c 5 bde 4 7 4 1 5 db 9 b 5 2 cc 5 a 2 ece 1 e 0 0 6 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate Str Ġ= Ġ" 2 0 2 1 - 0 3 - 0 4 T 0 9 : 1 5 + 0 1 : 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠendDate Str Ġ= Ġ" 2 0 2 1 - 0 3 - 0 4 T 1 0 : 4 5 + 0 1 : 0 0 " ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwarning 1 Ġ= Ġcreate Warning ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Location Id Ġ= Ġ" 6 9 eb 4 2 7 e 1 a 4 8 1 3 3 9 7 0 4 8 6 2 4 4 4 8 7 e 3 1 b 3 f 1 c 5 bde 4 7 4 1 5 db 9 b 5 2 cc 5 a 2 ece 1 e 0 0 6 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Interval Date Str Ġ= Ġ" 2 0 2 1 - 0 3 - 0 4 T 1 0 : 3 0 + 0 1 : 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperiod Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransmission Risk Level Ġ= Ġ 8 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwarning 2 Ġ= Ġcreate Warning ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrace Location Id Ġ= Ġ" fe 8 4 3 9 4 e 7 3 8 3 8 5 9 0 cc 7 7 0 7 aba 0 3 5 0 c 1 3 0 f 6 d 0 fb 6 f 0 f 2 5 3 5 f 9 7 3 5 f 4 8 1 dee 6 1 8 7 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Interval Date Str Ġ= Ġ" 2 0 2 1 - 0 3 - 0 4 T 1 5 : 3 0 + 0 1 : 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġperiod Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransmission Risk Level Ġ= Ġ 8 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġwarning Package Ġ= Ġobject Ġ: ĠTrace Warning Package Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġextract Un encrypted Warnings (): ĠList < Trace Warning . Trace Time Interval Warning > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( warning 1 , Ġwarning 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġextract Encrypted Warnings () Ġ= Ġempty List < Check In OuterClass . Check In Protected Report >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġpackage Id : ĠWarning Package Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" id " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcreate Instance (). find Matches ( listOf ( check In 1 , Ġcheck In 2 ), Ġwarning Package ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ 0 ]. check In Id ĠshouldBe Ġ 3 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ 0 ]. rounded Minutes ĠshouldBe Ġ 1 5 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ