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 9b0a15fd8dd03a5b47cab7299e3932a5b2930406..240b35bf342a849ffd0762b2bb6ebb3651373df6 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 c10e167384a0e721ce480b4e8be9f92875f71d57..c63461ce23343dccbe41d1d0efe3c1b21856707b 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 } } }