From 10d2e0c36f75b19227231fbd7ef3bb37764663cf Mon Sep 17 00:00:00 2001
From: Kolya Opahle <k.opahle@sap.com>
Date: Tue, 27 Apr 2021 18:12:10 +0200
Subject: [PATCH] RAT Test result outdated after ~24h (EXPOSUREAPP-6717)
 (#2970)

* Changed hoursToDeemOutdated in CoronaTestConfig to be mapped to a duration object so that calling plus on it and a instant in RACoronaTest will actually add 48 hours to the instant and not 48 millis

* Fixed unittests to supply Durations instead of Longs
---
 .../rki/coronawarnapp/appconfig/CoronaTestConfig.kt   |  3 ++-
 .../appconfig/mapping/CoronaTestConfigMapper.kt       |  5 ++++-
 .../mapping/CoronaTestParametersDistinctTest.kt       | 11 +++++++----
 .../RapidAntigenCoronaTestExtensionsTest.kt           |  4 +++-
 4 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/CoronaTestConfig.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/CoronaTestConfig.kt
index 54c0ff932..103a51ca4 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/CoronaTestConfig.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/CoronaTestConfig.kt
@@ -1,6 +1,7 @@
 package de.rki.coronawarnapp.appconfig
 
 import de.rki.coronawarnapp.appconfig.mapping.ConfigMapper
+import org.joda.time.Duration
 
 interface CoronaTestConfig {
     val coronaRapidAntigenTestParameters: CoronaRapidAntigenTestParametersContainer
@@ -9,7 +10,7 @@ interface CoronaTestConfig {
 }
 
 data class CoronaRapidAntigenTestParametersContainer(
-    val hoursToDeemTestOutdated: Long = DEFAULT_HOURS
+    val hoursToDeemTestOutdated: Duration = Duration.standardHours(DEFAULT_HOURS)
 ) {
     companion object {
         const val DEFAULT_HOURS: Long = 48
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestConfigMapper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestConfigMapper.kt
index d7025379b..5d07b483d 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestConfigMapper.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestConfigMapper.kt
@@ -5,6 +5,7 @@ import de.rki.coronawarnapp.appconfig.CoronaRapidAntigenTestParametersContainer
 import de.rki.coronawarnapp.appconfig.CoronaTestConfig
 import de.rki.coronawarnapp.appconfig.CoronaTestConfigContainer
 import de.rki.coronawarnapp.server.protocols.internal.v2.AppConfigAndroid.ApplicationConfigurationAndroid
+import org.joda.time.Duration
 import timber.log.Timber
 import javax.inject.Inject
 
@@ -25,7 +26,9 @@ class CoronaTestConfigMapper @Inject constructor() : CoronaTestConfig.Mapper {
     private fun ApplicationConfigurationAndroid.mapCoronaTestParameters(): CoronaTestConfig {
         val coronaRapidAntigenTestParameters = if (coronaTestParameters.hasCoronaRapidAntigenTestParameters()) {
             CoronaRapidAntigenTestParametersContainer(
-                coronaTestParameters.coronaRapidAntigenTestParameters.hoursToDeemTestOutdated.toLong()
+                Duration.standardHours(
+                    coronaTestParameters.coronaRapidAntigenTestParameters.hoursToDeemTestOutdated.toLong()
+                )
             )
         } else {
             Timber.d("coronaRapidAntigenTestParameters is missing")
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestParametersDistinctTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestParametersDistinctTest.kt
index 1f71e9b78..772016b4b 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestParametersDistinctTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/mapping/CoronaTestParametersDistinctTest.kt
@@ -7,19 +7,22 @@ import kotlinx.coroutines.flow.drop
 import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.flow.flow
 import kotlinx.coroutines.test.runBlockingTest
+import org.joda.time.Duration
 import org.junit.Test
 import testhelpers.BaseTest
 
 class CoronaTestParametersDistinctTest : BaseTest() {
+    private val durationOf48H: Duration = Duration.standardHours(48)
+    private val durationOf12H: Duration = Duration.standardHours(12)
 
     @Test
     fun `can we use distinctUntilChanged on CoronaTestParameters`() = runBlockingTest {
         val flow = flow {
-            emit(CoronaRapidAntigenTestParametersContainer(48))
-            emit(CoronaRapidAntigenTestParametersContainer(48))
-            emit(CoronaRapidAntigenTestParametersContainer(12))
+            emit(CoronaRapidAntigenTestParametersContainer(durationOf48H))
+            emit(CoronaRapidAntigenTestParametersContainer(Duration.standardHours(48)))
+            emit(CoronaRapidAntigenTestParametersContainer(durationOf12H))
         }
 
-        flow.distinctUntilChanged().drop(1).first().hoursToDeemTestOutdated shouldBe 12
+        flow.distinctUntilChanged().drop(1).first().hoursToDeemTestOutdated shouldBe durationOf12H
     }
 }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenCoronaTestExtensionsTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenCoronaTestExtensionsTest.kt
index 3998d7334..9588466ba 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenCoronaTestExtensionsTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RapidAntigenCoronaTestExtensionsTest.kt
@@ -8,6 +8,7 @@ import io.mockk.MockKAnnotations
 import io.mockk.every
 import io.mockk.impl.annotations.MockK
 import kotlinx.coroutines.test.runBlockingTest
+import org.joda.time.Duration
 import org.joda.time.Instant
 import org.junit.jupiter.api.BeforeEach
 import org.junit.jupiter.api.Test
@@ -22,7 +23,8 @@ class RapidAntigenCoronaTestExtensionsTest : BaseTest() {
         MockKAnnotations.init(this)
 
         every { timeStamper.nowUTC } returns Instant.ofEpochMilli(1010010101)
-        every { coronaTestConfig.coronaRapidAntigenTestParameters.hoursToDeemTestOutdated } returns 48
+        every { coronaTestConfig.coronaRapidAntigenTestParameters.hoursToDeemTestOutdated } returns
+            Duration.standardHours(48)
     }
 
     @Test
-- 
GitLab