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 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.repository.storage.VaccinatedPersonData
import de.rki.coronawarnapp.vaccination.core.server.valueset.VaccinationValueSet import de.rki.coronawarnapp.vaccination.core.server.valueset.VaccinationValueSet
import org.joda.time.Duration import org.joda.time.Duration
...@@ -43,15 +44,10 @@ data class VaccinatedPerson( ...@@ -43,15 +44,10 @@ data class VaccinatedPerson(
) )
fun getVaccinationStatus(nowUTC: Instant = Instant.now()): Status { fun getVaccinationStatus(nowUTC: Instant = Instant.now()): Status {
val newestFullDose = vaccinationCertificates val daysToImmunity = getTimeUntilImmunity(nowUTC)?.standardDays ?: return Status.INCOMPLETE
.filter { it.doseNumber == it.totalSeriesOfDoses }
.maxByOrNull { it.vaccinatedAt }
?: return Status.INCOMPLETE
val daysAgo = Duration(newestFullDose.vaccinatedAt.toDateTimeAtStartOfDay(), nowUTC).standardDays
return when { return when {
daysAgo >= IMMUNITY_WAITING_PERIOD.standardDays -> Status.IMMUNITY daysToImmunity <= 0 -> Status.IMMUNITY
else -> Status.COMPLETE else -> Status.COMPLETE
} }
} }
...@@ -64,7 +60,7 @@ data class VaccinatedPerson( ...@@ -64,7 +60,7 @@ data class VaccinatedPerson(
val immunityAt = newestFullDose.vaccinatedAt.toDateTimeAtStartOfDay().plus(IMMUNITY_WAITING_PERIOD) val immunityAt = newestFullDose.vaccinatedAt.toDateTimeAtStartOfDay().plus(IMMUNITY_WAITING_PERIOD)
return Duration(nowUTC, immunityAt) return Duration(nowUTC.toLocalDateUtc().toDateTimeAtStartOfDay(), immunityAt)
} }
enum class Status { enum class Status {
......
...@@ -76,6 +76,7 @@ class VaccinatedPersonTest : BaseTest() { ...@@ -76,6 +76,7 @@ class VaccinatedPersonTest : BaseTest() {
@Test @Test
fun `vaccination status - IMMUNITY`() { fun `vaccination status - IMMUNITY`() {
// vaccinatedAt "2021-04-27"
val immunityContainer = testData.personAVac2Container val immunityContainer = testData.personAVac2Container
val personData = mockk<VaccinatedPersonData>().apply { val personData = mockk<VaccinatedPersonData>().apply {
every { vaccinations } returns setOf(testData.personAVac1Container, immunityContainer) every { vaccinations } returns setOf(testData.personAVac1Container, immunityContainer)
...@@ -85,23 +86,22 @@ class VaccinatedPersonTest : BaseTest() { ...@@ -85,23 +86,22 @@ class VaccinatedPersonTest : BaseTest() {
valueSet = null valueSet = null
) )
val vaccinatedAt = immunityContainer.vaccination.vaccinatedAt
vaccinatedPerson.apply { vaccinatedPerson.apply {
getVaccinationStatus( getVaccinationStatus(
vaccinatedAt.toDateTimeAtStartOfDay().toInstant() Instant.parse("2021-04-27T12:00:00.000Z")
) shouldBe VaccinatedPerson.Status.COMPLETE ) shouldBe VaccinatedPerson.Status.COMPLETE
getVaccinationStatus( getVaccinationStatus(
vaccinatedAt.toDateTimeAtStartOfDay().toInstant().plus(Duration.standardDays(13)) Instant.parse("2021-05-10T12:00:00.000Z")
) shouldBe VaccinatedPerson.Status.COMPLETE ) shouldBe VaccinatedPerson.Status.COMPLETE
getVaccinationStatus( getVaccinationStatus(
vaccinatedAt.toDateTimeAtStartOfDay().toInstant().plus(Duration.standardDays(14)) Instant.parse("2021-05-11T12:00:00.000Z")
) shouldBe VaccinatedPerson.Status.IMMUNITY ) shouldBe VaccinatedPerson.Status.IMMUNITY
} }
} }
@Test @Test
fun `time until status IMMUNITY`() { fun `time until status IMMUNITY`() {
// vaccinatedAt "2021-04-27"
val immunityContainer = testData.personAVac2Container val immunityContainer = testData.personAVac2Container
val personData = mockk<VaccinatedPersonData>().apply { val personData = mockk<VaccinatedPersonData>().apply {
every { vaccinations } returns setOf(testData.personAVac1Container, immunityContainer) every { vaccinations } returns setOf(testData.personAVac1Container, immunityContainer)
...@@ -110,19 +110,16 @@ class VaccinatedPersonTest : BaseTest() { ...@@ -110,19 +110,16 @@ class VaccinatedPersonTest : BaseTest() {
data = personData, data = personData,
valueSet = null valueSet = null
) )
val vaccinatedAt = immunityContainer.vaccination.vaccinatedAt
vaccinatedPerson.apply { vaccinatedPerson.apply {
getTimeUntilImmunity( getTimeUntilImmunity(
vaccinatedAt.toDateTimeAtStartOfDay().toInstant() Instant.parse("2021-04-27T12:00:00.000Z")
) shouldBe Duration.standardDays(14) )!!.standardDays shouldBe Duration.standardDays(14).standardDays
getTimeUntilImmunity( getTimeUntilImmunity(
vaccinatedAt.toDateTimeAtStartOfDay().toInstant().plus(Duration.standardDays(13)) Instant.parse("2021-05-10T12:00:00.000Z")
) shouldBe Duration.standardDays(1) )!!.standardDays shouldBe Duration.standardDays(1).standardDays
getTimeUntilImmunity( getTimeUntilImmunity(
vaccinatedAt.toDateTimeAtStartOfDay().toInstant().plus(Duration.standardDays(14)) Instant.parse("2021-05-11T12:00:00.000Z")
) shouldBe Duration.ZERO )!!.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