From b84609f24309d037cf1a25ab97fa0f6b57b2f6b0 Mon Sep 17 00:00:00 2001 From: Matthias Urhahn <matthias.urhahn@sap.com> Date: Tue, 25 May 2021 17:46:56 +0200 Subject: [PATCH] Adjust time till immunity calculation. (#3270) Was off by 1 day to `toDateTimeAtStartOfDay` not being used on nowUTC. Reuse `getTimeUntilImmunity` in `getVaccinationStatus` Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com> --- .../vaccination/core/VaccinatedPerson.kt | 12 +++------ .../vaccination/core/VaccinatedPersonTest.kt | 25 ++++++++----------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt index 9b0a15fd8..240b35bf3 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPerson.kt @@ -1,5 +1,6 @@ package de.rki.coronawarnapp.vaccination.core +import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalDateUtc import de.rki.coronawarnapp.vaccination.core.repository.storage.VaccinatedPersonData import de.rki.coronawarnapp.vaccination.core.server.valueset.VaccinationValueSet import org.joda.time.Duration @@ -43,15 +44,10 @@ data class VaccinatedPerson( ) fun getVaccinationStatus(nowUTC: Instant = Instant.now()): Status { - val newestFullDose = vaccinationCertificates - .filter { it.doseNumber == it.totalSeriesOfDoses } - .maxByOrNull { it.vaccinatedAt } - ?: return Status.INCOMPLETE - - val daysAgo = Duration(newestFullDose.vaccinatedAt.toDateTimeAtStartOfDay(), nowUTC).standardDays + val daysToImmunity = getTimeUntilImmunity(nowUTC)?.standardDays ?: return Status.INCOMPLETE return when { - daysAgo >= IMMUNITY_WAITING_PERIOD.standardDays -> Status.IMMUNITY + daysToImmunity <= 0 -> Status.IMMUNITY else -> Status.COMPLETE } } @@ -64,7 +60,7 @@ data class VaccinatedPerson( val immunityAt = newestFullDose.vaccinatedAt.toDateTimeAtStartOfDay().plus(IMMUNITY_WAITING_PERIOD) - return Duration(nowUTC, immunityAt) + return Duration(nowUTC.toLocalDateUtc().toDateTimeAtStartOfDay(), immunityAt) } enum class Status { diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPersonTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPersonTest.kt index c10e16738..c63461ce2 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPersonTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/VaccinatedPersonTest.kt @@ -76,6 +76,7 @@ class VaccinatedPersonTest : BaseTest() { @Test fun `vaccination status - IMMUNITY`() { + // vaccinatedAt "2021-04-27" val immunityContainer = testData.personAVac2Container val personData = mockk<VaccinatedPersonData>().apply { every { vaccinations } returns setOf(testData.personAVac1Container, immunityContainer) @@ -85,23 +86,22 @@ class VaccinatedPersonTest : BaseTest() { valueSet = null ) - val vaccinatedAt = immunityContainer.vaccination.vaccinatedAt - vaccinatedPerson.apply { getVaccinationStatus( - vaccinatedAt.toDateTimeAtStartOfDay().toInstant() + Instant.parse("2021-04-27T12:00:00.000Z") ) shouldBe VaccinatedPerson.Status.COMPLETE getVaccinationStatus( - vaccinatedAt.toDateTimeAtStartOfDay().toInstant().plus(Duration.standardDays(13)) + Instant.parse("2021-05-10T12:00:00.000Z") ) shouldBe VaccinatedPerson.Status.COMPLETE getVaccinationStatus( - vaccinatedAt.toDateTimeAtStartOfDay().toInstant().plus(Duration.standardDays(14)) + Instant.parse("2021-05-11T12:00:00.000Z") ) shouldBe VaccinatedPerson.Status.IMMUNITY } } @Test fun `time until status IMMUNITY`() { + // vaccinatedAt "2021-04-27" val immunityContainer = testData.personAVac2Container val personData = mockk<VaccinatedPersonData>().apply { every { vaccinations } returns setOf(testData.personAVac1Container, immunityContainer) @@ -110,19 +110,16 @@ class VaccinatedPersonTest : BaseTest() { data = personData, valueSet = null ) - - val vaccinatedAt = immunityContainer.vaccination.vaccinatedAt - vaccinatedPerson.apply { getTimeUntilImmunity( - vaccinatedAt.toDateTimeAtStartOfDay().toInstant() - ) shouldBe Duration.standardDays(14) + Instant.parse("2021-04-27T12:00:00.000Z") + )!!.standardDays shouldBe Duration.standardDays(14).standardDays getTimeUntilImmunity( - vaccinatedAt.toDateTimeAtStartOfDay().toInstant().plus(Duration.standardDays(13)) - ) shouldBe Duration.standardDays(1) + Instant.parse("2021-05-10T12:00:00.000Z") + )!!.standardDays shouldBe Duration.standardDays(1).standardDays getTimeUntilImmunity( - vaccinatedAt.toDateTimeAtStartOfDay().toInstant().plus(Duration.standardDays(14)) - ) shouldBe Duration.ZERO + Instant.parse("2021-05-11T12:00:00.000Z") + )!!.standardDays shouldBe Duration.ZERO.standardDays } } } -- GitLab