diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/CoronaTestResult.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/CoronaTestResult.kt index 0fdb395a62ec5d5ca519f8d009b3ee5b9f8514d2..09c931f12a74f13ca57de95b32e7eecf41136844 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/CoronaTestResult.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/CoronaTestResult.kt @@ -8,13 +8,15 @@ import org.json.JSONObject data class CoronaTestResultResponse( val coronaTestResult: CoronaTestResult, - val sampleCollectedAt: Instant? + val sampleCollectedAt: Instant?, + val labId: String? ) { companion object { fun fromResponse(response: VerificationApiV1.TestResultResponse) = CoronaTestResultResponse( coronaTestResult = CoronaTestResult.fromInt(response.testResult), - sampleCollectedAt = response.sampleCollectedAt?.toLong()?.let { Instant.ofEpochSecond(it) } + sampleCollectedAt = response.sampleCollectedAt?.toLong()?.let { Instant.ofEpochSecond(it) }, + labId = response.labId ) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/VerificationApiV1.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/VerificationApiV1.kt index 4f46627679001d32028ec1307cdb8a281e3cca00..b7c4efd790ac9045d3345a4d6e753ee6a98ce332 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/VerificationApiV1.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/server/VerificationApiV1.kt @@ -32,7 +32,8 @@ interface VerificationApiV1 { data class TestResultResponse( @SerializedName("testResult") val testResult: Int, - @SerializedName("sc") val sampleCollectedAt: Int? + @SerializedName("sc") val sampleCollectedAt: Int?, + @SerializedName("labId") val labId: String? ) @POST("version/v1/testresult") diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/CoronaTest.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/CoronaTest.kt index 824a468b746938f0b30c3c532cc7f00800ad8cd4..d1fc0813d294254adcc85f57aac5b327e5731b3f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/CoronaTest.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/CoronaTest.kt @@ -49,6 +49,9 @@ interface CoronaTest { // Has the corresponding entry been created in the test certificate storage val isDccDataSetCreated: Boolean + // The ID of the lab that uploaded the test result + val labId: String? + enum class Type(val raw: String) { @SerializedName("PCR") PCR("PCR"), diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRCoronaTest.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRCoronaTest.kt index fd28cb44782cf18837dda25c487667d006a4c34a..0fc8c26a31eae2e78ddccfc1a0240b522eb0da17 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRCoronaTest.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRCoronaTest.kt @@ -46,6 +46,9 @@ data class PCRCoronaTest( @SerializedName("isDccDataSetCreated") override val isDccDataSetCreated: Boolean = false, + + @SerializedName("labId") + override val labId: String? = null, ) : CoronaTest { override val type: CoronaTest.Type diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRTestProcessor.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRTestProcessor.kt index 58bfe8a28d16fd55ab3d07efd251fd7f4458e288..ce35035b404f73f9d96b48bdbdde63b0166a9ea3 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRTestProcessor.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRTestProcessor.kt @@ -130,6 +130,7 @@ class PCRTestProcessor @Inject constructor( testResult = testResult, testResultReceivedAt = determineReceivedDate(null, testResult), isDccConsentGiven = request.isDccConsentGiven, + labId = response.testResultResponse.labId ) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RACoronaTest.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RACoronaTest.kt index 6dfa9ad11f4179a805596e85dee86c89e613b510..fa0933bc2da91e216d9278ea1565ba9f41f2a839 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RACoronaTest.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RACoronaTest.kt @@ -70,6 +70,9 @@ data class RACoronaTest( override val isDccConsentGiven: Boolean = false, @SerializedName("isDccDataSetCreated") override val isDccDataSetCreated: Boolean = false, + + @SerializedName("labId") + override val labId: String? = null, ) : CoronaTest { override val type: CoronaTest.Type diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RATestProcessor.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RATestProcessor.kt index 075881497a8447e524264062768309f02867f60d..e119cba0f64720b70a39a218182be317879ac02e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RATestProcessor.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RATestProcessor.kt @@ -98,6 +98,7 @@ class RATestProcessor @Inject constructor( sampleCollectedAt = sampleCollectedAt, isDccSupportedByPoc = request.isDccSupportedByPoc, isDccConsentGiven = request.isDccConsentGiven, + labId = registrationData.testResultResponse.labId ) } @@ -137,7 +138,8 @@ class RATestProcessor @Inject constructor( Timber.tag(TAG).w("HTTP 400 error after 21 days, remapping to RAT_REDEEMED.") CoronaTestResultResponse( coronaTestResult = RAT_REDEEMED, - sampleCollectedAt = null + sampleCollectedAt = null, + labId = null ) } else { Timber.tag(TAG).v("Unexpected HTTP 400 error, rethrowing...") diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/exception/TestCertificateServerException.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/exception/TestCertificateServerException.kt index 6cbe138c4d7109ece44e02e86542fdd94b06176a..fb6fb45851e7640be92cbbcde391b9f05118f05e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/exception/TestCertificateServerException.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/exception/TestCertificateServerException.kt @@ -62,6 +62,10 @@ class TestCertificateServerException( "DCC Components failed with error 500: Signing server error", ERROR_MESSAGE_E2E_ERROR_CALL_HOTLINE ), + DCC_NOT_SUPPORTED_BY_LAB( + "DCC is not supported by the lab", + ERROR_MESSAGE_DCC_NOT_SUPPORTED_BY_LAB + ), DCC_COMP_NO_NETWORK( "DCC Test Certificate Components failed due to no network connection.", ERROR_MESSAGE_NO_NETWORK diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificateRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificateRepository.kt index ed383c7d1fa83bb75448b86cb217054caeea4445..17f9632e9498ad08ab3774d1295777245ff923a6 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificateRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificateRepository.kt @@ -2,6 +2,7 @@ package de.rki.coronawarnapp.covidcertificate.test.core import de.rki.coronawarnapp.bugreporting.reportProblem import de.rki.coronawarnapp.coronatest.type.CoronaTest +import de.rki.coronawarnapp.covidcertificate.exception.TestCertificateServerException import de.rki.coronawarnapp.covidcertificate.test.core.qrcode.TestCertificateQRCodeExtractor import de.rki.coronawarnapp.covidcertificate.test.core.storage.PCRCertificateData import de.rki.coronawarnapp.covidcertificate.test.core.storage.RACertificateData @@ -87,7 +88,7 @@ class TestCertificateRepository @Inject constructor( /** * Will create a new test certificate entry. - * Automation via [de.rki.coronawarnapp.coronatest.type.common.TestCertificateRetrievalScheduler] will kick in. + * Automation via [de.rki.coronawarnapp.covidcertificate.test.core.execution.TestCertificateRetrievalScheduler] will kick in. * * Throws an exception if there already is a test certificate entry for this test * or this is not a valid test (no consent, not supported by PoC). @@ -114,11 +115,13 @@ class TestCertificateRepository @Inject constructor( identifier = identifier, registeredAt = test.registeredAt, registrationToken = test.registrationToken, + labId = test.labId ) CoronaTest.Type.RAPID_ANTIGEN -> RACertificateData( identifier = identifier, registeredAt = test.registeredAt, registrationToken = test.registrationToken, + labId = test.labId ) } val container = TestCertificateContainer( @@ -172,12 +175,42 @@ class TestCertificateRepository @Inject constructor( } } + // Not sure i really like this + internalData.updateBlocking { + Timber.tag(TAG).d("Checking for invalid lab id.") + + val refreshedCerts = values + .filter { workedOnIds.contains(it.identifier) } // Refresh targets + .filter { it.labId == null } // Targets of this step + .map { cert -> + Timber.tag(TAG).d("%s is missing a lab id returning exception", cert) + RefreshResult( + cert, + TestCertificateServerException( + TestCertificateServerException.ErrorCode.DCC_NOT_SUPPORTED_BY_LAB + ) + ) + } + + refreshedCerts.forEach { + refreshCallResults[it.certificateContainer.identifier] = it + } + + mutate { + refreshedCerts + .filter { it.error == null } + .map { it.certificateContainer } + .forEach { this[it.identifier] = it } + } + } + internalData.updateBlocking { Timber.tag(TAG).d("Checking for unregistered public keys.") val refreshedCerts = values .filter { workedOnIds.contains(it.identifier) } // Refresh targets .filter { !it.isPublicKeyRegistered } // Targets of this step + .filter { it.labId != null } .map { cert -> withContext(dispatcherProvider.IO) { try { @@ -208,6 +241,7 @@ class TestCertificateRepository @Inject constructor( val refreshedCerts = values .filter { workedOnIds.contains(it.identifier) } // Refresh targets .filter { it.isPublicKeyRegistered && it.isCertificateRetrievalPending } // Targets of this step + .filter { it.labId != null } .map { cert -> withContext(dispatcherProvider.IO) { try { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/PCRCertificateData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/PCRCertificateData.kt index 118bf5bc112a3fc4399a49210542b1f6069c7256..2fe7dcb304f97d7f8a5dfa079194d5bbc5bc2c66 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/PCRCertificateData.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/PCRCertificateData.kt @@ -37,6 +37,9 @@ data class PCRCertificateData internal constructor( @SerializedName("testCertificateQrCode") override val testCertificateQrCode: String? = null, + + @SerializedName("labId") + override val labId: String? = null, ) : StoredTestCertificateData { // Otherwise GSON unsafes reflection to create this class, and sets the LAZY to null diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/RACertificateData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/RACertificateData.kt index dfcb82bad80c8f2000c505ce3929fb62dc6f1f64..8b87ecb424f012e4432e04e82536c5ff864ace23 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/RACertificateData.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/RACertificateData.kt @@ -37,6 +37,9 @@ data class RACertificateData( @SerializedName("testCertificateQrCode") override val testCertificateQrCode: String? = null, + + @SerializedName("labId") + override val labId: String? = null, ) : StoredTestCertificateData { // Otherwise GSON unsafes reflection to create this class, and sets the LAZY to null diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/StoredTestCertificateData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/StoredTestCertificateData.kt index 131c18e26608fb530f939f6cccc0cbb49128133d..16c307f8ecfdb83e2017b26bdb532653f3f67d94 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/StoredTestCertificateData.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/StoredTestCertificateData.kt @@ -18,4 +18,5 @@ interface StoredTestCertificateData { val encryptedDataEncryptionkey: ByteString? val encryptedDccCose: ByteString? val testCertificateQrCode: String? + val labId: String? } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragment.kt index afd660e979ff7f8197838d140578d3350edb9b55..f83587427e2bb2db0edccd20f58054192323ae6d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/CertificatesFragment.kt @@ -7,9 +7,12 @@ import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DefaultItemAnimator import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.bugreporting.ui.toErrorDialogBuilder +import de.rki.coronawarnapp.covidcertificate.exception.TestCertificateServerException import de.rki.coronawarnapp.covidcertificate.vaccination.ui.list.VaccinationListFragment import de.rki.coronawarnapp.databinding.FragmentCertificatesBinding import de.rki.coronawarnapp.util.DialogHelper +import de.rki.coronawarnapp.util.ExternalActionHelper.openUrl import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.lists.decorations.TopBottomPaddingDecorator import de.rki.coronawarnapp.util.lists.diffutil.update @@ -58,14 +61,18 @@ class CertificatesFragment : Fragment(R.layout.fragment_certificates), AutoInjec ) } is CertificatesFragmentEvents.ShowRefreshErrorCertificateDialog -> { - val dialog = DialogHelper.DialogInstance( - context = requireContext(), - title = R.string.test_certificate_refresh_dialog_title, - message = event.error.localizedMessage, - positiveButton = R.string.test_certificate_refresh_dialog_confirm_button, - cancelable = false - ) - DialogHelper.showDialog(dialog) + event.error.toErrorDialogBuilder(requireContext()).apply { + setTitle(R.string.test_certificate_refresh_dialog_title) + setCancelable(false) + if ( + event.error is TestCertificateServerException && + event.error.errorCode == TestCertificateServerException.ErrorCode.DCC_NOT_SUPPORTED_BY_LAB + ) { + setNeutralButton(R.string.test_certificate_error_invalid_labid_faq) { _, _ -> + openUrl(getString(R.string.test_certificate_error_invalid_labid_faq_link)) + } + } + }.show() } is CertificatesFragmentEvents.ShowDeleteErrorCertificateDialog -> { val dialog = DialogHelper.DialogInstance( diff --git a/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml b/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml index 6c5711aae15226505605cd6643c463d9bf1aa18e..2cdecbe39b85a1314264840193e5674077172f35 100644 --- a/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml @@ -100,4 +100,8 @@ <string name="test_certificate_error_label_refreshing">"Ihr Zertifikat wird gerade erstellt…"</string> <!-- XTXT: Test error card body refreshing --> <string name="test_certificate_error_refreshing_status">"Ihr Zertifikat wird gerade angefragt, dies kann einige Minuten dauern…"</string> + <!-- XBUT: Text for invalid test certificate error button, linking to FAQ--> + <string name="test_certificate_error_invalid_labid_faq">"FAQ zu Testzertifikaten"</string> + <!-- XTXT: Explains user about test certificate: URL, has to be "translated" into english (relevant for all languages except german) - https://www.coronawarn.app/en/faq/#vac_cert_invalid --> + <string name="test_certificate_error_invalid_labid_faq_link">"https://www.coronawarn.app/de/faq/#test_cert"</string> </resources> diff --git a/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml b/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml index e40bf9c68d6446f06cd15fd81aab2f95bfa58ec0..be47fa7e524f0f247498ed274e8647639a7a9727 100644 --- a/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml +++ b/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml @@ -100,4 +100,8 @@ <string name="test_certificate_error_label_refreshing">"Your certificate is being created..."</string> <!-- XTXT: Test error card body refreshing --> <string name="test_certificate_error_refreshing_status">"Your certificate is being requested. This may take a few minutes..."</string> + <!-- XBUT: Text for invalid test certificate error button, linking to FAQ--> + <string name="test_certificate_error_invalid_labid_faq"></string> + <!-- XTXT: Explains user about test certificate: URL, has to be "translated" into english (relevant for all languages except german) - https://www.coronawarn.app/en/faq/#vac_cert_invalid --> + <string name="test_certificate_error_invalid_labid_faq_link"></string> </resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationApiV1Test.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationApiV1Test.kt index 9076ba3b7c9e0cda0069939b58e8889d959f2a90..bc48dcd234cb9e7c0bf0c6b43a30560bd3bd1d0f 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationApiV1Test.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationApiV1Test.kt @@ -169,7 +169,8 @@ class VerificationApiV1Test : BaseIOTest() { requestBody ) shouldBe VerificationApiV1.TestResultResponse( testResult = 1, - sampleCollectedAt = null + sampleCollectedAt = null, + labId = null, ) webServer.takeRequest(5, TimeUnit.SECONDS)!!.apply { diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationServerTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationServerTest.kt index 07f8cbc45e513d5797afe10e4a6fbe92dc193e0a..1f68b62c1311a2ec9e3fa64ab6bd967082c30b09 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationServerTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/server/VerificationServerTest.kt @@ -166,12 +166,13 @@ class VerificationServerTest : BaseIOTest() { registrationToken shouldBe "testRegistrationToken" requestPadding.length shouldBe 170 } - VerificationApiV1.TestResultResponse(testResult = 2, sampleCollectedAt = null) + VerificationApiV1.TestResultResponse(testResult = 2, sampleCollectedAt = null, labId = null) } server.pollTestResult("testRegistrationToken") shouldBe CoronaTestResultResponse( coronaTestResult = CoronaTestResult.PCR_POSITIVE, - sampleCollectedAt = null + sampleCollectedAt = null, + labId = null, ) coVerify { verificationApi.getTestResult(any(), any(), any()) } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt index 04e5a7110f6f46ccf7ebac591793fc89b0892b98..d11874da7c5eebd5dd5b51d64c768446a6d66716 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/pcr/PCRProcessorTest.kt @@ -67,6 +67,7 @@ class PCRProcessorTest : BaseTest() { coEvery { checkTestResult(any()) } returns CoronaTestResultResponse( coronaTestResult = PCR_OR_RAT_PENDING, sampleCollectedAt = null, + labId = null, ) coEvery { registerTest(any()) } answers { val request = arg<RegistrationRequest>(0) @@ -76,6 +77,7 @@ class PCRProcessorTest : BaseTest() { testResultResponse = CoronaTestResultResponse( coronaTestResult = PCR_OR_RAT_PENDING, sampleCollectedAt = null, + labId = null, ), ) } @@ -131,6 +133,7 @@ class PCRProcessorTest : BaseTest() { testResultResponse = CoronaTestResultResponse( coronaTestResult = PCR_OR_RAT_PENDING, sampleCollectedAt = null, + labId = null, ) ) coEvery { submissionService.registerTest(any()) } answers { registrationData } @@ -144,6 +147,7 @@ class PCRProcessorTest : BaseTest() { testResultResponse = CoronaTestResultResponse( coronaTestResult = it, sampleCollectedAt = null, + labId = null, ) ) when (it) { @@ -170,6 +174,7 @@ class PCRProcessorTest : BaseTest() { CoronaTestResultResponse( coronaTestResult = pollResult, sampleCollectedAt = null, + labId = null, ) } @@ -222,6 +227,7 @@ class PCRProcessorTest : BaseTest() { CoronaTestResultResponse( coronaTestResult = PCR_POSITIVE, sampleCollectedAt = null, + labId = null, ) } @@ -284,6 +290,7 @@ class PCRProcessorTest : BaseTest() { testResultResponse = CoronaTestResultResponse( coronaTestResult = PCR_OR_RAT_PENDING, sampleCollectedAt = null, + labId = null, ) ) coEvery { submissionService.registerTest(any()) } answers { registrationData } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RAProcessorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RAProcessorTest.kt index 2846d0f54b9f17b104b72c59e83d4295f94f8f4f..c9c60d3474d0b078bf79ca3596f3af9d6e4ab95b 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RAProcessorTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/coronatest/type/rapidantigen/RAProcessorTest.kt @@ -67,6 +67,7 @@ class RAProcessorTest : BaseTest() { coEvery { checkTestResult(any()) } returns CoronaTestResultResponse( coronaTestResult = PCR_OR_RAT_PENDING, sampleCollectedAt = null, + labId = null, ) coEvery { registerTest(any()) } answers { @@ -77,6 +78,7 @@ class RAProcessorTest : BaseTest() { testResultResponse = CoronaTestResultResponse( coronaTestResult = PCR_OR_RAT_PENDING, sampleCollectedAt = null, + labId = null, ) ) } @@ -121,6 +123,7 @@ class RAProcessorTest : BaseTest() { coEvery { submissionService.checkTestResult(any()) } returns CoronaTestResultResponse( coronaTestResult = PCR_OR_RAT_PENDING, sampleCollectedAt = nowUTC, + labId = null, ) (instance.pollServer(raTest) as RACoronaTest).sampleCollectedAt shouldBe nowUTC @@ -171,6 +174,7 @@ class RAProcessorTest : BaseTest() { testResultResponse = CoronaTestResultResponse( coronaTestResult = PCR_OR_RAT_PENDING, sampleCollectedAt = null, + labId = null, ), ) coEvery { submissionService.registerTest(any()) } answers { registrationData } @@ -187,6 +191,7 @@ class RAProcessorTest : BaseTest() { testResultResponse = CoronaTestResultResponse( coronaTestResult = it, sampleCollectedAt = null, + labId = null, ) ) when (it) { @@ -212,6 +217,7 @@ class RAProcessorTest : BaseTest() { CoronaTestResultResponse( coronaTestResult = pollResult, sampleCollectedAt = null, + labId = null, ) } @@ -245,6 +251,7 @@ class RAProcessorTest : BaseTest() { CoronaTestResultResponse( coronaTestResult = RAT_POSITIVE, sampleCollectedAt = null, + labId = null, ) } @@ -312,6 +319,7 @@ class RAProcessorTest : BaseTest() { testResultResponse = CoronaTestResultResponse( coronaTestResult = PCR_OR_RAT_PENDING, sampleCollectedAt = null, + labId = null, ) ) coEvery { submissionService.registerTest(any()) } answers { registrationData } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/http/playbook/DefaultPlaybookTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/http/playbook/DefaultPlaybookTest.kt index dd870ce117d4d635b42aefaba8000c70443d9e47..2ed483adc823e40dbf465713789e2530e52a7f22 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/http/playbook/DefaultPlaybookTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/http/playbook/DefaultPlaybookTest.kt @@ -46,7 +46,8 @@ class DefaultPlaybookTest : BaseTest() { coEvery { verificationServer.retrieveRegistrationToken(any()) } returns "token" coEvery { verificationServer.pollTestResult(any()) } returns CoronaTestResultResponse( coronaTestResult = CoronaTestResult.PCR_OR_RAT_PENDING, - sampleCollectedAt = null + sampleCollectedAt = null, + labId = null, ) coEvery { verificationServer.retrieveTanFake() } returns mockk() coEvery { verificationServer.retrieveTan(any()) } returns "tan" @@ -214,7 +215,8 @@ class DefaultPlaybookTest : BaseTest() { val expectedResult = CoronaTestResult.PCR_OR_RAT_PENDING coEvery { verificationServer.pollTestResult(expectedToken) } returns CoronaTestResultResponse( coronaTestResult = expectedResult, - sampleCollectedAt = null + sampleCollectedAt = null, + labId = null, ) coEvery { submissionServer.submitFakePayload() } throws TestException() @@ -224,7 +226,8 @@ class DefaultPlaybookTest : BaseTest() { registrationToken shouldBe expectedToken testResult shouldBe CoronaTestResultResponse( coronaTestResult = expectedResult, - sampleCollectedAt = null + sampleCollectedAt = null, + labId = null, ) } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/CoronaTestServiceTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/CoronaTestServiceTest.kt index b75849bb4e33f6cfa2b4f7a3e9e373e21d745e4c..cc973f05d4e2fcf3f3b050824c4025d6ea0c7a6d 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/CoronaTestServiceTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/CoronaTestServiceTest.kt @@ -45,7 +45,8 @@ class CoronaTestServiceTest : BaseTest() { registrationToken = registrationToken, testResultResponse = CoronaTestResultResponse( coronaTestResult = CoronaTestResult.PCR_OR_RAT_PENDING, - sampleCollectedAt = null + sampleCollectedAt = null, + labId = null, ) ) } @@ -85,13 +86,15 @@ class CoronaTestServiceTest : BaseTest() { fun requestTestResultSucceeds() { coEvery { mockPlaybook.testResult(registrationToken) } returns CoronaTestResultResponse( coronaTestResult = CoronaTestResult.PCR_NEGATIVE, - sampleCollectedAt = null + sampleCollectedAt = null, + labId = null, ) runBlocking { createInstance().checkTestResult(registrationToken) shouldBe CoronaTestResultResponse( coronaTestResult = CoronaTestResult.PCR_NEGATIVE, sampleCollectedAt = null, + labId = null, ) } coVerify(exactly = 1) {