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