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

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: default avatarharambasicluka <64483219+harambasicluka@users.noreply.github.com>
parent a8a318ea
No related branches found
No related tags found
No related merge requests found
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 {
......
......@@ -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
}
}
}
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