Skip to content
Snippets Groups Projects
Unverified Commit 37c1fbcc authored by Chilja Gossow's avatar Chilja Gossow Committed by GitHub
Browse files

Fix missing line in red warning card (EXPOSUREAPP-6775) (#2976)


* provide data

* fix test

* klint

* make sure only last 14 days are counted

* fix test

Co-authored-by: default avatarharambasicluka <64483219+harambasicluka@users.noreply.github.com>
parent 93156bde
No related branches found
No related tags found
No related merge requests found
Showing
with 90 additions and 62 deletions
...@@ -5,6 +5,7 @@ import de.rki.coronawarnapp.risk.EwRiskLevelResult ...@@ -5,6 +5,7 @@ import de.rki.coronawarnapp.risk.EwRiskLevelResult
import de.rki.coronawarnapp.risk.storage.internal.RiskCombinator import de.rki.coronawarnapp.risk.storage.internal.RiskCombinator
import de.rki.coronawarnapp.risk.storage.internal.RiskResultDatabase import de.rki.coronawarnapp.risk.storage.internal.RiskResultDatabase
import de.rki.coronawarnapp.util.coroutine.AppScope import de.rki.coronawarnapp.util.coroutine.AppScope
import de.rki.coronawarnapp.util.TimeStamper
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
...@@ -16,11 +17,13 @@ class DefaultRiskLevelStorage @Inject constructor( ...@@ -16,11 +17,13 @@ class DefaultRiskLevelStorage @Inject constructor(
presenceTracingRiskRepository: PresenceTracingRiskRepository, presenceTracingRiskRepository: PresenceTracingRiskRepository,
@AppScope scope: CoroutineScope, @AppScope scope: CoroutineScope,
riskCombinator: RiskCombinator, riskCombinator: RiskCombinator,
timeStamper: TimeStamper,
) : BaseRiskLevelStorage( ) : BaseRiskLevelStorage(
riskResultDatabaseFactory, riskResultDatabaseFactory,
presenceTracingRiskRepository, presenceTracingRiskRepository,
scope, scope,
riskCombinator riskCombinator,
timeStamper,
) { ) {
// 2 days, 6 times per day, data is considered stale after 48 hours with risk calculation // 2 days, 6 times per day, data is considered stale after 48 hours with risk calculation
......
...@@ -7,6 +7,7 @@ import de.rki.coronawarnapp.risk.storage.internal.RiskResultDatabase ...@@ -7,6 +7,7 @@ import de.rki.coronawarnapp.risk.storage.internal.RiskResultDatabase
import de.rki.coronawarnapp.risk.storage.internal.windows.PersistedExposureWindowDao.PersistedScanInstance import de.rki.coronawarnapp.risk.storage.internal.windows.PersistedExposureWindowDao.PersistedScanInstance
import de.rki.coronawarnapp.risk.storage.internal.windows.toPersistedExposureWindow import de.rki.coronawarnapp.risk.storage.internal.windows.toPersistedExposureWindow
import de.rki.coronawarnapp.risk.storage.internal.windows.toPersistedScanInstances import de.rki.coronawarnapp.risk.storage.internal.windows.toPersistedScanInstances
import de.rki.coronawarnapp.util.TimeStamper
import de.rki.coronawarnapp.util.coroutine.AppScope import de.rki.coronawarnapp.util.coroutine.AppScope
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.firstOrNull
...@@ -20,11 +21,13 @@ class DefaultRiskLevelStorage @Inject constructor( ...@@ -20,11 +21,13 @@ class DefaultRiskLevelStorage @Inject constructor(
presenceTracingRiskRepository: PresenceTracingRiskRepository, presenceTracingRiskRepository: PresenceTracingRiskRepository,
@AppScope val scope: CoroutineScope, @AppScope val scope: CoroutineScope,
riskCombinator: RiskCombinator, riskCombinator: RiskCombinator,
timeStamper: TimeStamper,
) : BaseRiskLevelStorage( ) : BaseRiskLevelStorage(
riskResultDatabaseFactory, riskResultDatabaseFactory,
presenceTracingRiskRepository, presenceTracingRiskRepository,
scope, scope,
riskCombinator, riskCombinator,
timeStamper,
) { ) {
// 14 days, 6 times per day // 14 days, 6 times per day
......
package de.rki.coronawarnapp.risk package de.rki.coronawarnapp.risk
import androidx.annotation.VisibleForTesting
import de.rki.coronawarnapp.presencetracing.risk.PtRiskLevelResult import de.rki.coronawarnapp.presencetracing.risk.PtRiskLevelResult
import de.rki.coronawarnapp.risk.result.ExposureWindowDayRisk
import de.rki.coronawarnapp.risk.storage.internal.RiskCombinator import de.rki.coronawarnapp.risk.storage.internal.RiskCombinator
import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalDateUtc import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalDateUtc
import org.joda.time.Instant import org.joda.time.Instant
...@@ -13,7 +15,8 @@ data class CombinedEwPtDayRisk( ...@@ -13,7 +15,8 @@ data class CombinedEwPtDayRisk(
data class CombinedEwPtRiskLevelResult( data class CombinedEwPtRiskLevelResult(
private val ptRiskLevelResult: PtRiskLevelResult, private val ptRiskLevelResult: PtRiskLevelResult,
private val ewRiskLevelResult: EwRiskLevelResult private val ewRiskLevelResult: EwRiskLevelResult,
private val exposureWindowDayRisks: List<ExposureWindowDayRisk>? = null
) { ) {
val riskState: RiskState by lazy { val riskState: RiskState by lazy {
...@@ -31,12 +34,12 @@ data class CombinedEwPtRiskLevelResult( ...@@ -31,12 +34,12 @@ data class CombinedEwPtRiskLevelResult(
val daysWithEncounters: Int by lazy { val daysWithEncounters: Int by lazy {
when (riskState) { when (riskState) {
RiskState.INCREASED_RISK -> { RiskState.INCREASED_RISK -> {
ewRiskLevelResult.daysWithHighRisk ewDaysWithHighRisk
.plus(ptRiskLevelResult.daysWithHighRisk) .plus(ptRiskLevelResult.daysWithHighRisk)
.distinct().count() .distinct().count()
} }
RiskState.LOW_RISK -> { RiskState.LOW_RISK -> {
ewRiskLevelResult.daysWithLowRisk ewDaysWithLowRisk
.plus(ptRiskLevelResult.daysWithLowRisk) .plus(ptRiskLevelResult.daysWithLowRisk)
.distinct().count() .distinct().count()
} }
...@@ -66,6 +69,18 @@ data class CombinedEwPtRiskLevelResult( ...@@ -66,6 +69,18 @@ data class CombinedEwPtRiskLevelResult(
val matchedRiskCount: Int by lazy { val matchedRiskCount: Int by lazy {
ewRiskLevelResult.matchedKeyCount + ptRiskLevelResult.checkInOverlapCount ewRiskLevelResult.matchedKeyCount + ptRiskLevelResult.checkInOverlapCount
} }
@VisibleForTesting
internal val ewDaysWithHighRisk: List<LocalDate>
get() = exposureWindowDayRisks?.filter {
it.riskLevel.mapToRiskState() == RiskState.INCREASED_RISK
}?.map { it.localDateUtc } ?: emptyList()
@VisibleForTesting
internal val ewDaysWithLowRisk: List<LocalDate>
get() = exposureWindowDayRisks?.filter {
it.riskLevel.mapToRiskState() == RiskState.LOW_RISK
}?.map { it.localDateUtc } ?: emptyList()
} }
data class LastCombinedRiskResults( data class LastCombinedRiskResults(
......
...@@ -3,7 +3,6 @@ package de.rki.coronawarnapp.risk ...@@ -3,7 +3,6 @@ package de.rki.coronawarnapp.risk
import com.google.android.gms.nearby.exposurenotification.ExposureWindow import com.google.android.gms.nearby.exposurenotification.ExposureWindow
import de.rki.coronawarnapp.risk.result.EwAggregatedRiskResult import de.rki.coronawarnapp.risk.result.EwAggregatedRiskResult
import org.joda.time.Instant import org.joda.time.Instant
import org.joda.time.LocalDate
interface EwRiskLevelResult { interface EwRiskLevelResult {
val calculatedAt: Instant val calculatedAt: Instant
...@@ -43,16 +42,6 @@ interface EwRiskLevelResult { ...@@ -43,16 +42,6 @@ interface EwRiskLevelResult {
ewAggregatedRiskResult?.mostRecentDateWithLowRisk ewAggregatedRiskResult?.mostRecentDateWithLowRisk
} }
val daysWithHighRisk: List<LocalDate>
get() = ewAggregatedRiskResult?.exposureWindowDayRisks?.filter {
it.riskLevel.mapToRiskState() == RiskState.INCREASED_RISK
}?.map { it.localDateUtc } ?: emptyList()
val daysWithLowRisk: List<LocalDate>
get() = ewAggregatedRiskResult?.exposureWindowDayRisks?.filter {
it.riskLevel.mapToRiskState() == RiskState.LOW_RISK
}?.map { it.localDateUtc } ?: emptyList()
enum class FailureReason(val failureCode: String) { enum class FailureReason(val failureCode: String) {
UNKNOWN("unknown"), UNKNOWN("unknown"),
TRACING_OFF("tracingOff"), TRACING_OFF("tracingOff"),
......
...@@ -16,12 +16,16 @@ import de.rki.coronawarnapp.risk.storage.internal.riskresults.PersistedRiskLevel ...@@ -16,12 +16,16 @@ import de.rki.coronawarnapp.risk.storage.internal.riskresults.PersistedRiskLevel
import de.rki.coronawarnapp.risk.storage.internal.riskresults.toPersistedAggregatedRiskPerDateResult import de.rki.coronawarnapp.risk.storage.internal.riskresults.toPersistedAggregatedRiskPerDateResult
import de.rki.coronawarnapp.risk.storage.internal.riskresults.toPersistedRiskResult import de.rki.coronawarnapp.risk.storage.internal.riskresults.toPersistedRiskResult
import de.rki.coronawarnapp.risk.storage.internal.windows.PersistedExposureWindowDaoWrapper import de.rki.coronawarnapp.risk.storage.internal.windows.PersistedExposureWindowDaoWrapper
import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalDateUtc
import de.rki.coronawarnapp.util.TimeStamper
import de.rki.coronawarnapp.util.flow.shareLatest import de.rki.coronawarnapp.util.flow.shareLatest
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import org.joda.time.Days
import org.joda.time.Instant
import timber.log.Timber import timber.log.Timber
import de.rki.coronawarnapp.util.flow.combine as flowCombine import de.rki.coronawarnapp.util.flow.combine as flowCombine
...@@ -30,6 +34,7 @@ abstract class BaseRiskLevelStorage constructor( ...@@ -30,6 +34,7 @@ abstract class BaseRiskLevelStorage constructor(
private val presenceTracingRiskRepository: PresenceTracingRiskRepository, private val presenceTracingRiskRepository: PresenceTracingRiskRepository,
scope: CoroutineScope, scope: CoroutineScope,
private val riskCombinator: RiskCombinator, private val riskCombinator: RiskCombinator,
private val timeStamper: TimeStamper,
) : RiskLevelStorage { ) : RiskLevelStorage {
private val database by lazy { riskResultDatabaseFactory.create() } private val database by lazy { riskResultDatabaseFactory.create() }
...@@ -37,6 +42,9 @@ abstract class BaseRiskLevelStorage constructor( ...@@ -37,6 +42,9 @@ abstract class BaseRiskLevelStorage constructor(
internal val exposureWindowsTables by lazy { database.exposureWindows() } internal val exposureWindowsTables by lazy { database.exposureWindows() }
internal val aggregatedRiskPerDateResultTables by lazy { database.aggregatedRiskPerDate() } internal val aggregatedRiskPerDateResultTables by lazy { database.aggregatedRiskPerDate() }
private val fifteenDaysAgo: Instant
get() = timeStamper.nowUTC.minus(Days.days(15).toStandardDuration())
abstract val storedResultLimit: Int abstract val storedResultLimit: Int
private suspend fun List<PersistedRiskLevelResultDao>.combineWithWindows( private suspend fun List<PersistedRiskLevelResultDao>.combineWithWindows(
...@@ -131,7 +139,7 @@ abstract class BaseRiskLevelStorage constructor( ...@@ -131,7 +139,7 @@ abstract class BaseRiskLevelStorage constructor(
aggregatedRiskPerDateResultTables.allEntries() aggregatedRiskPerDateResultTables.allEntries()
.map { .map {
it.map { persistedAggregatedRiskPerDateResult -> it.map { persistedAggregatedRiskPerDateResult ->
persistedAggregatedRiskPerDateResult.toAggregatedRiskPerDateResult() persistedAggregatedRiskPerDateResult.toExposureWindowDayRisk()
} }
} }
.shareLatest(tag = TAG, scope = scope) .shareLatest(tag = TAG, scope = scope)
...@@ -187,15 +195,21 @@ abstract class BaseRiskLevelStorage constructor( ...@@ -187,15 +195,21 @@ abstract class BaseRiskLevelStorage constructor(
override val latestAndLastSuccessfulCombinedEwPtRiskLevelResult: Flow<LastCombinedRiskResults> override val latestAndLastSuccessfulCombinedEwPtRiskLevelResult: Flow<LastCombinedRiskResults>
get() = combine( get() = combine(
allEwRiskLevelResults, allEwRiskLevelResults,
presenceTracingRiskRepository.allEntries() presenceTracingRiskRepository.allEntries(),
) { ewRiskLevelResults, ptRiskLevelResults -> ewDayRiskStates
) { ewRiskLevelResults, ptRiskLevelResults, ewDayRiskStates ->
val combinedResults = riskCombinator val combinedResults = riskCombinator
.combineEwPtRiskLevelResults(ptRiskLevelResults, ewRiskLevelResults) .combineEwPtRiskLevelResults(ptRiskLevelResults, ewRiskLevelResults)
.sortedByDescending { it.calculatedAt } .sortedByDescending { it.calculatedAt }
LastCombinedRiskResults( LastCombinedRiskResults(
lastCalculated = combinedResults.firstOrNull() ?: riskCombinator.latestCombinedResult, lastCalculated = combinedResults.firstOrNull()?.copy(
// need to provide the data here as they are null in EwAggregatedRiskResult
exposureWindowDayRisks = ewDayRiskStates.filter { ewDayRisk ->
ewDayRisk.localDateUtc.isAfter(fifteenDaysAgo.toLocalDateUtc())
}
) ?: riskCombinator.latestCombinedResult,
lastSuccessfullyCalculated = combinedResults.find { lastSuccessfullyCalculated = combinedResults.find {
it.wasSuccessfullyCalculated it.wasSuccessfullyCalculated
} ?: riskCombinator.initialCombinedResult } ?: riskCombinator.initialCombinedResult
......
...@@ -14,7 +14,7 @@ data class PersistedAggregatedRiskPerDateResult( ...@@ -14,7 +14,7 @@ data class PersistedAggregatedRiskPerDateResult(
@ColumnInfo(name = "minimumDistinctEncountersWithLowRisk") val minimumDistinctEncountersWithLowRisk: Int, @ColumnInfo(name = "minimumDistinctEncountersWithLowRisk") val minimumDistinctEncountersWithLowRisk: Int,
@ColumnInfo(name = "minimumDistinctEncountersWithHighRisk") val minimumDistinctEncountersWithHighRisk: Int @ColumnInfo(name = "minimumDistinctEncountersWithHighRisk") val minimumDistinctEncountersWithHighRisk: Int
) { ) {
fun toAggregatedRiskPerDateResult(): ExposureWindowDayRisk = fun toExposureWindowDayRisk(): ExposureWindowDayRisk =
ExposureWindowDayRisk( ExposureWindowDayRisk(
dateMillisSinceEpoch = dateMillisSinceEpoch, dateMillisSinceEpoch = dateMillisSinceEpoch,
riskLevel = riskLevel, riskLevel = riskLevel,
......
...@@ -90,8 +90,6 @@ class CombinedEwPtRiskTest : BaseTest() { ...@@ -90,8 +90,6 @@ class CombinedEwPtRiskTest : BaseTest() {
minimumDistinctEncountersWithHighRisk = 0 minimumDistinctEncountersWithHighRisk = 0
) )
every { ewAggregatedRiskResult.exposureWindowDayRisks } returns listOf(ewDayRisk, ewDayRisk2)
val ptDayRisk = PresenceTracingDayRisk( val ptDayRisk = PresenceTracingDayRisk(
riskState = RiskState.LOW_RISK, riskState = RiskState.LOW_RISK,
localDateUtc = Instant.ofEpochMilli(1000).toLocalDateUtc() localDateUtc = Instant.ofEpochMilli(1000).toLocalDateUtc()
...@@ -114,10 +112,49 @@ class CombinedEwPtRiskTest : BaseTest() { ...@@ -114,10 +112,49 @@ class CombinedEwPtRiskTest : BaseTest() {
ewRiskLevelResult = createEwRiskLevel( ewRiskLevelResult = createEwRiskLevel(
calculatedAt = Instant.ofEpochMilli(1000 + 2 * MILLIS_DAY), calculatedAt = Instant.ofEpochMilli(1000 + 2 * MILLIS_DAY),
ewAggregatedRiskResult ewAggregatedRiskResult
) ),
exposureWindowDayRisks = listOf(ewDayRisk, ewDayRisk2)
).daysWithEncounters shouldBe 3 ).daysWithEncounters shouldBe 3
} }
@Test
fun `counts days correctly`() {
val dayRisk = ExposureWindowDayRisk(
dateMillisSinceEpoch = 1000,
riskLevel = RiskCalculationParametersOuterClass.NormalizedTimeToRiskLevelMapping.RiskLevel.HIGH,
minimumDistinctEncountersWithLowRisk = 0,
minimumDistinctEncountersWithHighRisk = 1
)
val dayRisk2 = ExposureWindowDayRisk(
dateMillisSinceEpoch = 1000 + MILLIS_DAY,
riskLevel = RiskCalculationParametersOuterClass.NormalizedTimeToRiskLevelMapping.RiskLevel.LOW,
minimumDistinctEncountersWithLowRisk = 1,
minimumDistinctEncountersWithHighRisk = 0
)
val dayRisk3 = ExposureWindowDayRisk(
dateMillisSinceEpoch = 1000 + 2 * MILLIS_DAY,
riskLevel = RiskCalculationParametersOuterClass.NormalizedTimeToRiskLevelMapping.RiskLevel.HIGH,
minimumDistinctEncountersWithLowRisk = 1,
minimumDistinctEncountersWithHighRisk = 2
)
val result = CombinedEwPtRiskLevelResult(
ptRiskLevelResult = createPtRiskLevelResult(
calculatedAt = Instant.ofEpochMilli(1000 + 2 * MILLIS_DAY),
riskState = RiskState.LOW_RISK,
presenceTracingDayRisk = listOf()
),
ewRiskLevelResult = createEwRiskLevel(
calculatedAt = Instant.ofEpochMilli(1000 + 2 * MILLIS_DAY),
ewAggregatedRiskResult
),
exposureWindowDayRisks = listOf(dayRisk, dayRisk2, dayRisk3)
)
result.ewDaysWithHighRisk.size shouldBe 2
result.ewDaysWithLowRisk.size shouldBe 1
}
private fun createPtRiskLevelResult( private fun createPtRiskLevelResult(
calculatedAt: Instant, calculatedAt: Instant,
riskState: RiskState, riskState: RiskState,
......
...@@ -2,12 +2,8 @@ package de.rki.coronawarnapp.risk ...@@ -2,12 +2,8 @@ package de.rki.coronawarnapp.risk
import com.google.android.gms.nearby.exposurenotification.ExposureWindow import com.google.android.gms.nearby.exposurenotification.ExposureWindow
import de.rki.coronawarnapp.risk.result.EwAggregatedRiskResult import de.rki.coronawarnapp.risk.result.EwAggregatedRiskResult
import de.rki.coronawarnapp.risk.result.ExposureWindowDayRisk
import de.rki.coronawarnapp.server.protocols.internal.v2.RiskCalculationParametersOuterClass.NormalizedTimeToRiskLevelMapping.RiskLevel
import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldBe
import io.mockk.MockKAnnotations import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.mockk import io.mockk.mockk
import org.joda.time.Instant import org.joda.time.Instant
import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.BeforeEach
...@@ -16,8 +12,6 @@ import testhelpers.BaseTest ...@@ -16,8 +12,6 @@ import testhelpers.BaseTest
class EwRiskLevelResultTest : BaseTest() { class EwRiskLevelResultTest : BaseTest() {
@MockK lateinit var ewAggregatedRiskResult1: EwAggregatedRiskResult
@BeforeEach @BeforeEach
fun setup() { fun setup() {
MockKAnnotations.init(this) MockKAnnotations.init(this)
...@@ -36,35 +30,6 @@ class EwRiskLevelResultTest : BaseTest() { ...@@ -36,35 +30,6 @@ class EwRiskLevelResultTest : BaseTest() {
).wasSuccessfullyCalculated shouldBe true ).wasSuccessfullyCalculated shouldBe true
} }
@Test
fun `counts days correctly`() {
val dayRisk = ExposureWindowDayRisk(
dateMillisSinceEpoch = 1000,
riskLevel = RiskLevel.HIGH,
minimumDistinctEncountersWithLowRisk = 0,
minimumDistinctEncountersWithHighRisk = 1
)
val dayRisk2 = ExposureWindowDayRisk(
dateMillisSinceEpoch = 1000 + MILLIS_DAY,
riskLevel = RiskLevel.LOW,
minimumDistinctEncountersWithLowRisk = 1,
minimumDistinctEncountersWithHighRisk = 0
)
val dayRisk3 = ExposureWindowDayRisk(
dateMillisSinceEpoch = 1000 + 2 * MILLIS_DAY,
riskLevel = RiskLevel.HIGH,
minimumDistinctEncountersWithLowRisk = 1,
minimumDistinctEncountersWithHighRisk = 2
)
every { ewAggregatedRiskResult1.exposureWindowDayRisks } returns listOf(dayRisk, dayRisk2, dayRisk3)
val riskLevel = createRiskLevel(
ewAggregatedRiskResult = ewAggregatedRiskResult1,
failureReason = null
)
riskLevel.daysWithHighRisk.size shouldBe 2
riskLevel.daysWithLowRisk.size shouldBe 1
}
private fun createRiskLevel( private fun createRiskLevel(
ewAggregatedRiskResult: EwAggregatedRiskResult?, ewAggregatedRiskResult: EwAggregatedRiskResult?,
failureReason: EwRiskLevelResult.FailureReason? failureReason: EwRiskLevelResult.FailureReason?
...@@ -76,5 +41,3 @@ class EwRiskLevelResultTest : BaseTest() { ...@@ -76,5 +41,3 @@ class EwRiskLevelResultTest : BaseTest() {
override val matchedKeyCount: Int = 0 override val matchedKeyCount: Int = 0
} }
} }
private const val MILLIS_DAY = (1000 * 60 * 60 * 24).toLong()
...@@ -103,6 +103,7 @@ class BaseRiskLevelStorageTest : BaseTest() { ...@@ -103,6 +103,7 @@ class BaseRiskLevelStorageTest : BaseTest() {
riskResultDatabaseFactory = databaseFactory, riskResultDatabaseFactory = databaseFactory,
presenceTracingRiskRepository = presenceTracingRiskRepository, presenceTracingRiskRepository = presenceTracingRiskRepository,
riskCombinator = riskCombinator, riskCombinator = riskCombinator,
timeStamper = timeStamper,
) { ) {
override val storedResultLimit: Int = storedResultLimit override val storedResultLimit: Int = storedResultLimit
...@@ -124,7 +125,7 @@ class BaseRiskLevelStorageTest : BaseTest() { ...@@ -124,7 +125,7 @@ class BaseRiskLevelStorageTest : BaseTest() {
val instance = createInstance() val instance = createInstance()
val allEntries = instance.aggregatedRiskPerDateResultTables.allEntries() val allEntries = instance.aggregatedRiskPerDateResultTables.allEntries()
allEntries shouldBe testPersistedAggregatedRiskPerDateResultFlow allEntries shouldBe testPersistedAggregatedRiskPerDateResultFlow
allEntries.first().map { it.toAggregatedRiskPerDateResult() } shouldBe listOf( allEntries.first().map { it.toExposureWindowDayRisk() } shouldBe listOf(
testAggregatedRiskPerDateResult testAggregatedRiskPerDateResult
) )
......
...@@ -35,6 +35,7 @@ class DefaultRiskLevelStorageTest : BaseTest() { ...@@ -35,6 +35,7 @@ class DefaultRiskLevelStorageTest : BaseTest() {
@MockK lateinit var riskResultTables: RiskResultDatabase.RiskResultsDao @MockK lateinit var riskResultTables: RiskResultDatabase.RiskResultsDao
@MockK lateinit var exposureWindowTables: RiskResultDatabase.ExposureWindowsDao @MockK lateinit var exposureWindowTables: RiskResultDatabase.ExposureWindowsDao
@MockK lateinit var presenceTracingRiskRepository: PresenceTracingRiskRepository @MockK lateinit var presenceTracingRiskRepository: PresenceTracingRiskRepository
@MockK lateinit var timeStamper: TimeStamper
private val testRiskLevelResultDao = PersistedRiskLevelResultDao( private val testRiskLevelResultDao = PersistedRiskLevelResultDao(
id = "riskresult-id", id = "riskresult-id",
...@@ -101,6 +102,7 @@ class DefaultRiskLevelStorageTest : BaseTest() { ...@@ -101,6 +102,7 @@ class DefaultRiskLevelStorageTest : BaseTest() {
riskResultDatabaseFactory = databaseFactory, riskResultDatabaseFactory = databaseFactory,
presenceTracingRiskRepository = presenceTracingRiskRepository, presenceTracingRiskRepository = presenceTracingRiskRepository,
riskCombinator = RiskCombinator(TimeStamper()), riskCombinator = RiskCombinator(TimeStamper()),
timeStamper = timeStamper,
) )
@Test @Test
......
...@@ -97,7 +97,8 @@ class DefaultRiskLevelStorageTest : BaseTestInstrumentation() { ...@@ -97,7 +97,8 @@ class DefaultRiskLevelStorageTest : BaseTestInstrumentation() {
scope = TestCoroutineScope(), scope = TestCoroutineScope(),
riskResultDatabaseFactory = databaseFactory, riskResultDatabaseFactory = databaseFactory,
presenceTracingRiskRepository = presenceTracingRiskRepository, presenceTracingRiskRepository = presenceTracingRiskRepository,
riskCombinator = RiskCombinator(TimeStamper()) riskCombinator = RiskCombinator(TimeStamper()),
timeStamper = TimeStamper(),
) )
@Test @Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment