From 3cc1ca6143c4406086cef59e62122de3c155e420 Mon Sep 17 00:00:00 2001
From: Matthias Urhahn <matthias.urhahn@sap.com>
Date: Tue, 27 Apr 2021 12:30:47 +0200
Subject: [PATCH] We don't show test result available notification for TAN
 based test registrations. (#2968)

---
 .../coronatest/type/pcr/PCRProcessor.kt       |  4 +-
 .../coronatest/type/pcr/PCRProcessorTest.kt   | 37 +++++++++++++++++++
 2 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessor.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessor.kt
index 88cd240a6..815401d6e 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessor.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessor.kt
@@ -61,7 +61,9 @@ class PCRProcessor @Inject constructor(
 
         analyticsKeySubmissionCollector.reportRegisteredWithTeleTAN()
 
-        return createCoronaTest(request, registrationData)
+        return createCoronaTest(request, registrationData).copy(
+            isResultAvailableNotificationSent = true
+        )
     }
 
     private suspend fun createCoronaTest(
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt
index 4692cc48a..2028ef505 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt
@@ -1,6 +1,8 @@
 package de.rki.coronawarnapp.coronatest.type.pcr
 
+import de.rki.coronawarnapp.coronatest.qrcode.CoronaTestQRCode
 import de.rki.coronawarnapp.coronatest.server.CoronaTestResult
+import de.rki.coronawarnapp.coronatest.tan.CoronaTestTAN
 import de.rki.coronawarnapp.coronatest.type.CoronaTestService
 import de.rki.coronawarnapp.datadonation.analytics.modules.keysubmission.AnalyticsKeySubmissionCollector
 import de.rki.coronawarnapp.datadonation.analytics.modules.registeredtest.TestResultDataCollector
@@ -29,6 +31,15 @@ class PCRProcessorTest : BaseTest() {
 
     private val nowUTC = Instant.parse("2021-03-15T05:45:00.000Z")
 
+    private var testQRRegistrationData = CoronaTestService.RegistrationData(
+        registrationToken = "qr-regtoken",
+        testResult = CoronaTestResult.PCR_POSITIVE,
+    )
+    private var testTANRegistrationData = CoronaTestService.RegistrationData(
+        registrationToken = "tan-regtoken",
+        testResult = CoronaTestResult.PCR_POSITIVE,
+    )
+
     @BeforeEach
     fun setup() {
         MockKAnnotations.init(this)
@@ -37,10 +48,22 @@ class PCRProcessorTest : BaseTest() {
 
         submissionService.apply {
             coEvery { asyncRequestTestResult(any()) } answers { CoronaTestResult.PCR_OR_RAT_PENDING }
+            coEvery { asyncRegisterDeviceViaTAN(any()) } answers { testTANRegistrationData }
+            coEvery { asyncRegisterDeviceViaGUID(any()) } answers { testQRRegistrationData }
         }
 
+        analyticsKeySubmissionCollector.apply {
+            coEvery { reportRegisteredWithTeleTAN() } just Runs
+            coEvery { reset() } just Runs
+            coEvery { reportPositiveTestResultReceived() } just Runs
+            coEvery { reportTestRegistered() } just Runs
+        }
         testResultDataCollector.apply {
             coEvery { updatePendingTestResultReceivedTime(any()) } just Runs
+            coEvery { saveTestResultAnalyticsSettings(any()) } just Runs
+        }
+        deadmanNotificationScheduler.apply {
+            every { cancelScheduledWork() } just Runs
         }
     }
 
@@ -72,4 +95,18 @@ class PCRProcessorTest : BaseTest() {
 
         instance.pollServer(past60DaysTest).testResult shouldBe CoronaTestResult.PCR_REDEEMED
     }
+
+    // TANs are automatically positive, there is no test result available screen that should be reached
+    @Test
+    fun `registering a TAN test automatically consumes the notification flag`() = runBlockingTest {
+        val instance = createInstance()
+
+        instance.create(CoronaTestTAN.PCR(tan = "thisIsATan")).apply {
+            isResultAvailableNotificationSent shouldBe true
+        }
+
+        instance.create(CoronaTestQRCode.PCR(qrCodeGUID = "thisIsAQRCodeGUID")).apply {
+            isResultAvailableNotificationSent shouldBe false
+        }
+    }
 }
-- 
GitLab