diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/ValueSetTestData.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/ValueSetTestData.kt index 350302d741a43482586e71516e5ce71a25121d28..4e53a140a553e68d0779b18dfe2b96ed21b5865f 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/ValueSetTestData.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/ValueSetTestData.kt @@ -1,7 +1,18 @@ package de.rki.coronawarnapp.vaccination.core +import de.rki.coronawarnapp.vaccination.core.server.valueset.valuesets.DefaultValueSet +import de.rki.coronawarnapp.vaccination.core.server.valueset.valuesets.TestCertificateValueSets +import de.rki.coronawarnapp.vaccination.core.server.valueset.valuesets.VaccinationValueSets +import de.rki.coronawarnapp.vaccination.core.server.valueset.valuesets.ValueSetsContainer +import java.util.Locale + object ValueSetTestData { + // Shared + val tgItemDe = "tg" to "Ziel-Name" + val tgItemEn = tgItemDe.copy(second = "Target-Name") + + // Vaccination val vpItemDe = "1119305005" to "Impfstoff-Name" val mpItemDe = "EU/1/21/1529" to "Arzneimittel-Name" val maItemDe = "ORG-100001699" to "Hersteller-Name" @@ -9,4 +20,59 @@ object ValueSetTestData { val vpItemEn = vpItemDe.copy(second = "Vaccine-Name") val mpItemEn = mpItemDe.copy(second = "MedicalProduct-Name") val maItemEn = maItemDe.copy(second = "Manufactorer-Name") + + // Test certificate + val ttItemDe = "tt" to "Test-Typ" + val tcMaItemDe = "tcMa" to "RAT-Test-Name-und-Hersteller" + val trItemDe = "tr" to "Test-Ergebnis" + + val ttItemEn = vpItemDe.copy(second = "Test-Type") + val tcMaItemEn = mpItemDe.copy(second = "RAT-Test-Name-and-Manufacturer") + val trItemEn = maItemDe.copy(second = "Test-Result") + + private fun Pair<String, String>.toValueSet() = DefaultValueSet( + items = listOf(DefaultValueSet.DefaultItem(key = first, displayText = second)) + ) + + val vaccinationValueSetsDe = VaccinationValueSets( + languageCode = Locale.GERMAN, + tg = tgItemDe.toValueSet(), + vp = vpItemDe.toValueSet(), + mp = mpItemDe.toValueSet(), + ma = maItemDe.toValueSet() + ) + + val vaccinationValueSetsEn = VaccinationValueSets( + languageCode = Locale.GERMAN, + tg = tgItemEn.toValueSet(), + vp = vpItemEn.toValueSet(), + mp = mpItemEn.toValueSet(), + ma = maItemEn.toValueSet() + ) + + val testCertificateValueSetsDe = TestCertificateValueSets( + languageCode = Locale.GERMAN, + tg = tgItemDe.toValueSet(), + tt = ttItemDe.toValueSet(), + ma = tcMaItemDe.toValueSet(), + tr = trItemDe.toValueSet() + ) + + val testCertificateValueSetsEn = TestCertificateValueSets( + languageCode = Locale.GERMAN, + tg = tgItemEn.toValueSet(), + tt = ttItemEn.toValueSet(), + ma = tcMaItemEn.toValueSet(), + tr = trItemEn.toValueSet() + ) + + val valueSetsContainerDe = ValueSetsContainer( + vaccinationValueSets = vaccinationValueSetsDe, + testCertificateValueSets = testCertificateValueSetsDe + ) + + val valueSetsContainerEn = ValueSetsContainer( + vaccinationValueSets = vaccinationValueSetsEn, + testCertificateValueSets = testCertificateValueSetsEn + ) } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/ValueSetsRepositoryTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/ValueSetsRepositoryTest.kt index 55e6af5e3d12cb3363e6722cf1be5a1c39992fd2..f50e5632a0a3019afb22517930a5438bee9c1660 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/ValueSetsRepositoryTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/ValueSetsRepositoryTest.kt @@ -1,8 +1,15 @@ package de.rki.coronawarnapp.vaccination.core.repository -import testhelpers.BaseTest -/*import de.rki.coronawarnapp.vaccination.core.repository.storage.ValueSetsStorage +import de.rki.coronawarnapp.vaccination.core.ValueSetTestData.testCertificateValueSetsDe +import de.rki.coronawarnapp.vaccination.core.ValueSetTestData.testCertificateValueSetsEn +import de.rki.coronawarnapp.vaccination.core.ValueSetTestData.vaccinationValueSetsDe +import de.rki.coronawarnapp.vaccination.core.ValueSetTestData.vaccinationValueSetsEn +import de.rki.coronawarnapp.vaccination.core.ValueSetTestData.valueSetsContainerDe +import de.rki.coronawarnapp.vaccination.core.ValueSetTestData.valueSetsContainerEn +import de.rki.coronawarnapp.vaccination.core.repository.storage.ValueSetsStorage import de.rki.coronawarnapp.vaccination.core.server.valueset.VaccinationServer +import de.rki.coronawarnapp.vaccination.core.server.valueset.valuesets.emptyValueSetsContainer +import io.kotest.matchers.shouldBe import io.mockk.MockKAnnotations import io.mockk.Ordering import io.mockk.coEvery @@ -15,13 +22,13 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.first import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test +import testhelpers.BaseTest import testhelpers.TestDispatcherProvider import testhelpers.coroutines.runBlockingTest2 -import java.util.Locale*/ +import java.util.Locale class ValueSetsRepositoryTest : BaseTest() { - /* @MockK lateinit var vaccinationServer: VaccinationServer @MockK lateinit var valueSetsStorage: ValueSetsStorage @@ -37,30 +44,34 @@ class ValueSetsRepositoryTest : BaseTest() { @BeforeEach fun setUp() { MockKAnnotations.init(this) - coEvery { vaccinationServer.getVaccinationValueSets(any()) } returns null - coEvery { vaccinationServer.getVaccinationValueSets(languageCode = Locale.ENGLISH) } returns valueSetEn - coEvery { vaccinationServer.getVaccinationValueSets(languageCode = Locale.GERMAN) } returns valueSetDe + coEvery { vaccinationServer.getVaccinationValueSets(any()) } returns + null + coEvery { vaccinationServer.getVaccinationValueSets(languageCode = Locale.ENGLISH) } returns + valueSetsContainerEn + coEvery { vaccinationServer.getVaccinationValueSets(languageCode = Locale.GERMAN) } returns + valueSetsContainerDe every { vaccinationServer.clear() } just runs every { valueSetsStorage.valueSetsContainer = any() } just runs - every { valueSetsStorage.valueSetsContainer } returns emptyValueSetEn + every { valueSetsStorage.valueSetsContainer } returns emptyValueSetsContainer } @Test fun `successful update for de`() = runBlockingTest2(ignoreActive = true) { createInstance(this).run { triggerUpdateValueSet(languageCode = Locale.GERMAN) - latestVaccinationValueSets.first() - }.also { it.validateValues(valueSetDe) } + latestVaccinationValueSets.first() shouldBe vaccinationValueSetsDe + latestTestCertificateValueSets.first() shouldBe testCertificateValueSetsDe + } coVerify { vaccinationServer.getVaccinationValueSets(languageCode = Locale.GERMAN) - valueSetsStorage.valueSetsContainer = valueSetDe + valueSetsStorage.valueSetsContainer = valueSetsContainerDe } coVerify(exactly = 0) { vaccinationServer.getVaccinationValueSets(languageCode = Locale.ENGLISH) - valueSetsStorage.valueSetsContainer = valueSetEn + valueSetsStorage.valueSetsContainer = valueSetsContainerEn } } @@ -68,13 +79,14 @@ class ValueSetsRepositoryTest : BaseTest() { fun `fallback to en`() = runBlockingTest2(ignoreActive = true) { createInstance(this).run { triggerUpdateValueSet(languageCode = Locale.FRENCH) - latestVaccinationValueSets.first() - }.also { it.validateValues(valueSetEn) } + latestVaccinationValueSets.first() shouldBe vaccinationValueSetsEn + latestTestCertificateValueSets.first() shouldBe testCertificateValueSetsEn + } coVerify(ordering = Ordering.ORDERED) { vaccinationServer.getVaccinationValueSets(languageCode = Locale.FRENCH) vaccinationServer.getVaccinationValueSets(languageCode = Locale.ENGLISH) - valueSetsStorage.valueSetsContainer = valueSetEn + valueSetsStorage.valueSetsContainer = valueSetsContainerEn } } @@ -85,8 +97,11 @@ class ValueSetsRepositoryTest : BaseTest() { createInstance(this).run { triggerUpdateValueSet(languageCode = Locale.GERMAN) - latestVaccinationValueSets.first() - }.also { it.validateValues(emptyValueSetEn) } + emptyValueSetsContainer.also { + latestVaccinationValueSets.first() shouldBe it.vaccinationValueSets + latestTestCertificateValueSets.first() shouldBe it.testCertificateValueSets + } + } coVerify(ordering = Ordering.ORDERED) { vaccinationServer.getVaccinationValueSets(languageCode = Locale.GERMAN) @@ -99,14 +114,15 @@ class ValueSetsRepositoryTest : BaseTest() { createInstance(this).run { clear() - latestVaccinationValueSets.first().validateValues(emptyValueSetEn) + emptyValueSetsContainer.also { + latestVaccinationValueSets.first() shouldBe it.vaccinationValueSets + latestTestCertificateValueSets.first() shouldBe it.testCertificateValueSets + } coVerify { vaccinationServer.clear() - valueSetsStorage.valueSetsContainer = emptyValueSetEn + valueSetsStorage.valueSetsContainer = emptyValueSetsContainer } } } - - */ } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/storage/ValueSetsStorageTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/storage/ValueSetsStorageTest.kt index 537e5ed225e725d3fb26aa8b3e630ad36122fb56..fca0f2c4dc5ca162f28a06782f7ff30863b3a525 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/storage/ValueSetsStorageTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/vaccination/core/repository/storage/ValueSetsStorageTest.kt @@ -1,21 +1,23 @@ package de.rki.coronawarnapp.vaccination.core.repository.storage -import testhelpers.BaseTest -/*import android.content.Context +import android.content.Context +import androidx.core.content.edit import de.rki.coronawarnapp.util.serialization.SerializationModule +import de.rki.coronawarnapp.vaccination.core.ValueSetTestData.valueSetsContainerDe +import de.rki.coronawarnapp.vaccination.core.ValueSetTestData.valueSetsContainerEn +import de.rki.coronawarnapp.vaccination.core.server.valueset.valuesets.emptyValueSetsContainer import io.kotest.matchers.shouldBe -import io.kotest.matchers.shouldNotBe import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.impl.annotations.MockK import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test +import testhelpers.BaseTest import testhelpers.extensions.toComparableJsonPretty -import testhelpers.preferences.MockSharedPreferences*/ +import testhelpers.preferences.MockSharedPreferences class ValueSetsStorageTest : BaseTest() { - /* @MockK lateinit var context: Context lateinit var prefs: MockSharedPreferences @@ -33,106 +35,153 @@ class ValueSetsStorageTest : BaseTest() { gson = gson ) - @Test - fun `Default value is an empty value set`() { - createInstance().valueSetsContainer.validateValues(emptyValueSetEn) - } - @Test fun `Updates values`() { createInstance().run { - valueSetsContainer = storedValueSetDe - valueSetsContainer shouldBe storedValueSetDe - - valueSetsContainer = storedValueSetEn - valueSetsContainer shouldBe storedValueSetEn - } - } - - @Test - fun `Check mapping is correct`() { - createInstance().run { - storedValueSetDe.also { it.toStoredVaccinationValueSet() shouldBe it } - - storedValueSetEn.also { it.toStoredVaccinationValueSet() shouldBe it } + valueSetsContainer = valueSetsContainerDe + valueSetsContainer shouldBe valueSetsContainerDe - valueSetDe.also { - it.toStoredVaccinationValueSet() shouldBe storedValueSetDe - it.toStoredVaccinationValueSet().validateValues(it) - } - - valueSetEn.also { - it.toStoredVaccinationValueSet() shouldBe storedValueSetEn - it.toStoredVaccinationValueSet().validateValues(it) - } - - emptyValueSetEn.also { - it.toStoredVaccinationValueSet() shouldBe emptyStoredValueSet - it.toStoredVaccinationValueSet().validateValues(it) - } + valueSetsContainer = valueSetsContainerEn + valueSetsContainer shouldBe valueSetsContainerEn } } @Test fun `storage inits empty without sideeffects`() { - createInstance().valueSetsContainer shouldNotBe null + createInstance() prefs.dataMapPeek.isEmpty() shouldBe true } @Test fun `storage format`() { - createInstance().valueSetsContainer = storedValueSetDe - (prefs.dataMapPeek["valueset"] as String).toComparableJsonPretty() shouldBe """ + createInstance().valueSetsContainer = valueSetsContainerDe + (prefs.dataMapPeek["valuesets_container"] as String).toComparableJsonPretty() shouldBe """ { - "languageCode": "de", - "vp": { - "items": [ - { - "key": "1119305005", - "displayText": "Impfstoff-Name" - } - ] - }, - "mp": { - "items": [ - { - "key": "EU/1/21/1529", - "displayText": "Arzneimittel-Name" - } - ] + "vaccinationValueSets": { + "languageCode": "de", + "tg": { + "items": [ + { + "key": "tg", + "displayText": "Ziel-Name" + } + ] + }, + "vp": { + "items": [ + { + "key": "1119305005", + "displayText": "Impfstoff-Name" + } + ] + }, + "mp": { + "items": [ + { + "key": "EU/1/21/1529", + "displayText": "Arzneimittel-Name" + } + ] + }, + "ma": { + "items": [ + { + "key": "ORG-100001699", + "displayText": "Hersteller-Name" + } + ] + } }, - "ma": { - "items": [ - { - "key": "ORG-100001699", - "displayText": "Hersteller-Name" - } - ] + "testCertificateValueSets": { + "languageCode": "de", + "tg": { + "items": [ + { + "key": "tg", + "displayText": "Ziel-Name" + } + ] + }, + "tt": { + "items": [ + { + "key": "tt", + "displayText": "Test-Typ" + } + ] + }, + "ma": { + "items": [ + { + "key": "tcMa", + "displayText": "RAT-Test-Name-und-Hersteller" + } + ] + }, + "tr": { + "items": [ + { + "key": "tr", + "displayText": "Test-Ergebnis" + } + ] + } } } """.toComparableJsonPretty() createInstance().apply { - valueSetsContainer shouldBe storedValueSetDe - valueSetsContainer = emptyStoredValueSet + valueSetsContainer shouldBe valueSetsContainerDe + valueSetsContainer = emptyValueSetsContainer } - (prefs.dataMapPeek["valueset"] as String).toComparableJsonPretty() shouldBe """ + (prefs.dataMapPeek["valuesets_container"] as String).toComparableJsonPretty() shouldBe """ { - "languageCode": "en", - "vp": { - "items": [] + "vaccinationValueSets": { + "languageCode": "en", + "tg": { + "items": [] + }, + "vp": { + "items": [] + }, + "mp": { + "items": [] + }, + "ma": { + "items": [] + } }, - "mp": { - "items": [] - }, - "ma": { - "items": [] + "testCertificateValueSets": { + "languageCode": "en", + "tg": { + "items": [] + }, + "tt": { + "items": [] + }, + "ma": { + "items": [] + }, + "tr": { + "items": [] + } } } """.toComparableJsonPretty() - createInstance().valueSetsContainer shouldBe emptyStoredValueSet + createInstance().valueSetsContainer shouldBe emptyValueSetsContainer } - */ + @Test + fun `removes leftover`() { + val leftover = "I'm a malicious leftover" + val valueSet = "valueset" + prefs.edit(commit = true) { + putString(valueSet, leftover) + } + + prefs.dataMapPeek[valueSet] shouldBe leftover + createInstance().valueSetsContainer shouldBe emptyValueSetsContainer + prefs.dataMapPeek.isEmpty() shouldBe true + } }