Skip to content
Snippets Groups Projects
Unverified Commit 68bdfbc9 authored by Matthias Urhahn's avatar Matthias Urhahn Committed by GitHub
Browse files

If there is an `initialTestResultReceivedTimestamp` it may be (EXPOSUREAPP-4484) #2638

* If there is an `initialTestResultReceivedTimestamp`  it may be the bug.
If there is also a registration value, but no `devicePairingSuccessfulAt` timestamp, then we are being called from `asyncRegisterDeviceViaGUID` or `asyncRegisterDeviceViaTAN`, and it's a new test and `initialTestResultReceivedTimestamp` should be null.

* Fix check order and add tests.
parent 68946ced
No related branches found
No related tags found
No related merge requests found
...@@ -165,6 +165,16 @@ class SubmissionRepository @Inject constructor( ...@@ -165,6 +165,16 @@ class SubmissionRepository @Inject constructor(
deadmanNotificationScheduler.cancelScheduledWork() deadmanNotificationScheduler.cancelScheduledWork()
} }
// https://jira-ibs.wbs.net.sap/browse/EXPOSUREAPP-4484
// User removed a test before 1.11 where due to a bug the timestamp was not removed.
if (submissionSettings.initialTestResultReceivedAt != null &&
submissionSettings.registrationToken.value != null &&
submissionSettings.devicePairingSuccessfulAt == null
) {
Timber.tag(TAG).w("User has stale initialTestResultReceivedAt, fixing EXPOSUREAPP-4484.")
submissionSettings.initialTestResultReceivedAt = null
}
val initialTestResultReceivedTimestamp = submissionSettings.initialTestResultReceivedAt val initialTestResultReceivedTimestamp = submissionSettings.initialTestResultReceivedAt
if (initialTestResultReceivedTimestamp == null) { if (initialTestResultReceivedTimestamp == null) {
......
...@@ -80,12 +80,15 @@ class SubmissionRepositoryTest : BaseTest() { ...@@ -80,12 +80,15 @@ class SubmissionRepositoryTest : BaseTest() {
every { submissionSettings.devicePairingSuccessfulAt = any() } just Runs every { submissionSettings.devicePairingSuccessfulAt = any() } just Runs
every { submissionSettings.initialTestResultReceivedAt } returns resultReceivedTimeStamp every { submissionSettings.initialTestResultReceivedAt } returns resultReceivedTimeStamp
every { submissionSettings.initialTestResultReceivedAt = any() } just Runs
every { submissionSettings.hasGivenConsent } returns mockFlowPreference(false) every { submissionSettings.hasGivenConsent } returns mockFlowPreference(false)
every { submissionSettings.hasViewedTestResult } returns mockFlowPreference(false) every { submissionSettings.hasViewedTestResult } returns mockFlowPreference(false)
every { submissionSettings.symptoms } returns mockFlowPreference(Symptoms.NO_INFO_GIVEN) every { submissionSettings.symptoms } returns mockFlowPreference(Symptoms.NO_INFO_GIVEN)
every { submissionSettings.clear() } just Runs every { submissionSettings.clear() } just Runs
every { submissionSettings.devicePairingSuccessfulAt } returns null
every { taskController.tasks } returns emptyFlow() every { taskController.tasks } returns emptyFlow()
coEvery { tekHistoryStorage.clear() } just Runs coEvery { tekHistoryStorage.clear() } just Runs
...@@ -118,7 +121,6 @@ class SubmissionRepositoryTest : BaseTest() { ...@@ -118,7 +121,6 @@ class SubmissionRepositoryTest : BaseTest() {
tracingSettings.isTestResultAvailableNotificationSent = capture(isTestResultAvailableNotificationSent) tracingSettings.isTestResultAvailableNotificationSent = capture(isTestResultAvailableNotificationSent)
} answers {} } answers {}
every { submissionSettings.initialTestResultReceivedAt = any() } just Runs
every { submissionSettings.isAllowedToSubmitKeys = any() } just Runs every { submissionSettings.isAllowedToSubmitKeys = any() } just Runs
every { submissionSettings.isSubmissionSuccessful = any() } just Runs every { submissionSettings.isSubmissionSuccessful = any() } just Runs
...@@ -277,4 +279,55 @@ class SubmissionRepositoryTest : BaseTest() { ...@@ -277,4 +279,55 @@ class SubmissionRepositoryTest : BaseTest() {
coVerify(exactly = 0) { submissionService.asyncRequestTestResult(any()) } coVerify(exactly = 0) { submissionService.asyncRequestTestResult(any()) }
} }
@Test
fun `EXPOSUREAPP-4484 is fixed`() = runBlockingTest {
every { timeStamper.nowUTC } returns Instant.EPOCH
var initialTimeStamp = Instant.EPOCH.plus(9999)
every { submissionSettings.initialTestResultReceivedAt } answers { initialTimeStamp }
every { submissionSettings.initialTestResultReceivedAt = any() } answers { initialTimeStamp = arg(0) }
every { submissionSettings.registrationToken } returns mockFlowPreference("token")
every { submissionSettings.devicePairingSuccessfulAt } returns null
val submissionRepository = createInstance(scope = this)
submissionRepository.updateTestResult(TestResult.NEGATIVE)
verify {
submissionSettings.initialTestResultReceivedAt = null
submissionSettings.initialTestResultReceivedAt = Instant.EPOCH
}
initialTimeStamp shouldBe Instant.EPOCH
}
@Test
fun `EXPOSUREAPP-4484 has specific conditions`() = runBlockingTest {
val submissionRepository = createInstance(scope = this)
every { submissionSettings.initialTestResultReceivedAt } returns Instant.ofEpochMilli(1234)
every { submissionSettings.registrationToken } returns mockFlowPreference("token")
// This needs to be null to trigger the fix
every { submissionSettings.devicePairingSuccessfulAt } returns Instant.ofEpochMilli(5678)
submissionRepository.updateTestResult(TestResult.NEGATIVE)
every { submissionSettings.initialTestResultReceivedAt } returns Instant.ofEpochMilli(1234)
// This needs to be non null to trigger the fix
every { submissionSettings.registrationToken } returns mockFlowPreference(null)
every { submissionSettings.devicePairingSuccessfulAt } returns null
submissionRepository.updateTestResult(TestResult.NEGATIVE)
// This needs to be non null to trigger the fix
every { submissionSettings.initialTestResultReceivedAt } returns null
every { submissionSettings.registrationToken } returns mockFlowPreference("token")
every { submissionSettings.devicePairingSuccessfulAt } returns null
submissionRepository.updateTestResult(TestResult.NEGATIVE)
verify(exactly = 0) { submissionSettings.initialTestResultReceivedAt = null }
}
} }
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