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 0bdfeb13edd4bfc6c51bd722fbc0ebd21d0cdaf5..e9ab8acd4b9393d7fadcb47c61347a08d1ea3c2d 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 @@ -83,8 +83,8 @@ class RiskLevelTask @Inject constructor( Timber.d("The current time is %s", it) } - if (submissionSettings.isAllowedToSubmitKeys) { - Timber.i("Positive test result, skip risk calculation") + if (submissionSettings.isAllowedToSubmitKeys && submissionSettings.hasViewedTestResult.value) { + Timber.i("Positive test result and user has seen it, skip risk calculation") return RiskLevelTaskResult( calculatedAt = nowUTC, failureReason = FailureReason.POSITIVE_TEST_RESULT 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 28cf7f0f7f8327649644c8b907bebe7033c87694..aa31b2ba8774a2eac7d20f7a6f51e57ea1d62e42 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 @@ -204,7 +204,7 @@ class RiskLevelTaskTest : BaseTest() { } @Test - fun `risk calculation is skipped if positive test is registered`() = runBlockingTest { + fun `risk calculation is skipped if positive test is registered and viewed`() = runBlockingTest { val cachedKey = mockk<CachedKey>().apply { every { info } returns mockk<CachedKeyInfo>().apply { every { toDateTime() } returns DateTime.parse("2020-12-28").minusDays(1) @@ -216,6 +216,7 @@ class RiskLevelTaskTest : BaseTest() { every { backgroundModeStatus.isAutoModeEnabled } returns flowOf(false) every { timeStamper.nowUTC } returns now every { submissionSettings.isAllowedToSubmitKeys } returns true + every { submissionSettings.hasViewedTestResult.value } returns true createTask().run(arguments) shouldBe RiskLevelTaskResult( calculatedAt = now, @@ -223,6 +224,35 @@ class RiskLevelTaskTest : BaseTest() { ) } + @Test + fun `risk calculation is not skipped if positive test is registered and not viewed`() = runBlockingTest { + val cachedKey = mockk<CachedKey>().apply { + every { info } returns mockk<CachedKeyInfo>().apply { + every { toDateTime() } returns DateTime.parse("2020-12-28").minusDays(1) + } + } + val now = Instant.parse("2020-12-28") + val aggregatedRiskResult = mockk<AggregatedRiskResult>().apply { + every { isIncreasedRisk() } returns true + } + + coEvery { keyCacheRepository.getAllCachedKeys() } returns listOf(cachedKey) + coEvery { enfClient.exposureWindows() } returns listOf() + every { riskLevels.calculateRisk(any(), any()) } returns null + every { riskLevels.aggregateResults(any(), any()) } returns aggregatedRiskResult + every { timeStamper.nowUTC } returns now + coEvery { analyticsExposureWindowCollector.reportRiskResultsPerWindow(any()) } just Runs + every { submissionSettings.isAllowedToSubmitKeys } returns true + every { submissionSettings.hasViewedTestResult.value } returns false + + createTask().run(arguments) shouldBe RiskLevelTaskResult( + calculatedAt = now, + failureReason = null, + aggregatedRiskResult = aggregatedRiskResult, + listOf() + ) + } + @Test fun `risk calculation returns aggregated risk result`() = runBlockingTest { val cachedKey = mockk<CachedKey>().apply {