package Ġuk . n hs . n hs x . covid 1 9 . android . app . ex posure Ċ Ċ import Ġcom . google . android . gms . common . Connection Result Ċ import Ġcom . google . android . gms . common . api . ApiException Ċ import Ġcom . google . android . gms . common . api . Status Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Test Ċ import Ġuk . n hs . n hs x . covid 1 9 . android . app . ex posure . Fetch Temporary Exposure Keys . Temporary Exposure Keys Fetch Result . Failure Ċ import Ġuk . n hs . n hs x . covid 1 9 . android . app . ex posure . Fetch Temporary Exposure Keys . Temporary Exposure Keys Fetch Result . Resolution Required Ċ import Ġuk . n hs . n hs x . covid 1 9 . android . app . ex posure . Fetch Temporary Exposure Keys . Temporary Exposure Keys Fetch Result . Success Ċ import Ġuk . n hs . n hs x . covid 1 9 . android . app . remote . data . NH ST emp orary Exposure Key Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDate Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠFetch Temporary Exposure Keys Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġexposure Notification Api Ġ= Ġmock k < Exposure Notification Api >( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġtransmission Risk Level App lier Ġ= Ġmock k < Trans mission Risk Level App lier >( relax ed Ġ= Ġtrue ) ĊĊĠĠĠ Ġprivate Ġval Ġtest Subject Ġ= ĊĠĠĠĠĠĠĠ ĠFetch Temporary Exposure Keys ( ex posure Notification Api , Ġtransmission Risk Level App lier ) ĊĠĠĠ Ġprivate Ġval Ġfake On setDate Ġ= ĠLocalDate . parse (" 2 0 1 4 - 1 2 - 2 5 ") ĊĊĠĠĠ Ġ// ĠFrom ĠCO V - 3 6 4 5 : ĊĠĠĠ Ġ// ĠChange Ġthe Ġkey Ġupload Ġwindow Ġkey Ġto Ġinclude Ġall Ġdays Ġwith Ġtransmission Risk Level Ġabove Ġ 0 ĊĠĠĠ Ġ// Ġ( ass uming Ġa Ġkey Ġfor Ġthat Ġday Ġexists ) ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` filters Ġout Ġkeys Ġwith Ġtransmission Risk Level Ġof Ġ 0 `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey 1 Ġ= ĠN H ST emp orary Exposure Key (" 1 ", Ġinterval Start (" 2 0 1 4 - 1 2 - 2 2 T 0 0 : 0 0 : 0 0 Z "), Ġ 1 4 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġkey 2 Ġ= ĠN H ST emp orary Exposure Key (" 2 ", Ġinterval Start (" 2 0 1 4 - 1 2 - 2 3 T 0 0 : 0 0 : 0 0 Z "), Ġ 1 4 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġkey 3 Ġ= ĠN H ST emp orary Exposure Key (" 3 ", Ġinterval Start (" 2 0 1 4 - 1 2 - 2 4 T 0 0 : 0 0 : 0 0 Z "), Ġ 1 4 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġkey 4 Ġ= ĠN H ST emp orary Exposure Key (" 4 ", Ġinterval Start (" 2 0 1 4 - 1 2 - 2 5 T 0 0 : 0 0 : 0 0 Z "), Ġ 1 4 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġkey 5 Ġ= ĠN H ST emp orary Exposure Key (" 5 ", Ġinterval Start (" 2 0 1 4 - 1 2 - 2 6 T 0 0 : 0 0 : 0 0 Z "), Ġ 1 4 4 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexposure Keys Ġ= ĠlistOf ( key 1 , Ġkey 2 , Ġkey 3 , Ġkey 4 , Ġkey 5 ) ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġexposure Notification Api . temporary Exposure Key History () Ġ} Ġreturns Ġexposure Keys ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtransmission Risk Level App lier . apply Trans mission Risk Levels ( any (), Ġany ()) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexposure Keys . map Ġ{ Ġif Ġ( it . key Ġ== Ġ" 1 ") Ġit . copy ( transmission Risk Level Ġ= Ġ 0 ) Ġelse Ġit . copy ( transmission Risk Level Ġ= Ġ 1 ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtest Subject ( fake On setDate ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠSuccess ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey 2 . copy ( transmission Risk Level Ġ= Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey 3 . copy ( transmission Risk Level Ġ= Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey 4 . copy ( transmission Risk Level Ġ= Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey 5 . copy ( transmission Risk Level Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fetch Ġfails Ġwhen Ġtransmission Risk Level App lier Ġthrows `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġexposure Notification Api . temporary Exposure Key History () Ġ} Ġreturns ĠlistOf () ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Message Ġ= Ġ" Something Ġwent Ġwrong " ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtransmission Risk Level App lier . apply Trans mission Risk Levels ( any (), Ġany ()) Ġ} Ġthrows ĠException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Message ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtest Subject ( fake On setDate ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġresult Ġis ĠFailure Ġ} ĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġ( result Ġas ĠFailure ). throwable . message Ġ== Ġexpected Message Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fetch Ġfails Ġbecause Ġof Ġresolution Ġrequired Ġapi Ġexception Ġreturns Ġresolution Ġrequired `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Status Ġ= ĠStatus ( Connection Result . RESOL UTION _ REQUIRED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠApiException ( expected Status ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġexposure Notification Api . temporary Exposure Key History () Ġ} Ġthrows Ġexception ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtest Subject ( fake On setDate ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Resolution Required ( expected Status ), Ġresult ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fetch Ġfails Ġbecause Ġof Ġnon - resolution - required Ġapi Ġexception Ġreturns Ġfailure `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Status Ġ= ĠStatus ( Connection Result . DE VELO PER _ ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠApiException ( expected Status ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġexposure Notification Api . temporary Exposure Key History () Ġ} Ġthrows Ġexception ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtest Subject ( fake On setDate ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Failure ( exception ), Ġresult ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fetch Ġfails Ġbecause Ġof Ġapi Ġexception Ġreturns Ġfailure `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠApiException ( Status ( 1 0 )) ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġexposure Notification Api . temporary Exposure Key History () Ġ} Ġthrows Ġexception ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtest Subject ( fake On setDate ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Failure ( exception ), Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fetch Ġfails Ġbecause Ġof Ġgeneric Ġexception Ġreturns Ġfailure `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠException (" test ") ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġexposure Notification Api . temporary Exposure Key History () Ġ} Ġthrows Ġexception ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtest Subject ( fake On setDate ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Failure ( exception ), Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinterval Start ( date : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmillis In 1 0 Minutes Ġ= ĠDuration . of Minutes ( 1 0 ). to Millis () ĊĠĠĠĠĠĠĠ Ġreturn Ġ( Instant . parse ( date ). to Epoch Milli () Ġ/ Ġmillis In 1 0 Minutes ). toInt () ĊĠĠĠ Ġ} Ċ } Ċ