diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt index f6c762c39eeac9777537d1aca410ca6d2a6df74e..bc1b13566bd294854da6330ee9ae10fe773ea3e2 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt @@ -39,8 +39,6 @@ import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.mockk import org.joda.time.Instant -import org.joda.time.LocalDate -import org.joda.time.format.DateTimeFormat import org.junit.After import org.junit.Before import org.junit.Test @@ -157,11 +155,16 @@ class PersonDetailsFragmentTest : BaseUITest() { } every { containerId } returns tcsContainerId every { testType } returns "PCR-Test" - every { dateOfBirth } returns LocalDate.parse("18.04.1943", DateTimeFormat.forPattern("dd.MM.yyyy")) + every { dateOfBirthFormatted } returns "1943-04-18" every { sampleCollectedAt } returns Instant.parse("2021-05-31T11:35:00.000Z") every { registeredAt } returns Instant.parse("2021-05-21T11:35:00.000Z") every { personIdentifier } returns certificatePersonIdentifier every { qrCode } returns "qrCode" + every { personIdentifier } returns CertificatePersonIdentifier( + firstNameStandardized = "firstNameStandardized", + lastNameStandardized = "lastNameStandardized", + dateOfBirthFormatted = "1943-04-18" + ) } private fun mockVaccinationCertificate(number: Int = 1, final: Boolean = false): VaccinationCertificate = @@ -173,15 +176,21 @@ class PersonDetailsFragmentTest : BaseUITest() { every { vaccination } returns mockk<DccV1.VaccinationData>().apply { every { doseNumber } returns number every { totalSeriesOfDoses } returns 2 - every { vaccinatedAt } returns localDate + every { vaccinatedOn } returns localDate } } every { containerId } returns vcContainerId - every { vaccinatedAt } returns localDate + every { vaccinatedOn } returns localDate every { personIdentifier } returns certificatePersonIdentifier + every { vaccinatedOn } returns Instant.parse("2021-06-01T11:35:00.000Z").toLocalDateUserTz() + every { personIdentifier } returns CertificatePersonIdentifier( + firstNameStandardized = "firstNameStandardized", + lastNameStandardized = "lastNameStandardized", + dateOfBirthFormatted = "1943-04-18" + ) every { doseNumber } returns number every { totalSeriesOfDoses } returns 2 - every { dateOfBirth } returns LocalDate.now() + every { dateOfBirthFormatted } returns "1981-03-20" every { isFinalShot } returns final every { qrCode } returns "qrCode" } @@ -190,7 +199,7 @@ class PersonDetailsFragmentTest : BaseUITest() { mockk<RecoveryCertificate>().apply { every { fullName } returns "Andrea Schneider" every { certificateId } returns "recoveryCertificateId" - every { dateOfBirth } returns LocalDate.now() + every { dateOfBirthFormatted } returns "1981-03-20" every { validUntil } returns Instant.parse("2021-05-31T11:35:00.000Z").toLocalDateUserTz() every { personIdentifier } returns certificatePersonIdentifier every { qrCode } returns "qrCode" @@ -198,7 +207,7 @@ class PersonDetailsFragmentTest : BaseUITest() { } private val certificatePersonIdentifier = CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("01.01.2020", DateTimeFormat.forPattern("dd.MM.yyyy")), + dateOfBirthFormatted = "1981-03-20", firstNameStandardized = "firstNameStandardized", lastNameStandardized = "lastNameStandardized", ) diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentTest.kt index db88403732638855df3d81d36efc995d45071c2e..fe7067dfa300ce9de250d43205fd9361081367fb 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentTest.kt @@ -22,7 +22,6 @@ import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.mockk import org.joda.time.Instant -import org.joda.time.LocalDate import org.junit.After import org.junit.Before import org.junit.Test @@ -185,7 +184,7 @@ class PersonOverviewFragmentTest : BaseUITest() { every { personIdentifier } returns CertificatePersonIdentifier( firstNameStandardized = "firstNameStandardized", lastNameStandardized = "lastNameStandardized", - dateOfBirth = LocalDate.now() + dateOfBirthFormatted = "1943-04-18" ) } } diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateDetailsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateDetailsFragmentTest.kt index f283390d346214da573bc579226db8f8bd898fbd..ae0328185b47244047674cbccb5e884f90e2a525 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateDetailsFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateDetailsFragmentTest.kt @@ -27,7 +27,6 @@ import io.mockk.impl.annotations.MockK import io.mockk.mockk import org.joda.time.DateTime import org.joda.time.Instant -import org.joda.time.LocalDate import org.joda.time.format.DateTimeFormat import org.junit.After import org.junit.Before @@ -107,6 +106,8 @@ class TestCertificateDetailsFragmentTest : BaseUITest() { get() = "Xup" override val sampleCollectedAt: Instant get() = testDate + override val sampleCollectedAtFormatted: String + get() = "12.05.2021 19:00" override val testCenter: String get() = "AB123" override val registeredAt: Instant @@ -129,8 +130,8 @@ class TestCertificateDetailsFragmentTest : BaseUITest() { get() = "Schneider" override val fullName: String get() = "Schneider, Andrea" - override val dateOfBirth: LocalDate - get() = LocalDate.parse("18.04.1943 00:00", formatter) + override val dateOfBirthFormatted: String + get() = "1943-04-18" override val personIdentifier: CertificatePersonIdentifier get() = certificatePersonIdentifier override val certificateIssuer: String diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragmentTest.kt index a4fb1138b3a1fc51c15fbda6f3a39a521ed3a0fe..e5c9f598afe2fba1a80885172b3d2b73c4cf2da8 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragmentTest.kt @@ -92,8 +92,9 @@ class VaccinationDetailsFragmentTest : BaseUITest() { val formatter = DateTimeFormat.forPattern("dd.MM.yyyy") val mockCertificate = mockk<VaccinationCertificate>().apply { every { fullName } returns "Max Mustermann" - every { dateOfBirth } returns LocalDate.parse("01.02.1976", formatter) - every { vaccinatedAt } returns LocalDate.parse("18.02.2021", formatter) + every { dateOfBirthFormatted } returns "01.02.1976" + every { vaccinatedOnFormatted } returns "18.02.2021" + every { vaccinatedOn } returns LocalDate.parse("18.02.2021", formatter) every { targetDisease } returns "COVID-19" every { medicalProductName } returns "Comirnaty" every { vaccineTypeName } returns "mRNA" diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensor.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensor.kt index d97b5e1ecde0a56ff4654e5bc7424b7a392ab8c6..43d40d20f705116862de59bb630cc0889abac53b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensor.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensor.kt @@ -21,10 +21,8 @@ class DccQrCodeCensor @Inject constructor() : BugCensor { synchronized(certsToCensor) { certsToCensor.toList() }.forEach { it.certificate.apply { - val dobFormatted = dateOfBirth.toString() - newMessage = newMessage.censor( - dobFormatted, + dateOfBirthFormatted, "covidCertificate/dateOfBirth" ) @@ -81,12 +79,12 @@ class DccQrCodeCensor @Inject constructor() : BugCensor { "vaccinationData/vaccineId" ) - val vaccinatedAt = vaccinationData.vaccinatedAt.toString() + val vaccinatedOn = vaccinationData.vaccinatedOnFormatted newMessage = newMessage.censor( - vaccinatedAt, - "vaccinationData/vaccinatedAt" + vaccinatedOn, + "vaccinationData/vaccinatedOnFormatted" ) - if (vaccinatedAt != vaccinationData.dt) { + if (vaccinatedOn != vaccinationData.dt) { newMessage = newMessage.censor( vaccinationData.dt, "vaccinationData/dt" diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CertificatePersonIdentifier.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CertificatePersonIdentifier.kt index 1c07d217e525c5cc5996a41da2bc95e540c7237a..6a2b4a8952c34428bd80f5347cd22d89eafee0ca 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CertificatePersonIdentifier.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CertificatePersonIdentifier.kt @@ -5,11 +5,10 @@ import de.rki.coronawarnapp.covidcertificate.common.exception.InvalidHealthCerti import de.rki.coronawarnapp.covidcertificate.common.exception.InvalidHealthCertificateException.ErrorCode.NAME_MISMATCH import de.rki.coronawarnapp.covidcertificate.common.exception.InvalidVaccinationCertificateException import de.rki.coronawarnapp.util.HashExtensions.toSHA256 -import org.joda.time.LocalDate import timber.log.Timber data class CertificatePersonIdentifier( - @SerializedName("dateOfBirth") val dateOfBirth: LocalDate, + @SerializedName("dateOfBirth") val dateOfBirthFormatted: String, @SerializedName("familyNameStandardized") val lastNameStandardized: String, @SerializedName("givenNameStandardized") val firstNameStandardized: String? ) { @@ -19,10 +18,9 @@ data class CertificatePersonIdentifier( */ internal val code: String get() { - val dob = dateOfBirth.toString() val lastName = lastNameStandardized val firstName = firstNameStandardized - return "$dob#$lastName#$firstName" + return "$dateOfBirthFormatted#$lastName#$firstName" } /** @@ -41,8 +39,8 @@ data class CertificatePersonIdentifier( Timber.d("Given name does not match, got ${other.firstNameStandardized}, expected $firstNameStandardized") throw InvalidVaccinationCertificateException(NAME_MISMATCH) } - if (dateOfBirth != other.dateOfBirth) { - Timber.d("Date of birth does not match, got ${other.dateOfBirth}, expected $dateOfBirth") + if (dateOfBirthFormatted != other.dateOfBirthFormatted) { + Timber.d("Date of birth does not match, got ${other.dateOfBirthFormatted}, expected $dateOfBirthFormatted") throw InvalidVaccinationCertificateException(DOB_MISMATCH) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CwaCovidCertificate.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CwaCovidCertificate.kt index bf337960d81b34fc0e791adb3b3357908e78fb4c..928f30237a7414e0476e8b5880c417271e3e5298 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CwaCovidCertificate.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CwaCovidCertificate.kt @@ -3,7 +3,6 @@ package de.rki.coronawarnapp.covidcertificate.common.certificate import de.rki.coronawarnapp.covidcertificate.common.qrcode.QrCodeString import de.rki.coronawarnapp.covidcertificate.common.repository.CertificateContainerId import org.joda.time.Instant -import org.joda.time.LocalDate /** * For use with the UI @@ -17,7 +16,7 @@ interface CwaCovidCertificate { val firstName: String? val lastName: String val fullName: String - val dateOfBirth: LocalDate + val dateOfBirthFormatted: String val personIdentifier: CertificatePersonIdentifier val certificateIssuer: String val certificateCountry: String diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DateFormatting.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DateFormatting.kt new file mode 100644 index 0000000000000000000000000000000000000000..8ac128429308e152f8fa8a0ee2bd69824d226fb5 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DateFormatting.kt @@ -0,0 +1,31 @@ +package de.rki.coronawarnapp.covidcertificate.common.certificate + +import org.joda.time.DateTime +import org.joda.time.DateTimeZone +import org.joda.time.LocalDate +import org.joda.time.format.DateTimeFormat +import org.joda.time.format.DateTimeFormatterBuilder +import org.joda.time.format.ISODateTimeFormat + +internal fun String.formatDate(): String { + val regex = "T\\d\\d:\\d\\d:\\d\\d(\\+\\d\\d:\\d\\d)?.*".toRegex() + return this.replace(regex, "") +} + +internal fun String.formatDateTime(tz: DateTimeZone = DateTimeZone.getDefault()): String = try { + val pattern = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm 'GMT' ZZ") + DateTime.parse( + this, + DateTimeFormatterBuilder() + .append(ISODateTimeFormat.date()) + .append(ISODateTimeFormat.timeParser().withOffsetParsed()) + .toFormatter() + ) + .toDateTime(tz) + .toString(pattern) + .removeSuffix(":00") +} catch (e: Exception) { + this +} + +internal fun String.parseLocalDate(): LocalDate = LocalDate.parse(this, DateTimeFormat.forPattern("yyyy-MM-dd")) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccQrCodeExtractor.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccQrCodeExtractor.kt index 03d32a9a39f6ef31fae648ce87ec67d6ed612f25..14479a08aa093af93e36d1dfaf12c0b55c513c94 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccQrCodeExtractor.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccQrCodeExtractor.kt @@ -171,7 +171,7 @@ class DccQrCodeExtractor @Inject constructor( val cbor = coseDecoder.decode(this) DccData( header = headerParser.parse(cbor), - certificate = bodyParser.parse(cbor, mode).toCertificate + certificate = bodyParser.parse(cbor, mode).asCertificate ).also { DccQrCodeCensor.addCertificateToCensor(it) }.also { @@ -193,26 +193,26 @@ class DccQrCodeExtractor @Inject constructor( private val DccV1.isRecoveryCertificate: Boolean get() = this.recoveries?.isNotEmpty() == true - private val DccV1.toCertificate: DccV1.MetaData + private val DccV1.asCertificate: DccV1.MetaData get() = when { isVaccinationCertificate -> VaccinationDccV1( version = version, nameData = nameData, - dateOfBirth = dateOfBirth, + dateOfBirthFormatted = dateOfBirthFormatted, personIdentifier = personIdentifier, vaccination = vaccinations!!.first() ) isTestCertificate -> TestDccV1( version = version, nameData = nameData, - dateOfBirth = dateOfBirth, + dateOfBirthFormatted = dateOfBirthFormatted, personIdentifier = personIdentifier, test = tests!!.first() ) isRecoveryCertificate -> RecoveryDccV1( version = version, nameData = nameData, - dateOfBirth = dateOfBirth, + dateOfBirthFormatted = dateOfBirthFormatted, personIdentifier = personIdentifier, recovery = recoveries!!.first() ) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1.kt index 8752cfda28be3ad0970f85c7c5589311785b485b..59879f150d4f01c593ed11b307678f16c707b03a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1.kt @@ -1,13 +1,8 @@ package de.rki.coronawarnapp.covidcertificate.common.certificate import com.google.gson.annotations.SerializedName -import org.joda.time.DateTime import org.joda.time.Instant import org.joda.time.LocalDate -import org.joda.time.format.DateTimeFormat -import org.joda.time.format.DateTimeFormatterBuilder -import org.joda.time.format.ISODateTimeFormat -import timber.log.Timber data class DccV1( @SerializedName("ver") val version: String, @@ -36,14 +31,12 @@ data class DccV1( } } - // Can't use lazy because GSON will NULL it, as we have no no-args constructor - private var dateOfBirthCache: LocalDate? = null - val dateOfBirth: LocalDate - get() = dateOfBirthCache ?: dob.toLocalDateLeniently().also { dateOfBirthCache = it } + val dateOfBirthFormatted: String + get() = dob.formatDate() val personIdentifier: CertificatePersonIdentifier get() = CertificatePersonIdentifier( - dateOfBirth = dateOfBirth, + dateOfBirthFormatted = dateOfBirthFormatted, lastNameStandardized = nameData.familyNameStandardized, firstNameStandardized = nameData.givenNameStandardized ) @@ -51,7 +44,7 @@ data class DccV1( interface MetaData { val version: String val nameData: NameData - val dateOfBirth: LocalDate + val dateOfBirthFormatted: String val payload: Payload val personIdentifier: CertificatePersonIdentifier } @@ -79,12 +72,18 @@ data class DccV1( // Unique Certificate Identifier, e.g. "ci": "urn:uvci:01:NL:PlA8UWS60Z4RZXVALl6GAZ" @SerializedName("ci") override val uniqueCertificateIdentifier: String ) : Payload { - val testedPositiveOn: LocalDate - get() = LocalDate.parse(fr) + val testedPositiveOnFormatted: String + get() = fr.formatDate() + + val validFromFormatted: String + get() = df.formatDate() val validFrom: LocalDate - get() = LocalDate.parse(df) + get() = validFromFormatted.parseLocalDate() + + val validUntilFormatted: String + get() = du.formatDate() val validUntil: LocalDate - get() = LocalDate.parse(du) + get() = validUntilFormatted.parseLocalDate() } data class VaccinationData( @@ -109,10 +108,11 @@ data class DccV1( // Unique Certificate Identifier, e.g. "ci": "urn:uvci:01:NL:PlA8UWS60Z4RZXVALl6GAZ" @SerializedName("ci") override val uniqueCertificateIdentifier: String ) : Payload { - // Can't use lazy because GSON will NULL it, as we have no no-args constructor - private var vaccinatedAtCache: LocalDate? = null - val vaccinatedAt: LocalDate - get() = vaccinatedAtCache ?: dt.toLocalDateLeniently().also { vaccinatedAtCache = it } + val vaccinatedOnFormatted: String + get() = dt.formatDate() + + val vaccinatedOn: LocalDate + get() = vaccinatedOnFormatted.parseLocalDate() } data class TestCertificateData( @@ -125,7 +125,7 @@ data class DccV1( // NAA Test Name (only for PCR tests, but not required) "nm": "Roche LightCycler qPCR", @SerializedName("nm") val testName: String? = null, // RAT Test name and manufacturer (only for RAT tests, but not required) - @SerializedName("ma") val testNameAndManufactor: String? = null, + @SerializedName("ma") val testNameAndManufacturer: String? = null, // Date/Time of Sample Collection (required) "sc": "2021-04-13T14:20:00+00:00" @SerializedName("sc") val sc: String, // Testing Center (required) "tc": "GGD Fryslân, L-Heliconweg", @@ -140,31 +140,16 @@ data class DccV1( val sampleCollectedAt: Instant get() = Instant.parse(sc) - } -} -internal fun String.toLocalDateLeniently(): LocalDate = try { - LocalDate.parse(this, DateTimeFormat.forPattern("yyyy-MM-dd")) -} catch (e: Exception) { - Timber.w("Irregular date string: %s", this) - try { - DateTime.parse( - this, - DateTimeFormatterBuilder() - .append(ISODateTimeFormat.date()) - .append(ISODateTimeFormat.timeParser().withOffsetParsed()) - .toFormatter() - ).toLocalDate() - } catch (giveUp: Exception) { - Timber.e("Invalid date string: %s", this) - throw giveUp + val sampleCollectedAtFormatted: String + get() = sc.formatDateTime() } } data class VaccinationDccV1( override val version: String, override val nameData: DccV1.NameData, - override val dateOfBirth: LocalDate, + override val dateOfBirthFormatted: String, override val personIdentifier: CertificatePersonIdentifier, val vaccination: DccV1.VaccinationData ) : DccV1.MetaData { @@ -175,7 +160,7 @@ data class VaccinationDccV1( data class TestDccV1( override val version: String, override val nameData: DccV1.NameData, - override val dateOfBirth: LocalDate, + override val dateOfBirthFormatted: String, override val personIdentifier: CertificatePersonIdentifier, val test: DccV1.TestCertificateData ) : DccV1.MetaData { @@ -186,7 +171,7 @@ data class TestDccV1( data class RecoveryDccV1( override val version: String, override val nameData: DccV1.NameData, - override val dateOfBirth: LocalDate, + override val dateOfBirthFormatted: String, override val personIdentifier: CertificatePersonIdentifier, val recovery: DccV1.RecoveryCertificateData ) : DccV1.MetaData { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1Parser.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1Parser.kt index 702d1ef935a1e1cbbbcd56d1de6a6bb1426d8241..fb8cd6cfa3ee2a5ede7771c5634776f6b32cb0ea 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1Parser.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1Parser.kt @@ -61,7 +61,7 @@ class DccV1Parser @Inject constructor( if (vaccinations.isNullOrEmpty()) throw InvalidVaccinationCertificateException(ErrorCode.NO_VACCINATION_ENTRY) Timber.w("Lenient: Vaccination data contained multiple entries.") - copy(vaccinations = listOf(vaccinations.maxByOrNull { it.vaccinatedAt }!!)) + copy(vaccinations = listOf(vaccinations.maxByOrNull { it.vaccinatedOn }!!)) } Mode.CERT_REC_STRICT -> if (recoveries?.size != 1) @@ -88,9 +88,10 @@ class DccV1Parser @Inject constructor( // check for non null (Gson does not enforce it) + not blank & force date parsing require(version.isNotBlank()) require(nameData.familyNameStandardized.isNotBlank()) - dateOfBirth + dateOfBirthFormatted vaccinations?.forEach { - it.vaccinatedAt + it.vaccinatedOnFormatted + it.vaccinatedOn require(it.certificateIssuer.isNotBlank()) require(it.certificateCountry.isNotBlank()) require(it.marketAuthorizationHolderId.isNotBlank()) @@ -108,7 +109,9 @@ class DccV1Parser @Inject constructor( require(it.testType.isNotBlank()) } recoveries?.forEach { - it.testedPositiveOn + it.testedPositiveOnFormatted + it.validFromFormatted + it.validUntilFormatted it.validFrom it.validUntil require(it.certificateIssuer.isNotBlank()) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt index 18fcc6afd8090b88cdab4ba375762df27c159554..98424cb8acf5620172a6b517f1271c7883fccd4f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt @@ -65,9 +65,9 @@ private fun Collection<CwaCovidCertificate>.rule3FindRecentLastShot( with(it.rawCertificate.vaccination) { doseNumber == totalSeriesOfDoses } } .filter { - Days.daysBetween(it.rawCertificate.vaccination.vaccinatedAt, nowUtc.toLocalDateUtc()).days > 14 + Days.daysBetween(it.rawCertificate.vaccination.vaccinatedOn, nowUtc.toLocalDateUtc()).days > 14 } - .maxByOrNull { it.rawCertificate.vaccination.vaccinatedAt } + .maxByOrNull { it.rawCertificate.vaccination.vaccinatedOn } /** * 4 @@ -103,9 +103,9 @@ private fun Collection<CwaCovidCertificate>.rule5findTooRecentFinalShot( with(it.rawCertificate.vaccination) { doseNumber == totalSeriesOfDoses } } .filter { - Days.daysBetween(it.rawCertificate.vaccination.vaccinatedAt, nowUtc.toLocalDateUtc()).days <= 14 + Days.daysBetween(it.rawCertificate.vaccination.vaccinatedOn, nowUtc.toLocalDateUtc()).days <= 14 } - .maxByOrNull { it.rawCertificate.vaccination.vaccinatedAt } + .maxByOrNull { it.rawCertificate.vaccination.vaccinatedOn } /** * 6 @@ -116,7 +116,7 @@ private fun Collection<CwaCovidCertificate>.rule5findTooRecentFinalShot( */ private fun Collection<CwaCovidCertificate>.rule6findOtherVaccinations(): CwaCovidCertificate? = this .filterIsInstance<VaccinationCertificate>() - .maxByOrNull { it.rawCertificate.vaccination.vaccinatedAt } + .maxByOrNull { it.rawCertificate.vaccination.vaccinatedOn } /** * 7 diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/CwaUserCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/CwaUserCard.kt index 2586d6d79961ae5a40872c44b74054589aad945c..cfe26a3967e69aaf70ea7bddf4eea0d913bcfdb9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/CwaUserCard.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/CwaUserCard.kt @@ -5,7 +5,6 @@ import de.rki.coronawarnapp.R import de.rki.coronawarnapp.covidcertificate.person.core.PersonCertificates import de.rki.coronawarnapp.covidcertificate.person.ui.details.PersonDetailsAdapter import de.rki.coronawarnapp.databinding.CwaUserCardItemBinding -import de.rki.coronawarnapp.util.TimeAndDateExtensions.toDayFormat import de.rki.coronawarnapp.util.lists.diffutil.HasPayloadDiffer class CwaUserCard(parent: ViewGroup) : @@ -25,9 +24,9 @@ class CwaUserCard(parent: ViewGroup) : val certificate = curItem.personCertificates.highestPriorityCertificate curItem.apply { userName.text = certificate.fullName - birthDate.text = context.getString( + dateOfBirth.text = context.getString( R.string.person_details_cwa_user_birthdate, - certificate.dateOfBirth.toDayFormat() + certificate.dateOfBirthFormatted ) cwaUserSwitch.isChecked = curItem.personCertificates.isCwaUser cwaUserSwitch.setOnCheckedChangeListener { _, isChecked -> onSwitch(isChecked) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/PersonDetailsQrCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/PersonDetailsQrCard.kt index 5b153148bf1e028a83ba1a0e186381cf8fa89986..8a9ea58e08d68036b7526ae2aa2f3f9c1a6cd8d8 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/PersonDetailsQrCard.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/PersonDetailsQrCard.kt @@ -47,7 +47,7 @@ class PersonDetailsQrCard(parent: ViewGroup) : qrTitle.text = context.getString(R.string.vaccination_details_subtitle) qrSubtitle.text = context.getString( R.string.vaccination_certificate_vaccinated_on, - certificate.vaccinatedAt.toShortDayFormat() + certificate.vaccinatedOn.toShortDayFormat() ) } is RecoveryCertificate -> { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt index e8b3d6bb0bcb887bb6e88e7bce258ba207456064..2aa22071c84677c2aa50004ff7f060efae9f193b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt @@ -37,7 +37,7 @@ class VaccinationCertificateCard(parent: ViewGroup) : ) certificateDate.text = context.getString( R.string.vaccination_certificate_vaccinated_on, - certificate.vaccinatedAt.toShortDayFormat() + certificate.vaccinatedOn.toShortDayFormat() ) currentCertificate.isVisible = curItem.isCurrentCertificate val icon = when { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/RecoveryCertificate.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/RecoveryCertificate.kt index e47e5d6df808dbbb3344f602cf5333a18625e43d..1745c91a8b5766513291ee57f243f7429bb65a8d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/RecoveryCertificate.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/RecoveryCertificate.kt @@ -7,7 +7,10 @@ import org.joda.time.LocalDate interface RecoveryCertificate : CwaCovidCertificate { override val containerId: RecoveryCertificateContainerId - val testedPositiveOn: LocalDate + val testedPositiveOnFormatted: String + val validFromFormatted: String + val validUntilFormatted: String + val validFrom: LocalDate val validUntil: LocalDate diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/storage/RecoveryCertificateContainer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/storage/RecoveryCertificateContainer.kt index 6bec0fa62b56c9250b7d0385ea8bba687e237931..11a82d4ca809ad8d8e337454b79f4cbee3c5bd6c 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/storage/RecoveryCertificateContainer.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/storage/RecoveryCertificateContainer.kt @@ -62,16 +62,22 @@ data class RecoveryCertificateContainer( override val fullName: String get() = certificate.nameData.fullName - override val dateOfBirth: LocalDate - get() = certificate.dateOfBirth + override val dateOfBirthFormatted: String + get() = certificate.dateOfBirthFormatted - override val testedPositiveOn: LocalDate - get() = recoveryCertificate.testedPositiveOn - override val validFrom: LocalDate - get() = recoveryCertificate.validFrom + override val testedPositiveOnFormatted: String + get() = recoveryCertificate.testedPositiveOnFormatted + + override val validUntilFormatted: String + get() = recoveryCertificate.validUntilFormatted override val validUntil: LocalDate get() = recoveryCertificate.validUntil + override val validFromFormatted: String + get() = recoveryCertificate.validFromFormatted + override val validFrom: LocalDate + get() = recoveryCertificate.validFrom + override val certificateIssuer: String get() = header.issuer override val certificateCountry: String diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt index 91aa04767cda6fa7665a12d723c608b340debbfc..47004fe8c4de0d88b263c42b6fb8999fca37cd3f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt @@ -25,6 +25,7 @@ interface TestCertificate : CwaCovidCertificate { */ val testNameAndManufacturer: String? val sampleCollectedAt: Instant + val sampleCollectedAtFormatted: String val testCenter: String? val registeredAt: Instant val isUpdatingData: Boolean diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt index c58017f612adf4537fa27997fc4a9593ca3b7951..7302fae2278571d6a8b63ff13173359200c3a343 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt @@ -14,7 +14,6 @@ import de.rki.coronawarnapp.covidcertificate.test.core.storage.types.GenericTest import de.rki.coronawarnapp.covidcertificate.test.core.storage.types.RetrievedTestCertificate import de.rki.coronawarnapp.covidcertificate.valueset.valuesets.TestCertificateValueSets import org.joda.time.Instant -import org.joda.time.LocalDate import java.util.Locale data class TestCertificateContainer( @@ -89,8 +88,8 @@ data class TestCertificateContainer( override val fullName: String get() = certificate.nameData.fullName - override val dateOfBirth: LocalDate - get() = certificate.dateOfBirth + override val dateOfBirthFormatted: String + get() = certificate.dateOfBirthFormatted override val targetName: String get() = valueSet?.getDisplayText(testCertificate.targetId) ?: testCertificate.targetId @@ -101,9 +100,11 @@ data class TestCertificateContainer( override val testName: String? get() = testCertificate.testName?.let { valueSet?.getDisplayText(it) ?: it } override val testNameAndManufacturer: String? - get() = testCertificate.testNameAndManufactor?.let { valueSet?.getDisplayText(it) ?: it } + get() = testCertificate.testNameAndManufacturer?.let { valueSet?.getDisplayText(it) ?: it } override val sampleCollectedAt: Instant get() = testCertificate.sampleCollectedAt + override val sampleCollectedAtFormatted: String + get() = testCertificate.sampleCollectedAtFormatted override val testCenter: String? get() = testCertificate.testCenter diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/TestCertificateDetailsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/TestCertificateDetailsFragment.kt index d6c6f7ef5f3648c44c37ac17d36f59a0a039d445..fc3547f9cd1595045ab0ce3bb0a649143f54cbbc 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/TestCertificateDetailsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/TestCertificateDetailsFragment.kt @@ -18,10 +18,6 @@ import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificate import de.rki.coronawarnapp.databinding.FragmentTestCertificateDetailsBinding import de.rki.coronawarnapp.ui.qrcode.fullscreen.QrCodeFullScreenFragmentArgs import de.rki.coronawarnapp.ui.view.onOffsetChange -import de.rki.coronawarnapp.util.TimeAndDateExtensions.toDayFormat -import de.rki.coronawarnapp.util.TimeAndDateExtensions.toHyphenSeparatedDate -import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortTimeFormat -import de.rki.coronawarnapp.util.TimeAndDateExtensions.toUserTimeZone import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.ui.popBackStack import de.rki.coronawarnapp.util.ui.viewBinding @@ -63,17 +59,13 @@ class TestCertificateDetailsFragment : Fragment(R.layout.fragment_test_certifica private fun FragmentTestCertificateDetailsBinding.onCertificateReady( testCertificate: TestCertificate ) { - val testDateTime = testCertificate.sampleCollectedAt.toUserTimeZone() - - name.text = testCertificate.run { "$lastName, $firstName" } - birthDate.text = testCertificate.dateOfBirth.toHyphenSeparatedDate() + name.text = testCertificate.fullName + dateOfBirth.text = testCertificate.dateOfBirthFormatted diseaseType.text = testCertificate.targetName testType.text = testCertificate.testType testName.text = testCertificate.testName - testDate.text = "%s %s".format( - testDateTime.toDayFormat(), - testDateTime.toShortTimeFormat() - ) + testManufacturer.text = testCertificate.testNameAndManufacturer + testDate.text = testCertificate.sampleCollectedAtFormatted testResult.text = testCertificate.testResult certificateCountry.text = testCertificate.certificateCountry certificateIssuer.text = testCertificate.certificateIssuer diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt index 3335f2ccb82f8fe3b767a4107fd39cf4a4f8d20b..f1b25d49ff1df25a0d3a77403411f812c51a808a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt @@ -8,7 +8,6 @@ import de.rki.coronawarnapp.covidcertificate.valueset.valuesets.VaccinationValue import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalDateUtc import org.joda.time.Duration import org.joda.time.Instant -import org.joda.time.LocalDate data class VaccinatedPerson( internal val data: VaccinatedPersonData, @@ -36,11 +35,11 @@ data class VaccinatedPerson( val fullName: String get() = vaccinationCertificates.first().fullName - val dateOfBirth: LocalDate - get() = vaccinationCertificates.first().dateOfBirth + val dateOfBirthFormatted: String + get() = vaccinationCertificates.first().dateOfBirthFormatted val getMostRecentVaccinationCertificate: VaccinationCertificate - get() = vaccinationCertificates.maxByOrNull { it.vaccinatedAt } ?: throw IllegalStateException( + get() = vaccinationCertificates.maxByOrNull { it.vaccinatedOnFormatted } ?: throw IllegalStateException( "Every Vaccinated Person needs to have at least one vaccinationCertificate" ) @@ -56,10 +55,12 @@ data class VaccinatedPerson( fun getTimeUntilImmunity(nowUTC: Instant = Instant.now()): Duration? { val newestFullDose = vaccinationCertificates .filter { it.doseNumber == it.totalSeriesOfDoses } - .maxByOrNull { it.vaccinatedAt } + .maxByOrNull { it.vaccinatedOn } ?: return null - val immunityAt = newestFullDose.vaccinatedAt.toDateTimeAtStartOfDay().plus(IMMUNITY_WAITING_PERIOD) + val immunityAt = newestFullDose.vaccinatedOn + .toDateTimeAtStartOfDay() + .plus(IMMUNITY_WAITING_PERIOD) return Duration(nowUTC.toLocalDateUtc().toDateTimeAtStartOfDay(), immunityAt) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt index 39ae0f2a9cb3336b99842d031b48e30c4030a9e1..7b98c818fe17afe6be87af711b072fed82d336b5 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt @@ -8,7 +8,8 @@ import org.joda.time.LocalDate interface VaccinationCertificate : CwaCovidCertificate { override val containerId: VaccinationCertificateContainerId - val vaccinatedAt: LocalDate + val vaccinatedOn: LocalDate + val vaccinatedOnFormatted: String val targetDisease: String val vaccineTypeName: String val vaccineManufacturer: String diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainer.kt index d2b5ba3b351eb50268dd56b84c497bae424b29d9..c33cc3da9416c48129d954a1b9ad6f80ef22db20 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainer.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainer.kt @@ -84,11 +84,13 @@ data class VaccinationContainer internal constructor( override val fullName: String get() = certificate.nameData.fullName - override val dateOfBirth: LocalDate - get() = certificate.dateOfBirth + override val dateOfBirthFormatted: String + get() = certificate.dateOfBirthFormatted - override val vaccinatedAt: LocalDate - get() = vaccination.vaccinatedAt + override val vaccinatedOn: LocalDate + get() = vaccination.vaccinatedOn + override val vaccinatedOnFormatted: String + get() = vaccination.vaccinatedOnFormatted override val targetDisease: String get() = valueSet?.getDisplayText(vaccination.targetId) ?: vaccination.targetId diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragment.kt index e43f3bb535ee895d8c41b14f665ddd7c61d1ba75..8824a33845ac253d11b611c90c51672f96fc3060 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragment.kt @@ -16,7 +16,6 @@ import de.rki.coronawarnapp.covidcertificate.vaccination.core.VaccinationCertifi import de.rki.coronawarnapp.databinding.FragmentVaccinationDetailsBinding import de.rki.coronawarnapp.ui.qrcode.fullscreen.QrCodeFullScreenFragmentArgs import de.rki.coronawarnapp.ui.view.onOffsetChange -import de.rki.coronawarnapp.util.TimeAndDateExtensions.toHyphenSeparatedDate import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.ui.popBackStack import de.rki.coronawarnapp.util.ui.viewBinding @@ -111,7 +110,7 @@ class VaccinationDetailsFragment : Fragment(R.layout.fragment_vaccination_detail certificate: VaccinationCertificate ) { fullname.text = certificate.fullName - dateOfBirth.text = certificate.dateOfBirth.toHyphenSeparatedDate() + dateOfBirth.text = certificate.dateOfBirthFormatted medialProductName.text = certificate.medicalProductName vaccineTypeName.text = certificate.vaccineTypeName targetDisease.text = certificate.targetDisease @@ -121,7 +120,7 @@ class VaccinationDetailsFragment : Fragment(R.layout.fragment_vaccination_detail certificate.doseNumber, certificate.totalSeriesOfDoses ) - vaccinatedAt.text = certificate.vaccinatedAt.toHyphenSeparatedDate() + vaccinatedAt.text = certificate.vaccinatedOnFormatted certificateCountry.text = certificate.certificateCountry certificateIssuer.text = certificate.certificateIssuer certificateId.text = certificate.certificateId diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/TimeAndDateExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/TimeAndDateExtensions.kt index f36aa29239360c9db6ff90613ce1c76f9cda1913..2ce3d7560b64fdce1e9c1badd3ea5d5f965ded7f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/TimeAndDateExtensions.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/TimeAndDateExtensions.kt @@ -155,11 +155,6 @@ object TimeAndDateExtensions { * Returns a readable date String with the format "dd.MM.yy" like 23.05.89 of an LocalDate */ fun LocalDate.toShortDayFormat(): String = toString(dayFormatter2DigitYear) - - /** - * Returns a readable date String with the format "yyy.MM.dd" like 1983-05-23 of an LocalDate - */ - fun LocalDate.toHyphenSeparatedDate(): String = toString(dateFormatterWithHyphenSeparator) } typealias HourInterval = Long diff --git a/Corona-Warn-App/src/main/res/layout/cwa_user_card_item.xml b/Corona-Warn-App/src/main/res/layout/cwa_user_card_item.xml index c58f96137ac6e57cfb3b61abaccd7eed500b62f6..70d7eaed7f637ecd9a4b7a3bf3eb5bcc1243f2b2 100644 --- a/Corona-Warn-App/src/main/res/layout/cwa_user_card_item.xml +++ b/Corona-Warn-App/src/main/res/layout/cwa_user_card_item.xml @@ -23,7 +23,7 @@ tools:text="Andrea Schneider" /> <TextView - android:id="@+id/birth_date" + android:id="@+id/date_of_birth" android:layout_width="0dp" android:layout_height="wrap_content" android:text="@string/person_details_cwa_user_birthdate" @@ -47,7 +47,7 @@ android:layout_marginTop="@dimen/spacing_tiny" android:text="@string/person_details_cwa_user_description" android:textSize="14sp" - app:layout_constraintStart_toStartOf="@id/birth_date" - app:layout_constraintTop_toBottomOf="@id/birth_date" /> + app:layout_constraintStart_toStartOf="@id/date_of_birth" + app:layout_constraintTop_toBottomOf="@id/date_of_birth" /> </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_test_certificate_details.xml b/Corona-Warn-App/src/main/res/layout/fragment_test_certificate_details.xml index 33ee479ce01ba63221fafcdea6b5792a6f3646ff..990c83c47198c6f6f59cf49b8659586d247b7266 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_test_certificate_details.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_test_certificate_details.xml @@ -155,7 +155,7 @@ android:text="@string/covid_certificate_attribute_date_of_birth" /> <TextView - android:id="@+id/birth_date" + android:id="@+id/date_of_birth" style="@style/body1" android:layout_width="match_parent" android:layout_height="wrap_content" @@ -325,4 +325,4 @@ </androidx.core.widget.NestedScrollView> -</androidx.coordinatorlayout.widget.CoordinatorLayout> \ No newline at end of file +</androidx.coordinatorlayout.widget.CoordinatorLayout> diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensorTest.kt index 4f6210b460b44d961778dbd94e736f717dbcd91b..b55c776e22798c341697a21f51ed347df5dab451 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensorTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensorTest.kt @@ -8,7 +8,6 @@ import io.kotest.matchers.shouldBe import io.mockk.MockKAnnotations import io.mockk.mockk import kotlinx.coroutines.test.runBlockingTest -import org.joda.time.LocalDate import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -28,7 +27,7 @@ internal class DccQrCodeCensorTest { givenName = "Bob", givenNameStandardized = "BOB" ), - dateOfBirth = LocalDate.parse("1969-11-16"), + dateOfBirthFormatted = "1969-11-16", vaccination = DccV1.VaccinationData( targetId = "12345", vaccineId = "1214765", @@ -42,7 +41,7 @@ internal class DccQrCodeCensorTest { uniqueCertificateIdentifier = "urn:uvci:01:NL:PlA8UWS60Z4RZXVALl6GAZ" ), personIdentifier = CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("1969-11-16"), + dateOfBirthFormatted = "1969-11-16", lastNameStandardized = "KEVIN", firstNameStandardized = "BOB" ) @@ -82,7 +81,7 @@ internal class DccQrCodeCensorTest { .compile()!!.censored shouldBe "Hello my name is nameData/familyName nameData/givenName, i was born at " + "covidCertificate/dateOfBirth, i have been vaccinated with: vaccinationData/targetId " + "vaccinationData/vaccineId vaccinationData/medicalProductId" + - " vaccinationData/marketAuthorizationHolderId vaccinationData/vaccinatedAt" + + " vaccinationData/marketAuthorizationHolderId vaccinationData/vaccinatedOnFormatted" + " vaccinationData/certificateCountry vaccinationData/certificateIssuer" + " vaccinationData/uniqueCertificateIdentifier" } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/CertificatePersonIdentifierTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/CertificatePersonIdentifierTest.kt index 407c664a5d0905b0905c756db7a95341a4bab5ff..5eda4db0fb8a0512a8aaaf1310aaec83cc2017b0 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/CertificatePersonIdentifierTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/CertificatePersonIdentifierTest.kt @@ -7,19 +7,18 @@ import de.rki.coronawarnapp.covidcertificate.common.exception.InvalidVaccination import io.kotest.assertions.throwables.shouldNotThrowAny import io.kotest.assertions.throwables.shouldThrow import io.kotest.matchers.shouldBe -import org.joda.time.LocalDate import org.junit.jupiter.api.Test import testhelpers.BaseTest class CertificatePersonIdentifierTest : BaseTest() { private val testPersonMaxData = CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("1966-11-11"), + dateOfBirthFormatted = "1966-11-11", firstNameStandardized = "ANDREAS", lastNameStandardized = "ASTRA<EINS" ) private val testPersonMin = CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("1900-01-01"), + dateOfBirthFormatted = "1900-01-01", lastNameStandardized = "#", firstNameStandardized = null ) @@ -40,7 +39,7 @@ class CertificatePersonIdentifierTest : BaseTest() { fun `person equality`() { val person1 = testPersonMaxData val person2 = CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("1966-11-11"), + dateOfBirthFormatted = "1966-11-11", firstNameStandardized = "ANDREAS", lastNameStandardized = "ASTRA<EINS" ) @@ -65,7 +64,7 @@ class CertificatePersonIdentifierTest : BaseTest() { }.errorCode shouldBe NAME_MISMATCH shouldThrow<InvalidVaccinationCertificateException> { - testPersonMaxData.requireMatch(testPersonMaxData.copy(dateOfBirth = LocalDate.parse("1900-12-31"))) + testPersonMaxData.requireMatch(testPersonMaxData.copy(dateOfBirthFormatted = "1900-12-31")) }.errorCode shouldBe DOB_MISMATCH } } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/DateFormattingTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/DateFormattingTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..f8763397b84a1adf3f5de1d5141870b1e16289d2 --- /dev/null +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/DateFormattingTest.kt @@ -0,0 +1,40 @@ +package de.rki.coronawarnapp.covidcertificate.common + +import de.rki.coronawarnapp.covidcertificate.common.certificate.formatDate +import de.rki.coronawarnapp.covidcertificate.common.certificate.formatDateTime +import io.kotest.matchers.shouldBe +import org.joda.time.DateTimeZone +import org.junit.jupiter.api.Test +import testhelpers.BaseTest + +class DateFormattingTest : BaseTest() { + + @Test + fun `format date of birth`() { + "1978-01-26T00:00:00".formatDate() shouldBe "1978-01-26" + "1964-08-12".formatDate() shouldBe "1964-08-12" + "1964-08".formatDate() shouldBe "1964-08" + "1964".formatDate() shouldBe "1964" + "".formatDate() shouldBe "" + "lorem-ipsum".formatDate() shouldBe "lorem-ipsum" + } + + @Test + fun `format date`() { + "1964-08-12".formatDate() shouldBe "1964-08-12" + "1978-01-26T00:00:00".formatDate() shouldBe "1978-01-26" + "2021-03-18T15:31:00+02:00".formatDate() shouldBe "2021-03-18" + "lorem-ipsum".formatDate() shouldBe "lorem-ipsum" + } + + @Test + fun `format date time`() { + val tz = DateTimeZone.forID("Europe/Berlin") + "2021-08-20T10:03:12Z".formatDateTime(tz) shouldBe "2021-08-20 12:03 GMT +02" + "2021-08-20T12:03:12+02".formatDateTime(tz) shouldBe "2021-08-20 12:03 GMT +02" + "2021-08-20T12:03:12+0200".formatDateTime(tz) shouldBe "2021-08-20 12:03 GMT +02" + "2021-08-20T12:03:12+02:00".formatDateTime(tz) shouldBe "2021-08-20 12:03 GMT +02" + "2021-08-20T09:03:12Z".formatDateTime(DateTimeZone.forID("HST")) shouldBe "2021-08-19 23:03 GMT -10" + "lorem-ipsum".formatDateTime() shouldBe "lorem-ipsum" + } +} diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesStorageTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesStorageTest.kt index cb36b151c5212d10f10a31317f7626232f67450d..142fb17dd6c203b407bc896a7dbcb82acd274319 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesStorageTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesStorageTest.kt @@ -8,7 +8,6 @@ import io.kotest.matchers.shouldBe import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.impl.annotations.MockK -import org.joda.time.LocalDate import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import testhelpers.BaseTest @@ -56,7 +55,7 @@ class PersonCertificatesStorageTest : BaseTest() { val testIdentifier = CertificatePersonIdentifier( firstNameStandardized = "firstname", lastNameStandardized = "lastname", - dateOfBirth = LocalDate.parse("1999-12-24") + dateOfBirthFormatted = "1999-12-24" ) createInstance().apply { diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModelTest.kt index a1337657922234ea74c2810d4834ed07d91af629..e05b1a76a4b88d165fd6bdd73afe3f37e785da94 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModelTest.kt @@ -35,8 +35,6 @@ import io.mockk.just import io.mockk.mockk import kotlinx.coroutines.flow.flowOf import org.joda.time.Instant -import org.joda.time.LocalDate -import org.joda.time.format.DateTimeFormat import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @@ -112,7 +110,7 @@ class PersonDetailsViewModelTest : BaseTest() { every { getVaccinationStatus(any()) } returns VaccinatedPerson.Status.IMMUNITY } every { vaccinationRepository.vaccinationInfos } returns flowOf(setOf(vaccinatedPerson)) - personDetailsViewModel("b32983bc6be9a6f31055c7aa34f2767c34a1e99940016e91e35acfdc9bbb7e51") + personDetailsViewModel(certificatePersonIdentifier.codeSHA256) .apply { uiState.getOrAwaitValue().apply { get(0) as PersonDetailsQrCard.Item @@ -164,7 +162,7 @@ class PersonDetailsViewModelTest : BaseTest() { } every { containerId } returns tcsContainerId every { testType } returns "PCR-Test" - every { dateOfBirth } returns LocalDate.parse("18.04.1943", DateTimeFormat.forPattern("dd.MM.yyyy")) + every { dateOfBirthFormatted } returns "18.04.1943" every { sampleCollectedAt } returns Instant.parse("2021-05-31T11:35:00.000Z") every { registeredAt } returns Instant.parse("2021-05-21T11:35:00.000Z") every { personIdentifier } returns certificatePersonIdentifier @@ -179,11 +177,11 @@ class PersonDetailsViewModelTest : BaseTest() { every { vaccination } returns mockk<DccV1.VaccinationData>().apply { every { doseNumber } returns number every { totalSeriesOfDoses } returns 2 - every { vaccinatedAt } returns localDate + every { vaccinatedOn } returns localDate } } every { containerId } returns vcContainerId - every { vaccinatedAt } returns localDate + every { vaccinatedOn } returns localDate every { personIdentifier } returns certificatePersonIdentifier every { doseNumber } returns number every { totalSeriesOfDoses } returns 2 @@ -201,7 +199,7 @@ class PersonDetailsViewModelTest : BaseTest() { } private val certificatePersonIdentifier = CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("01.01.2020", DateTimeFormat.forPattern("dd.MM.yyyy")), + dateOfBirthFormatted = "01.01.2020", firstNameStandardized = "firstNameStandardized", lastNameStandardized = "lastNameStandardized", ) diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonCertificatesData.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonCertificatesData.kt index 7725b08c8ae95ff86fa4d6261f36bafaebda346d..97ecd232284d8d7a1dc0f980c0a4894d5dc460b3 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonCertificatesData.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonCertificatesData.kt @@ -8,7 +8,6 @@ import de.rki.coronawarnapp.covidcertificate.person.core.PersonCertificates import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificate import io.mockk.mockk import org.joda.time.Instant -import org.joda.time.LocalDate import java.util.UUID object PersonCertificatesData { @@ -54,6 +53,7 @@ fun testCertificate( override val testName: String = "testName" override val testNameAndManufacturer: String = "testNameAndManufacturer" override val sampleCollectedAt: Instant = Instant.EPOCH + override val sampleCollectedAtFormatted: String = "" override val testCenter: String = "" override val registeredAt: Instant = Instant.EPOCH override val isUpdatingData: Boolean = isUpdating @@ -65,9 +65,9 @@ fun testCertificate( override val firstName: String = "firstName" override val lastName: String = "lastName" override val fullName: String = fullName - override val dateOfBirth: LocalDate = LocalDate.now() + override val dateOfBirthFormatted = "1981-03-20" override val personIdentifier = CertificatePersonIdentifier( - dateOfBirth = LocalDate(System.currentTimeMillis()), + dateOfBirthFormatted = "1981-03-20", lastNameStandardized = "lastNameStandardized", firstNameStandardized = "firstNameStandardized" ) diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateDccParserTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateDccParserTest.kt index 128df76535cfd9dee18634df2556b31c39073e91..c60580c210e72a1e5892706da6549c707dee8c99 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateDccParserTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateDccParserTest.kt @@ -6,7 +6,6 @@ import de.rki.coronawarnapp.covidcertificate.common.certificate.DccV1Parser import de.rki.coronawarnapp.covidcertificate.test.TestData import io.kotest.matchers.shouldBe import okio.ByteString.Companion.decodeHex -import org.joda.time.LocalDate import org.junit.jupiter.api.Test class TestCertificateDccParserTest { @@ -25,7 +24,7 @@ class TestCertificateDccParserTest { givenNameStandardized shouldBe "GABRIELE" } dob shouldBe "1998-02-26" - dateOfBirth shouldBe LocalDate.parse("1998-02-26") + dateOfBirthFormatted shouldBe "1998-02-26" version shouldBe "1.2.1" with(tests!!.single()) { @@ -36,7 +35,7 @@ class TestCertificateDccParserTest { sampleCollectedAt shouldBe org.joda.time.Instant.parse("2021-02-20T12:34:56+00:00") testType shouldBe "LP217198-3" testCenter shouldBe "Testing center Vienna 1" - testNameAndManufactor shouldBe "1232" + testNameAndManufacturer shouldBe "1232" testResult shouldBe "260415000" } } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateQRCodeExtractorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateQRCodeExtractorTest.kt index c9ee9ee0acd0d3e9c1f231a06fd8e153536bb1fe..1a0906ebfce13d5e91eedd98dc215dba52a03c25 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateQRCodeExtractorTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateQRCodeExtractorTest.kt @@ -14,7 +14,6 @@ import io.kotest.assertions.throwables.shouldThrow import io.kotest.matchers.shouldBe import okio.ByteString.Companion.decodeBase64 import org.joda.time.Instant -import org.joda.time.LocalDate import org.junit.jupiter.api.Test import testhelpers.BaseTest @@ -40,7 +39,7 @@ class TestCertificateQRCodeExtractorTest : BaseTest() { givenName shouldBe "Gabriele" givenNameStandardized shouldBe "GABRIELE" } - dateOfBirth shouldBe LocalDate.parse("1998-02-26") + dateOfBirthFormatted shouldBe "1998-02-26" version shouldBe "1.2.1" with(test) { @@ -51,7 +50,7 @@ class TestCertificateQRCodeExtractorTest : BaseTest() { sampleCollectedAt shouldBe Instant.parse("2021-02-20T12:34:56+00:00") testType shouldBe "LP217198-3" testCenter shouldBe "Testing center Vienna 1" - testNameAndManufactor shouldBe "1232" + testNameAndManufacturer shouldBe "1232" testResult shouldBe "260415000" } } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationTestData.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationTestData.kt index 4811bef61e55a7120c4ea7abc756b354940f600c..d0c2bd8391d792bcd0c6ca785072c7ea1aca26a7 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationTestData.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationTestData.kt @@ -10,7 +10,6 @@ import de.rki.coronawarnapp.covidcertificate.vaccination.core.qrcode.Vaccination import de.rki.coronawarnapp.covidcertificate.vaccination.core.repository.storage.VaccinatedPersonData import de.rki.coronawarnapp.covidcertificate.vaccination.core.repository.storage.VaccinationContainer import org.joda.time.Instant -import org.joda.time.LocalDate import javax.inject.Inject @Suppress("MaxLineLength") @@ -30,7 +29,7 @@ class VaccinationTestData @Inject constructor( familyName = "Astrá Eins", familyNameStandardized = "ASTRA<EINS", ), - dateOfBirth = LocalDate.parse("1966-11-11"), + dateOfBirthFormatted = "1966-11-11", vaccination = DccV1.VaccinationData( targetId = "840539006", @@ -45,7 +44,7 @@ class VaccinationTestData @Inject constructor( uniqueCertificateIdentifier = "01DE/00001/1119305005/7T1UG87G61Y7NRXIBQJDTYQ9#S", ), personIdentifier = CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("1966-11-11"), + dateOfBirthFormatted = "1966-11-11", lastNameStandardized = "ASTRA<EINS", firstNameStandardized = "ANDREAS" ) @@ -86,7 +85,7 @@ class VaccinationTestData @Inject constructor( familyName = "Astrá Eins", familyNameStandardized = "ASTRA<EINS", ), - dateOfBirth = LocalDate.parse("1966-11-11"), + dateOfBirthFormatted = "1966-11-11", vaccination = DccV1.VaccinationData( targetId = "840539006", vaccineId = "1119305005", @@ -100,7 +99,7 @@ class VaccinationTestData @Inject constructor( uniqueCertificateIdentifier = "01DE/00001/1119305005/6IPYBAIDWEWRWW73QEP92FQSN#S", ), personIdentifier = CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("1966-11-11"), + dateOfBirthFormatted = "1966-11-11", lastNameStandardized = "ASTRA<EINS", firstNameStandardized = "ANDREAS" ) @@ -145,7 +144,7 @@ class VaccinationTestData @Inject constructor( familyName = "Johnson Gültig", familyNameStandardized = "JOHNSON<GUELTIG", ), - dateOfBirth = LocalDate.parse("1966-11-11"), + dateOfBirthFormatted = "1966-11-11", vaccination = DccV1.VaccinationData( targetId = "840539006", vaccineId = "1119305005", @@ -159,7 +158,7 @@ class VaccinationTestData @Inject constructor( uniqueCertificateIdentifier = "01DE/00001/1119305005/3H24U2KVOTPCSINK7N64F2OB9#S", ), personIdentifier = CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("1966-11-11"), + dateOfBirthFormatted = "1966-11-11", lastNameStandardized = "JOHNSON<GUELTIG", firstNameStandardized = "BORIS" ) diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/qrcode/DccQrCodeExtractorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/qrcode/DccQrCodeExtractorTest.kt index fe132556f40f9e14103c9e7436c125ece5ba8580..1146c6b8dd8b33d05954c3814e6d49964f7d1e23 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/qrcode/DccQrCodeExtractorTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/qrcode/DccQrCodeExtractorTest.kt @@ -18,7 +18,6 @@ import de.rki.coronawarnapp.covidcertificate.vaccination.core.VaccinationTestDat import io.kotest.assertions.throwables.shouldThrow import io.kotest.matchers.shouldBe import org.joda.time.Instant -import org.joda.time.LocalDate import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import testhelpers.BaseTest @@ -64,7 +63,7 @@ class DccQrCodeExtractorTest : BaseTest() { givenName shouldBe "Gabriele" givenNameStandardized shouldBe "GABRIELE" } - dateOfBirth shouldBe LocalDate.parse("1998-02-26") + dateOfBirthFormatted shouldBe "1998-02-26" version shouldBe "1.0.0" with(vaccination) { @@ -78,7 +77,7 @@ class DccQrCodeExtractorTest : BaseTest() { totalSeriesOfDoses shouldBe 2 targetId shouldBe "840539006" vaccineId shouldBe "1119305005" - vaccinatedAt shouldBe LocalDate.parse("2021-02-18") + vaccinatedOnFormatted shouldBe "2021-02-18" } } } @@ -188,7 +187,7 @@ class DccQrCodeExtractorTest : BaseTest() { givenName shouldBe "СТÐМО ГЕОРГИЕВ" givenNameStandardized shouldBe "STAMO<GEORGIEV" } - dateOfBirth shouldBe LocalDate.parse("1978-01-26") + dateOfBirthFormatted shouldBe "1978-01-26" version shouldBe "1.0.0" vaccination.apply { @@ -202,7 +201,7 @@ class DccQrCodeExtractorTest : BaseTest() { totalSeriesOfDoses shouldBe 2 targetId shouldBe "840539006" vaccineId shouldBe "J07BX03" - vaccinatedAt shouldBe LocalDate.parse("2021-03-09") + vaccinatedOnFormatted shouldBe "2021-03-09" } } } @@ -250,8 +249,8 @@ class DccQrCodeExtractorTest : BaseTest() { mode = Mode.CERT_VAC_STRICT ).apply { this as VaccinationCertificateQRCode - data.certificate.dateOfBirth shouldBe LocalDate.parse("1964-08-12") - data.certificate.vaccination.vaccinatedAt shouldBe LocalDate.parse("2021-05-29") + data.certificate.dateOfBirthFormatted shouldBe "1964-08-12" + data.certificate.vaccination.vaccinatedOnFormatted shouldBe "2021-05-29" } } @@ -262,8 +261,8 @@ class DccQrCodeExtractorTest : BaseTest() { mode = Mode.CERT_VAC_STRICT ).apply { this as VaccinationCertificateQRCode - data.certificate.dateOfBirth shouldBe LocalDate.parse("1978-01-26") - data.certificate.vaccination.vaccinatedAt shouldBe LocalDate.parse("2021-03-09") + data.certificate.dateOfBirthFormatted shouldBe "1978-01-26" + data.certificate.vaccination.vaccinatedOnFormatted shouldBe "2021-03-09" } } @@ -274,8 +273,8 @@ class DccQrCodeExtractorTest : BaseTest() { mode = Mode.CERT_VAC_STRICT ).apply { this as VaccinationCertificateQRCode - data.certificate.dateOfBirth shouldBe LocalDate.parse("1958-11-11") - data.certificate.vaccination.vaccinatedAt shouldBe LocalDate.parse("2021-03-18") + data.certificate.dateOfBirthFormatted shouldBe "1958-11-11" + data.certificate.vaccination.vaccinatedOnFormatted shouldBe "2021-03-18" } } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainerTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainerTest.kt index 486398e3058b94168f26ebb6907bc7920b2c1ab9..6a91fe0132ae1b758026d464744e5378d6cb9e71 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainerTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainerTest.kt @@ -14,7 +14,6 @@ import io.mockk.every import io.mockk.mockk import io.mockk.verify import org.joda.time.Instant -import org.joda.time.LocalDate import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import testhelpers.BaseTest @@ -33,7 +32,7 @@ class VaccinationContainerTest : BaseTest() { @Test fun `person identifier calculation`() { testData.personAVac1Container.personIdentifier shouldBe CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("1966-11-11"), + dateOfBirthFormatted = "1966-11-11", firstNameStandardized = "ANDREAS", lastNameStandardized = "ASTRA<EINS" ) @@ -70,8 +69,8 @@ class VaccinationContainerTest : BaseTest() { firstName shouldBe "Andreas" lastName shouldBe "Astrá Eins" fullName shouldBe "Andreas Astrá Eins" - dateOfBirth shouldBe LocalDate.parse("1966-11-11") - vaccinatedAt shouldBe LocalDate.parse("2021-03-01") + dateOfBirthFormatted shouldBe "1966-11-11" + vaccinatedOnFormatted shouldBe "2021-03-01" vaccineTypeName shouldBe "1119305005" vaccineManufacturer shouldBe "ORG-100001699" medicalProductName shouldBe "EU/1/21/1529" @@ -81,7 +80,7 @@ class VaccinationContainerTest : BaseTest() { certificateCountry shouldBe "Deutschland" certificateId shouldBe "01DE/00001/1119305005/7T1UG87G61Y7NRXIBQJDTYQ9#S" personIdentifier shouldBe CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("1966-11-11"), + dateOfBirthFormatted = "1966-11-11", firstNameStandardized = "ANDREAS", lastNameStandardized = "ASTRA<EINS" ) @@ -117,8 +116,8 @@ class VaccinationContainerTest : BaseTest() { firstName shouldBe "Andreas" lastName shouldBe "Astrá Eins" fullName shouldBe "Andreas Astrá Eins" - dateOfBirth shouldBe LocalDate.parse("1966-11-11") - vaccinatedAt shouldBe LocalDate.parse("2021-03-01") + dateOfBirthFormatted shouldBe "1966-11-11" + vaccinatedOnFormatted shouldBe "2021-03-01" vaccineTypeName shouldBe "Vaccine-Name" vaccineManufacturer shouldBe "Manufactorer-Name" medicalProductName shouldBe "MedicalProduct-Name" @@ -128,7 +127,7 @@ class VaccinationContainerTest : BaseTest() { certificateCountry shouldBe "Deutschland" certificateId shouldBe "01DE/00001/1119305005/7T1UG87G61Y7NRXIBQJDTYQ9#S" personIdentifier shouldBe CertificatePersonIdentifier( - dateOfBirth = LocalDate.parse("1966-11-11"), + dateOfBirthFormatted = "1966-11-11", firstNameStandardized = "ANDREAS", lastNameStandardized = "ASTRA<EINS" )