From d2bf081f1c5c5b7044507f894e0816870d73b0a8 Mon Sep 17 00:00:00 2001
From: Matthias Urhahn <matthias.urhahn@sap.com>
Date: Fri, 30 Apr 2021 15:35:16 +0200
Subject: [PATCH] Fix auto-checkouts being processed before EW risk
 calculation, they should be processed before PT risk calculation. (#3006)

Co-authored-by: Lukas Lechner <lukas.lechner@sap.com>
Co-authored-by: Mohamed <mohamed.metwalli@sap.com>
---
 .../risk/execution/PresenceTracingWarningTask.kt         | 8 ++++++++
 .../main/java/de/rki/coronawarnapp/risk/RiskLevelTask.kt | 8 --------
 .../risk/execution/PresenceTracingWarningTaskTest.kt     | 9 +++++++++
 .../java/de/rki/coronawarnapp/risk/RiskLevelTaskTest.kt  | 6 ------
 4 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/presencetracing/risk/execution/PresenceTracingWarningTask.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/presencetracing/risk/execution/PresenceTracingWarningTask.kt
index b8b64db0f..ea7b2eece 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/presencetracing/risk/execution/PresenceTracingWarningTask.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/presencetracing/risk/execution/PresenceTracingWarningTask.kt
@@ -6,6 +6,7 @@ import de.rki.coronawarnapp.coronatest.CoronaTestRepository
 import de.rki.coronawarnapp.exception.ExceptionCategory
 import de.rki.coronawarnapp.exception.reporting.report
 import de.rki.coronawarnapp.presencetracing.checkins.CheckInRepository
+import de.rki.coronawarnapp.presencetracing.checkins.checkout.auto.AutoCheckOut
 import de.rki.coronawarnapp.presencetracing.risk.calculation.CheckInWarningMatcher
 import de.rki.coronawarnapp.presencetracing.risk.calculation.PresenceTracingRiskMapper
 import de.rki.coronawarnapp.presencetracing.risk.storage.PresenceTracingRiskRepository
@@ -34,6 +35,7 @@ class PresenceTracingWarningTask @Inject constructor(
     private val checkInsRepository: CheckInRepository,
     private val presenceTracingRiskMapper: PresenceTracingRiskMapper,
     private val coronaTestRepository: CoronaTestRepository,
+    private val autoCheckOut: AutoCheckOut,
 ) : Task<PresenceTracingWarningTaskProgress, PresenceTracingWarningTask.Result> {
 
     private val internalProgress = ConflatedBroadcastChannel<PresenceTracingWarningTaskProgress>()
@@ -44,6 +46,12 @@ class PresenceTracingWarningTask @Inject constructor(
     override suspend fun run(arguments: Task.Arguments): Result = try {
         Timber.d("Running with arguments=%s", arguments)
 
+        autoCheckOut.apply {
+            Timber.tag(TAG).d("Processing overdue check-outs before risk calculation.")
+            processOverDueCheckouts()
+            refreshAlarm()
+        }
+
         try {
             doWork()
         } catch (e: Exception) {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelTask.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelTask.kt
index d81f7eff2..eaf28fd1f 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelTask.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevelTask.kt
@@ -13,7 +13,6 @@ import de.rki.coronawarnapp.exception.reporting.report
 import de.rki.coronawarnapp.nearby.ENFClient
 import de.rki.coronawarnapp.nearby.modules.detectiontracker.ExposureDetectionTracker
 import de.rki.coronawarnapp.nearby.modules.detectiontracker.TrackedExposureDetection
-import de.rki.coronawarnapp.presencetracing.checkins.checkout.auto.AutoCheckOut
 import de.rki.coronawarnapp.risk.EwRiskLevelResult.FailureReason
 import de.rki.coronawarnapp.risk.result.EwAggregatedRiskResult
 import de.rki.coronawarnapp.risk.storage.RiskLevelStorage
@@ -48,7 +47,6 @@ class RiskLevelTask @Inject constructor(
     private val keyCacheRepository: KeyCacheRepository,
     private val coronaTestRepository: CoronaTestRepository,
     private val analyticsExposureWindowCollector: AnalyticsExposureWindowCollector,
-    private val autoCheckOut: AutoCheckOut,
 ) : Task<DefaultProgress, EwRiskLevelTaskResult> {
 
     private val internalProgress = ConflatedBroadcastChannel<DefaultProgress>()
@@ -59,12 +57,6 @@ class RiskLevelTask @Inject constructor(
     override suspend fun run(arguments: Task.Arguments): EwRiskLevelTaskResult = try {
         Timber.d("Running with arguments=%s", arguments)
 
-        autoCheckOut.apply {
-            Timber.tag(TAG).d("Processing overdue check-outs before risk calculation.")
-            processOverDueCheckouts()
-            refreshAlarm()
-        }
-
         val configData: ConfigData = appConfigProvider.getAppConfig()
 
         determineRiskLevelResult(configData).also {
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/presencetracing/risk/execution/PresenceTracingWarningTaskTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/presencetracing/risk/execution/PresenceTracingWarningTaskTest.kt
index 79a5518b6..98d7ace51 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/presencetracing/risk/execution/PresenceTracingWarningTaskTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/presencetracing/risk/execution/PresenceTracingWarningTaskTest.kt
@@ -3,6 +3,7 @@ package de.rki.coronawarnapp.presencetracing.risk.execution
 import de.rki.coronawarnapp.coronatest.CoronaTestRepository
 import de.rki.coronawarnapp.coronatest.type.CoronaTest
 import de.rki.coronawarnapp.presencetracing.checkins.CheckInRepository
+import de.rki.coronawarnapp.presencetracing.checkins.checkout.auto.AutoCheckOut
 import de.rki.coronawarnapp.presencetracing.risk.calculation.CheckInWarningMatcher
 import de.rki.coronawarnapp.presencetracing.risk.calculation.PresenceTracingRiskMapper
 import de.rki.coronawarnapp.presencetracing.risk.calculation.createCheckIn
@@ -45,6 +46,7 @@ class PresenceTracingWarningTaskTest : BaseTest() {
     @MockK lateinit var traceWarningRepository: TraceWarningRepository
     @MockK lateinit var checkInsRepository: CheckInRepository
     @MockK lateinit var presenceTracingRiskMapper: PresenceTracingRiskMapper
+    @MockK lateinit var autoCheckOut: AutoCheckOut
     @MockK lateinit var coronaTestRepository: CoronaTestRepository
 
     private val coronaTests: MutableStateFlow<Set<CoronaTest>> = MutableStateFlow(
@@ -87,6 +89,9 @@ class PresenceTracingWarningTaskTest : BaseTest() {
         }
 
         coEvery { presenceTracingRiskMapper.clearConfig() } just Runs
+
+        coEvery { autoCheckOut.processOverDueCheckouts() } returns emptyList()
+        coEvery { autoCheckOut.refreshAlarm() } returns true
     }
 
     private fun createInstance() = PresenceTracingWarningTask(
@@ -98,6 +103,7 @@ class PresenceTracingWarningTaskTest : BaseTest() {
         checkInsRepository = checkInsRepository,
         presenceTracingRiskMapper = presenceTracingRiskMapper,
         coronaTestRepository = coronaTestRepository,
+        autoCheckOut = autoCheckOut,
     )
 
     @Test
@@ -105,6 +111,9 @@ class PresenceTracingWarningTaskTest : BaseTest() {
         createInstance().run(mockk()) shouldNotBe null
 
         coVerifySequence {
+            autoCheckOut.processOverDueCheckouts()
+            autoCheckOut.refreshAlarm()
+
             syncTool.syncPackages()
             presenceTracingRiskRepository.deleteStaleData()
             checkInsRepository.checkInsWithinRetention
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelTaskTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelTaskTest.kt
index 77e65bd86..b9f84a180 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelTaskTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelTaskTest.kt
@@ -13,7 +13,6 @@ import de.rki.coronawarnapp.diagnosiskeys.storage.CachedKey
 import de.rki.coronawarnapp.diagnosiskeys.storage.CachedKeyInfo
 import de.rki.coronawarnapp.diagnosiskeys.storage.KeyCacheRepository
 import de.rki.coronawarnapp.nearby.ENFClient
-import de.rki.coronawarnapp.presencetracing.checkins.checkout.auto.AutoCheckOut
 import de.rki.coronawarnapp.risk.result.EwAggregatedRiskResult
 import de.rki.coronawarnapp.risk.storage.RiskLevelStorage
 import de.rki.coronawarnapp.task.Task
@@ -54,7 +53,6 @@ class RiskLevelTaskTest : BaseTest() {
     @MockK lateinit var keyCacheRepository: KeyCacheRepository
     @MockK lateinit var coronaTestRepository: CoronaTestRepository
     @MockK lateinit var analyticsExposureWindowCollector: AnalyticsExposureWindowCollector
-    @MockK lateinit var autoCheckOut: AutoCheckOut
 
     private val arguments: Task.Arguments = object : Task.Arguments {}
 
@@ -95,9 +93,6 @@ class RiskLevelTaskTest : BaseTest() {
         coEvery { keyCacheRepository.getAllCachedKeys() } returns emptyList()
 
         coEvery { riskLevelStorage.storeResult(any()) } just Runs
-
-        coEvery { autoCheckOut.processOverDueCheckouts() } returns emptyList()
-        coEvery { autoCheckOut.refreshAlarm() } returns true
     }
 
     private fun createTask() = RiskLevelTask(
@@ -112,7 +107,6 @@ class RiskLevelTaskTest : BaseTest() {
         keyCacheRepository = keyCacheRepository,
         coronaTestRepository = coronaTestRepository,
         analyticsExposureWindowCollector = analyticsExposureWindowCollector,
-        autoCheckOut = autoCheckOut
     )
 
     @Test
-- 
GitLab