package Ġde . r ki . cor on aw arn app . service . submission Ċ Ċ import Ġde . r ki . cor on aw arn app . exception . No GUID Or T AN Set Exception Ċ import Ġde . r ki . cor on aw arn app . exception . No Registration Token Set Exception Ċ import Ġde . r ki . cor on aw arn app . http . Web RequestBuilder Ċ import Ġde . r ki . cor on aw arn app . http . playbook . Background Noise Ċ import Ġde . r ki . cor on aw arn app . storage . Local Data Ċ import Ġde . r ki . cor on aw arn app . transaction . Submit Di agnosis Keys Transaction Ċ import Ġde . r ki . cor on aw arn app . util . formatter . TestResult Ċ import Ġio . mock k . Mock K Annotations Ċ import Ġio . mock k . Runs Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . every Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġio . mock k . just Ċ import Ġio . mock k . mock k Object Ċ import Ġio . mock k . verify Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . hamcrest . Core Matchers . equalTo Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ class ĠSubmission Service Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġguid Ġ= Ġ" 1 2 3 4 5 6 - 1 2 3 4 5 6 7 8 - 1 2 3 4 - 4 DA 7 - B 1 6 6 - B 8 6 D 8 5 4 7 5 0 6 4 " ĊĠĠĠ Ġprivate Ġval Ġregistration Token Ġ= Ġ" as dj n sk j fd ni ue wb he bo qu dn so jd ff " ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġweb RequestBuilder : ĠWeb RequestBuilder ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbackground Noise : ĠBackground Noise ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĠĠĠĠĠĠĠ Ġmock k Object ( Web RequestBuilder . Companion ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠWeb RequestBuilder . getInstance () Ġ} Ġreturns Ġweb RequestBuilder ĊĊĠĠĠĠĠĠĠ Ġmock k Object ( Background Noise . Companion ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠBackground Noise . getInstance () Ġ} Ġreturns Ġbackground Noise ĊĊĠĠĠĠĠĠĠ Ġmock k Object ( Submit Di agnosis Keys Transaction ) ĊĠĠĠĠĠĠĠ Ġmock k Object ( Local Data ) ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . te let an () Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . test GUID () Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . registration Token () Ġ} Ġreturns Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠNo GUID Or T AN Set Exception :: class ) ĊĠĠĠ Ġfun Ġregister Device Without T AN Or GUID Fails () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSubmission Service . async Register Device () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġregistration With GUID Suc ceeds () Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . test GUID () Ġ} Ġreturns Ġguid ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . test GUID ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . registration Token ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . device Pair ing Successful Timestamp ( any ()) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb RequestBuilder . async Get Registration Token ( any (), ĠKey Type . GUID ) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġregistration Token ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġbackground Noise . schedule Dummy Pattern () Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSubmission Service . async Register Device () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Data . registration Token ( registration Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Data . device Pair ing Successful Timestamp ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Data . test GUID ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Noise . schedule Dummy Pattern () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġregistration With Tele T AN Suc ceeds () Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . te let an () Ġ} Ġreturns Ġguid ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . te let an ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . registration Token ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . device Pair ing Successful Timestamp ( any ()) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb RequestBuilder . async Get Registration Token ( any (), ĠKey Type . TE LET AN ) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġregistration Token ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġbackground Noise . schedule Dummy Pattern () Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSubmission Service . async Register Device () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Data . registration Token ( registration Token ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Data . device Pair ing Successful Timestamp ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Data . te let an ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Noise . schedule Dummy Pattern () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠNo Registration Token Set Exception :: class ) ĊĠĠĠ Ġfun Ġrequest TestResult Without Registration Token Fails () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSubmission Service . async Request TestResult () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrequest TestResult Suc ceeds () Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . registration Token () Ġ} Ġreturns Ġregistration Token ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġweb RequestBuilder . async Get TestResult ( registration Token ) Ġ} Ġreturns ĠTest Result . NEGATIVE . value ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( Submission Service . async Request TestResult (), ĠequalTo ( TestResult . NEGATIVE )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠNo Registration Token Set Exception :: class ) ĊĠĠĠ Ġfun Ġsubmit Exposure Keys Without Registration Token Fails () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSubmission Service . async Submit Exposure Keys ( listOf ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsubmit Exposure Keys Suc ceeds () Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . registration Token () Ġ} Ġreturns Ġregistration Token ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ ĠSubmit Di agnosis Keys Transaction . start ( registration Token , Ġany ()) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSubmission Service . async Submit Exposure Keys ( listOf ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdelete Registration Token Suc ceeds () Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . registration Token ( null ) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠLocal Data . device Pair ing Successful Timestamp ( 0 L ) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ ĠSubmission Service . delete Registration Token () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Data . registration Token ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Data . device Pair ing Successful Timestamp ( 0 L ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcontains Valid GUID () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġvalid ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSubmission Service . contains Valid GUID (" https :// bs - sd . de / covid - 1 9 /? $ guid "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠequalTo ( true ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġinvalid ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSubmission Service . contains Valid GUID (" https :// no - guid - here "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠequalTo ( false ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġextract GUID () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSubmission Service . extract GUID (" https :// bs - sd . de / covid - 1 9 /? $ guid "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠequalTo ( guid ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ