From 322500c1fa91fd9ea2def115032792560fa7c9ac Mon Sep 17 00:00:00 2001
From: Matthias Urhahn <matthias.urhahn@sap.com>
Date: Fri, 20 Nov 2020 14:07:20 +0100
Subject: [PATCH] Resolve ENFv2 PR comments (#1681)

* Unarm the quota check for now.

* Make key provider unit tests more specific.

* Add time unit to parameter name.
---
 .../DefaultDiagnosisKeyProvider.kt            |  5 +--
 .../DefaultDiagnosisKeyProviderTest.kt        | 31 +++++++++----------
 .../windows/ExposureWindowsCalculationTest.kt |  8 ++---
 .../nearby/windows/entities/cases/TestCase.kt |  4 +--
 4 files changed, 23 insertions(+), 25 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProvider.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProvider.kt
index 5d4ce8b4f..64f2e75d7 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProvider.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProvider.kt
@@ -30,8 +30,9 @@ class DefaultDiagnosisKeyProvider @Inject constructor(
         enfVersion.requireMinimumVersion(ENFVersion.V1_6)
 
         if (!submissionQuota.consumeQuota(1)) {
-            Timber.w("No key files submitted because not enough quota available.")
-            return false
+            Timber.e("No key files submitted because not enough quota available.")
+            // Needs discussion until armed, concerns: Hiding other underlying issues.
+//            return false
         }
 
         return suspendCoroutine { cont ->
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProviderTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProviderTest.kt
index a8fdf3444..da15e5721 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProviderTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProviderTest.kt
@@ -4,10 +4,12 @@ import com.google.android.gms.nearby.exposurenotification.ExposureNotificationCl
 import de.rki.coronawarnapp.nearby.modules.version.ENFVersion
 import de.rki.coronawarnapp.nearby.modules.version.OutdatedENFVersionException
 import io.kotest.matchers.shouldBe
+import io.mockk.Called
 import io.mockk.MockKAnnotations
 import io.mockk.clearAllMocks
 import io.mockk.coEvery
 import io.mockk.coVerify
+import io.mockk.coVerifySequence
 import io.mockk.impl.annotations.MockK
 import kotlinx.coroutines.runBlocking
 import kotlinx.coroutines.test.runBlockingTest
@@ -61,11 +63,9 @@ class DefaultDiagnosisKeyProviderTest : BaseTest() {
             runBlockingTest { provider.provideDiagnosisKeys(exampleKeyFiles) } shouldBe false
         }
 
-        coVerify(exactly = 0) {
-            googleENFClient.provideDiagnosisKeys(exampleKeyFiles)
-            googleENFClient.provideDiagnosisKeys(listOf(exampleKeyFiles[0]))
-            googleENFClient.provideDiagnosisKeys(listOf(exampleKeyFiles[1]))
-            submissionQuota.consumeQuota(2)
+        coVerify {
+            googleENFClient wasNot Called
+            submissionQuota wasNot Called
         }
     }
 
@@ -75,27 +75,24 @@ class DefaultDiagnosisKeyProviderTest : BaseTest() {
 
         runBlocking { provider.provideDiagnosisKeys(exampleKeyFiles) } shouldBe true
 
-        coVerify(exactly = 1) {
-            googleENFClient.provideDiagnosisKeys(any<List<File>>())
-            googleENFClient.provideDiagnosisKeys(exampleKeyFiles)
+        coVerifySequence {
             submissionQuota.consumeQuota(1)
+            googleENFClient.provideDiagnosisKeys(exampleKeyFiles)
         }
     }
 
     @Test
-    fun `provide diagnosis key when quota is empty`() {
+    fun `quota is just monitored`() {
         coEvery { submissionQuota.consumeQuota(any()) } returns false
 
         val provider = createProvider()
 
-        runBlocking { provider.provideDiagnosisKeys(exampleKeyFiles) } shouldBe false
+        runBlocking { provider.provideDiagnosisKeys(exampleKeyFiles) } shouldBe true
 
-        coVerify(exactly = 0) {
-            googleENFClient.provideDiagnosisKeys(any<List<File>>())
+        coVerifySequence {
+            submissionQuota.consumeQuota(1)
             googleENFClient.provideDiagnosisKeys(exampleKeyFiles)
         }
-
-        coVerify(exactly = 1) { submissionQuota.consumeQuota(1) }
     }
 
     @Test
@@ -104,9 +101,9 @@ class DefaultDiagnosisKeyProviderTest : BaseTest() {
 
         runBlocking { provider.provideDiagnosisKeys(emptyList()) } shouldBe true
 
-        coVerify(exactly = 0) {
-            googleENFClient.provideDiagnosisKeys(any<List<File>>())
-            googleENFClient.provideDiagnosisKeys(emptyList())
+        coVerify {
+            googleENFClient wasNot Called
+            submissionQuota wasNot Called
         }
     }
 }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/ExposureWindowsCalculationTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/ExposureWindowsCalculationTest.kt
index 4af8bfe87..c38efd853 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/ExposureWindowsCalculationTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/ExposureWindowsCalculationTest.kt
@@ -135,8 +135,8 @@ class ExposureWindowsCalculationTest : BaseTest() {
 
             // 6 - Check with expected result from test case
             aggregatedRiskResult.totalRiskLevel.number shouldBe case.expTotalRiskLevel
-            aggregatedRiskResult.mostRecentDateWithHighRisk shouldBe getTestCaseDate(case.expAgeOfMostRecentDateWithHighRisk)
-            aggregatedRiskResult.mostRecentDateWithLowRisk shouldBe getTestCaseDate(case.expAgeOfMostRecentDateWithLowRisk)
+            aggregatedRiskResult.mostRecentDateWithHighRisk shouldBe getTestCaseDate(case.expAgeOfMostRecentDateWithHighRiskInDays)
+            aggregatedRiskResult.mostRecentDateWithLowRisk shouldBe getTestCaseDate(case.expAgeOfMostRecentDateWithLowRiskInDays)
             aggregatedRiskResult.totalMinimumDistinctEncountersWithHighRisk shouldBe case.expTotalMinimumDistinctEncountersWithHighRisk
             aggregatedRiskResult.totalMinimumDistinctEncountersWithLowRisk shouldBe case.expTotalMinimumDistinctEncountersWithLowRisk
         }
@@ -164,14 +164,14 @@ class ExposureWindowsCalculationTest : BaseTest() {
             addPropertyCheckToComparisonDebugTable(
                 "Date With High Risk",
                 aggregated.mostRecentDateWithHighRisk,
-                getTestCaseDate(case.expAgeOfMostRecentDateWithHighRisk)
+                getTestCaseDate(case.expAgeOfMostRecentDateWithHighRiskInDays)
             )
         )
         result.append(
             addPropertyCheckToComparisonDebugTable(
                 "Date With Low Risk",
                 aggregated.mostRecentDateWithLowRisk,
-                getTestCaseDate(case.expAgeOfMostRecentDateWithLowRisk)
+                getTestCaseDate(case.expAgeOfMostRecentDateWithLowRiskInDays)
             )
         )
         result.append(
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/entities/cases/TestCase.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/entities/cases/TestCase.kt
index 1ee966b35..0d28ea6d7 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/entities/cases/TestCase.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/entities/cases/TestCase.kt
@@ -6,9 +6,9 @@ data class TestCase(
     @SerializedName("description")
     val description: String,
     @SerializedName("expAgeOfMostRecentDateWithHighRisk")
-    val expAgeOfMostRecentDateWithHighRisk: Long?,
+    val expAgeOfMostRecentDateWithHighRiskInDays: Long?,
     @SerializedName("expAgeOfMostRecentDateWithLowRisk")
-    val expAgeOfMostRecentDateWithLowRisk: Long?,
+    val expAgeOfMostRecentDateWithLowRiskInDays: Long?,
     @SerializedName("expTotalMinimumDistinctEncountersWithHighRisk")
     val expTotalMinimumDistinctEncountersWithHighRisk: Int,
     @SerializedName("expTotalMinimumDistinctEncountersWithLowRisk")
-- 
GitLab