From 30b2ee46d4952549f7c93041e263976e44640550 Mon Sep 17 00:00:00 2001 From: Juraj Kusnier <jurajkusnier@users.noreply.github.com> Date: Wed, 16 Jun 2021 13:28:18 +0200 Subject: [PATCH] Fix Test Certificate with wrong timestamp (EXPOSUREAPP-7822) (#3451) * update displayed time * fix tests * some updates Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com> Co-authored-by: Mohamed Metwalli <mohamed.metwalli@sap.com> --- .../test/ui/CertificatesFragmentTest.kt | 2 +- .../test/ui/CertificatesViewModel.kt | 7 +++++-- .../test/ui/cards/CovidCertificateTestItem.kt | 4 ++-- .../test/ui/cards/CovidTestCertificateCard.kt | 10 +++++----- .../ui/cards/CovidTestCertificateErrorCard.kt | 11 +++++------ .../negative/RATResultNegativeFragment.kt | 15 +++++---------- .../coronawarnapp/util/TimeAndDateExtensions.kt | 12 +++++++++++- 7 files changed, 34 insertions(+), 27 deletions(-) diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragmentTest.kt index c36cb2461..fe3e86f60 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragmentTest.kt @@ -41,7 +41,7 @@ class CertificatesFragmentTest : BaseUITest() { @MockK lateinit var vaccinatedPerson: VaccinatedPerson private val formatter = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm") - private val testDate = DateTime.parse("12.05.2021 19:00", formatter).toInstant() + private val testDate = DateTime.parse("12.05.2021 19:00", formatter) @Before fun setup() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesViewModel.kt index 374c269b4..41ce50d90 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesViewModel.kt @@ -18,6 +18,7 @@ import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.HeaderInfoVacc import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.ImmuneVaccinationCard import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.NoCovidTestCertificatesCard import de.rki.coronawarnapp.covidcertificate.vaccination.ui.cards.VaccinationCard +import de.rki.coronawarnapp.util.TimeAndDateExtensions.toUserTimeZone import de.rki.coronawarnapp.util.ui.SingleLiveEvent import de.rki.coronawarnapp.util.viewmodel.CWAViewModel import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory @@ -96,9 +97,11 @@ class CertificatesViewModel @AssistedInject constructor( } private fun Collection<TestCertificateWrapper>.toCertificateItems(): List<CertificatesItem> = map { certificate -> + val localRegistrationTime = certificate.registeredAt.toUserTimeZone() + if (certificate.isCertificateRetrievalPending) { CovidTestCertificateErrorCard.Item( - testDate = certificate.registeredAt, + testDate = localRegistrationTime, isUpdatingData = certificate.isUpdatingData, onRetryAction = { refreshTestCertificate(certificate.identifier) @@ -113,7 +116,7 @@ class CertificatesViewModel @AssistedInject constructor( ) } else { CovidTestCertificateCard.Item( - testDate = certificate.registeredAt, + testDate = localRegistrationTime, testPerson = certificate.testCertificate?.firstName + " " + certificate.testCertificate?.lastName, diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidCertificateTestItem.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidCertificateTestItem.kt index bc27a92dd..a6c0d087e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidCertificateTestItem.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidCertificateTestItem.kt @@ -1,10 +1,10 @@ package de.rki.coronawarnapp.covidcertificate.test.ui.cards import de.rki.coronawarnapp.covidcertificate.test.ui.items.CertificatesItem -import org.joda.time.Instant +import org.joda.time.DateTime interface CovidCertificateTestItem : CertificatesItem { - val testDate: Instant + val testDate: DateTime override val stableId: Long get() = testDate.hashCode().toLong() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidTestCertificateCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidTestCertificateCard.kt index 791baaf5a..a5eb74819 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidTestCertificateCard.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidTestCertificateCard.kt @@ -4,10 +4,10 @@ import android.view.ViewGroup import de.rki.coronawarnapp.R import de.rki.coronawarnapp.covidcertificate.test.ui.CertificatesAdapter import de.rki.coronawarnapp.databinding.CovidTestSuccessCardBinding -import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortDayFormat +import de.rki.coronawarnapp.util.TimeAndDateExtensions.toDayFormat import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortTimeFormat import de.rki.coronawarnapp.util.lists.diffutil.HasPayloadDiffer -import org.joda.time.Instant +import org.joda.time.DateTime class CovidTestCertificateCard(parent: ViewGroup) : CertificatesAdapter.CertificatesItemVH<CovidTestCertificateCard.Item, CovidTestSuccessCardBinding>( @@ -26,8 +26,8 @@ class CovidTestCertificateCard(parent: ViewGroup) : val curItem = payloads.filterIsInstance<Item>().singleOrNull() ?: item testTime.text = context.getString( R.string.test_certificate_time, - curItem.testDate.toShortDayFormat(), - curItem.testDate.toShortTimeFormat(), + item.testDate.toDayFormat(), + item.testDate.toShortTimeFormat() ) personName.text = curItem.testPerson @@ -36,7 +36,7 @@ class CovidTestCertificateCard(parent: ViewGroup) : } data class Item( - override val testDate: Instant, + override val testDate: DateTime, val testPerson: String, val onClickAction: (Item) -> Unit, ) : CovidCertificateTestItem, HasPayloadDiffer { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidTestCertificateErrorCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidTestCertificateErrorCard.kt index 3377a129f..13d0a6c9e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidTestCertificateErrorCard.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/cards/CovidTestCertificateErrorCard.kt @@ -6,17 +6,16 @@ import androidx.core.view.isInvisible import de.rki.coronawarnapp.R import de.rki.coronawarnapp.covidcertificate.test.ui.CertificatesAdapter import de.rki.coronawarnapp.databinding.CovidTestErrorCardBinding -import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortDayFormat +import de.rki.coronawarnapp.util.TimeAndDateExtensions.toDayFormat import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortTimeFormat import de.rki.coronawarnapp.util.lists.diffutil.HasPayloadDiffer -import org.joda.time.Instant +import org.joda.time.DateTime class CovidTestCertificateErrorCard(parent: ViewGroup) : CertificatesAdapter.CertificatesItemVH<CovidTestCertificateErrorCard.Item, CovidTestErrorCardBinding>( R.layout.home_card_container_layout, parent ) { - override val viewBinding = lazy { CovidTestErrorCardBinding.inflate(layoutInflater, itemView.findViewById(R.id.card_container), true) } @@ -28,8 +27,8 @@ class CovidTestCertificateErrorCard(parent: ViewGroup) : testTime.text = context.getString( R.string.test_certificate_time, - item.testDate.toShortDayFormat(), - item.testDate.toShortTimeFormat(), + item.testDate.toDayFormat(), + item.testDate.toShortTimeFormat() ) retryButton.setOnClickListener { @@ -53,7 +52,7 @@ class CovidTestCertificateErrorCard(parent: ViewGroup) : } data class Item( - override val testDate: Instant, + override val testDate: DateTime, val onRetryAction: (Item) -> Unit, val onDeleteAction: (Item) -> Unit, val isUpdatingData: Boolean, diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeFragment.kt index 3076ce098..c9c72866e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/ui/testresults/negative/RATResultNegativeFragment.kt @@ -10,13 +10,14 @@ import androidx.fragment.app.Fragment import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSubmissionAntigenTestResultNegativeBinding import de.rki.coronawarnapp.util.DialogHelper +import de.rki.coronawarnapp.util.TimeAndDateExtensions.toDayFormat +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 import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider import de.rki.coronawarnapp.util.viewmodel.cwaViewModels -import org.joda.time.format.DateTimeFormat import javax.inject.Inject class RATResultNegativeFragment : Fragment(R.layout.fragment_submission_antigen_test_result_negative), AutoInject { @@ -25,8 +26,6 @@ class RATResultNegativeFragment : Fragment(R.layout.fragment_submission_antigen_ private val binding: FragmentSubmissionAntigenTestResultNegativeBinding by viewBinding() - private val shortTime = DateTimeFormat.shortTime() - private val deleteRatTestConfirmationDialog by lazy { DialogHelper.DialogInstance( requireActivity(), @@ -76,7 +75,7 @@ class RATResultNegativeFragment : Fragment(R.layout.fragment_submission_antigen_ uiState.test.dateOfBirth?.let { val birthDate = getString( R.string.submission_test_result_antigen_patient_birth_date_placeholder, - it.toString(DATE_FORMAT) + it.toDayFormat() ) if (this.isNotBlank()) append(", ") append(birthDate) @@ -86,8 +85,8 @@ class RATResultNegativeFragment : Fragment(R.layout.fragment_submission_antigen_ val localTime = uiState.test.testTakenAt.toUserTimeZone() resultReceivedTimeAndDate.text = getString( R.string.coronatest_negative_antigen_result_time_date_placeholder, - localTime.toString(DATE_FORMAT), - localTime.toString(shortTime) + localTime.toDayFormat(), + localTime.toShortTimeFormat() ) val isAnonymousTest = with(uiState.test) { @@ -137,8 +136,4 @@ class RATResultNegativeFragment : Fragment(R.layout.fragment_submission_antigen_ } } } - - companion object { - private const val DATE_FORMAT = "dd.MM.yyyy" - } } 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 897f618ef..4efd78218 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 @@ -120,16 +120,26 @@ object TimeAndDateExtensions { */ fun LocalDate.toDayFormat(): String = toString(dayFormatter) + /** + * Returns a readable date String with the format "dd.MM.yyyy" like 23.05.1989 of a DateTime + */ + fun DateTime.toDayFormat(): String = toString(dayFormatter) + /** * Returns a readable time String with the format "hh:mm" like 12:00 of a LocalDate */ fun LocalDate.toShortTimeFormat(): String = toString(shortTime) /** - * Returns a readable time String with the format "hh:mm" like 12:00 of a LocalDate + * Returns a readable time String with the format "hh:mm" like 12:00 of a Instant */ fun Instant.toShortTimeFormat(): String = toString(shortTime) + /** + * Returns a readable time String with the format "hh:mm" like 12:00 of a DateTime + */ + fun DateTime.toShortTimeFormat(): String = toString(shortTime) + /** * Returns a readable date String with the format "dd.MM.yy" like 23.05.89 of an Instant */ -- GitLab