diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoFragment.kt index 7ade626fc4de42d217411385aa7d4f5feb12e2d5..55741441fd6f7001ce7351a8818b5f91a2236a1b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoFragment.kt @@ -13,6 +13,7 @@ import de.rki.coronawarnapp.databinding.NewReleaseInfoScreenFragmentBinding import de.rki.coronawarnapp.ui.lists.BaseAdapter import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.lists.BindableVH +import de.rki.coronawarnapp.util.setUrl import de.rki.coronawarnapp.util.ui.doNavigate import de.rki.coronawarnapp.util.ui.observe2 import de.rki.coronawarnapp.util.ui.popBackStack @@ -68,7 +69,9 @@ class NewReleaseInfoFragment : Fragment(R.layout.new_release_info_screen_fragmen private fun getItems(): List<NewReleaseInfoItem> { val titles = resources.getStringArray(R.array.new_release_title) val textBodies = resources.getStringArray(R.array.new_release_body) - return vm.getItems(titles, textBodies) + val linkifiedLabels = resources.getStringArray(R.array.new_release_linkified_labels) + val linkTargets = resources.getStringArray(R.array.new_release_target_urls) + return vm.getItems(titles, textBodies, linkifiedLabels, linkTargets) } override fun onResume() { @@ -92,7 +95,11 @@ private class ItemAdapter( NewReleaseInfoItemBinding.(item: NewReleaseInfoItem, payloads: List<Any>) -> Unit = { item, _ -> title.text = item.title - body.text = item.body + if (item is NewReleaseInfoItemLinked) { + body.setUrl(item.body, item.linkifiedLabel, item.linkTarget) + } else { + body.text = item.body + } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoItem.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoItem.kt index 91b8e7d8c24d1f156d65401ce4a624dc226c4093..1e30b5ffb8c983ac42aa920d9f050528c84066b5 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoItem.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoItem.kt @@ -1,6 +1,18 @@ package de.rki.coronawarnapp.release -data class NewReleaseInfoItem( - val title: String, +interface NewReleaseInfoItem { + val title: String val body: String -) +} + +data class NewReleaseInfoItemText( + override val title: String, + override val body: String +) : NewReleaseInfoItem + +data class NewReleaseInfoItemLinked( + override val title: String, + override val body: String, + val linkifiedLabel: String, + val linkTarget: String +) : NewReleaseInfoItem diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoViewModel.kt index 0a88666abd3049a2205ef65675eba638eeb5076b..476bbd9bdf9b5c47276ac58fb1a8746d2d7c512e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/release/NewReleaseInfoViewModel.kt @@ -27,14 +27,25 @@ class NewReleaseInfoViewModel @AssistedInject constructor( routeToScreen.postValue(NewReleaseInfoNavigationEvents.CloseScreen) } - fun getItems(titles: Array<String>, bodies: Array<String>): List<NewReleaseInfoItem> { - if (titles.size != bodies.size) { - Timber.e("R.array.new_release_title and R.array.new_release_body must have the same size!") + fun getItems( + titles: Array<String>, + bodies: Array<String>, + linkifiedLabels: Array<String>, + linkTargets: Array<String> + ): List<NewReleaseInfoItem> { + if (titles.size != bodies.size || titles.size != linkifiedLabels.size || titles.size != linkTargets.size) { + Timber.e( + "R.array.new_release_title AND R.array.new_release_body AND " + + "R.array.new_release_linkified_AND R.array.new_release_target_urls arrays must have the same size!" + ) + return emptyList() } val items = mutableListOf<NewReleaseInfoItem>() - titles.indices.forEach { - if (it <= bodies.lastIndex) { - items.add(NewReleaseInfoItem(titles[it], bodies[it])) + titles.indices.forEach { i -> + if (linkifiedLabels[i].isNullOrBlank() || linkTargets[i].isNullOrBlank()) { + items.add(NewReleaseInfoItemText(titles[i], bodies[i])) + } else { + items.add(NewReleaseInfoItemLinked(titles[i], bodies[i], linkifiedLabels[i], linkTargets[i])) } } return items diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/Views.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/Views.kt index 2632c0168a4874e627b01161530197632dc17212..8402cecac39f917f30f98e2d71c010d0deaff2ea 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/Views.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/Views.kt @@ -21,60 +21,24 @@ fun TextView.convertToHyperlink(url: String) { movementMethod = LinkMovementMethod.getInstance() } -fun TextView.setUrlText(@StringRes textRes: Int, url: String) { - context.getString(textRes, url).also { - val indexOf = it.indexOf(url) - setText( - SpannableString(it).apply { - setSpan( - URLSpan(url), - indexOf, - indexOf + url.length, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE - ) - }, - TextView.BufferType.SPANNABLE - ) - movementMethod = LinkMovementMethod.getInstance() - } +fun TextView.setUrl(@StringRes textRes: Int, @StringRes labelRes: Int, @StringRes urlRes: Int) { + setUrl(context.getString(textRes), context.getString(labelRes), context.getString(urlRes)) } fun TextView.setUrl(@StringRes textRes: Int, label: String, url: String) { - context.getString(textRes).also { - val indexOf = it.indexOf(label) - if (indexOf > 0) { - setText( - SpannableString(it).apply { - setSpan( - URLSpan(url), - indexOf, - indexOf + label.length, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE - ) - }, - TextView.BufferType.SPANNABLE - ) - movementMethod = LinkMovementMethod.getInstance() - } else { - text = it - } - } + setUrl(context.getString(textRes), label, url) } -fun TextView.setUrl(@StringRes textRes: Int, @StringRes labelRes: Int, @StringRes urlRes: Int) { - val url = context.getString(urlRes) - val label = context.getString(labelRes) - context.getString(textRes).also { - val indexOf = it.indexOf(label) - if (indexOf > 0) { - setText( - SpannableStringBuilder(it).urlSpan(indexOf, indexOf + label.length, url), - TextView.BufferType.SPANNABLE - ) - movementMethod = LinkMovementMethod.getInstance() - } else { - text = it - } +fun TextView.setUrl(content: String, label: String, url: String) { + val indexOf = content.indexOf(label) + if (indexOf > 0) { + setText( + SpannableStringBuilder(content).urlSpan(indexOf, indexOf + label.length, url), + TextView.BufferType.SPANNABLE + ) + movementMethod = LinkMovementMethod.getInstance() + } else { + text = content } } diff --git a/Corona-Warn-App/src/main/res/values-bg/release_info_strings.xml b/Corona-Warn-App/src/main/res/values-bg/release_info_strings.xml index dad3ff4664716d2a47b549d4ac9e152bce083eba..22bc2a703de4e25aa7f6b5b9da3e47385ea552b3 100644 --- a/Corona-Warn-App/src/main/res/values-bg/release_info_strings.xml +++ b/Corona-Warn-App/src/main/res/values-bg/release_info_strings.xml @@ -34,4 +34,24 @@ <item>"Ð’ приложението вече има по-подробна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно процедурата за теÑтване."</item> </string-array> + <!-- XTXT: Text labels that will be converted to Links --> + <string-array name="new_release_linkified_labels"> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + </string-array> + + <!-- XTXT: URL destinations for the lables in new_release_linkified_labels --> + <string-array name="new_release_target_urls"> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + </string-array> + </resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values-de/release_info_strings.xml b/Corona-Warn-App/src/main/res/values-de/release_info_strings.xml index 6737e65e8a9ab3634b993bf2b1a59d10c2a8a38e..459c8d95683fef83103d851959216b60586b5ac9 100644 --- a/Corona-Warn-App/src/main/res/values-de/release_info_strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/release_info_strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" tools:ignore="MissingTranslation"> <!-- #################################### - Release Info Screen 1.12 + Release Info Screen 1.14 ###################################### --> <!-- XHED: Title for the release info screen --> @@ -17,22 +17,34 @@ <!-- XHED: Titles for the release info screen bullet points --> <string-array name="new_release_title"> - <item>Link auf RKI-Umfrage</item> - <item>Einwilligung zur Datenspende (optional)</item> - <item>Anpassungen der Risiko-Karten</item> - <item>Fortführung der Risiko-Ermittlung nach Teilung der Zufalls-IDs</item> - <item>Einführung von Registerkarten</item> - <item>Mehr Informationen zum Testablauf</item> + <item>Zusatzfunktionen im Kontakt-Tagebuch</item> + <item>Direkter Zugriff auf Kontakt-Tagebuch</item> + <item>Mehr Details zum Risikostatus</item> + <item>Screenshots zur Corona-Warn-App</item> </string-array> <!-- XTXT: Text bodies for the release info screen bullet points --> <string-array name="new_release_body"> - <item>Wenn Sie ein erhöhtes Risiko haben, können Sie aus der App heraus eine Umfrage des Robert-Koch-Instituts aufrufen und daran teilnehmen.</item> - <item>Sie haben nun die Möglichkeit, Ihre Nutzungsdaten zur Verfügung zu stellen und uns somit bei der Verbesserung der App zu unterstützen.</item> - <item>Die Texte auf den Risiko-Karten wurden leicht angepasst.</item> - <item>Nachdem Sie Ihre verschlüsselten Zufalls-IDs geteilt haben, können Sie entscheiden, ob und wann Sie die Risiko-Ermittlung wieder einschalten.</item> - <item>Es gibt nun eine eigene Registerkarte für das Kontakt-Tagebuch. Somit können Sie schneller auf Ihr Tagebuch zugreifen und vom Kontakt-Tagebuch wieder zurück auf die Startseite der App wechseln.</item> - <item>Die App enthält nun detaillierte Informationen zum Testablauf.</item> + <item>Sie können zu jedem Eintrag angeben, unter welchen Umständen die Begegnung stattfand. Sie können aus vorgegebenen Optionen auswählen (z.B. Dauer der Begegnung, mit oder ohne Maske) sowie zusätzlich in einer kurzen Notiz weitere Umstände erfassen, die zu einem erhöhten Risiko führen könnten. Sollten Sie sich tatsächlich anstecken, können diese Angaben dem Gesundheitsamt bei der Nachverfolgung möglicher Infektionsketten helfen.</item> + <item>Sie können nun direkt einen Eintrag im Kontakt-Tagebuch hinzufügen, ohne erst die App öffnen zu müssen. Tippen Sie dazu etwa 2 Sekunden lang auf das Icon der Corona-Warn-App bis ein Menü erscheint und tippen Sie dann auf "Tagebuch-Eintrag für heute hinzufügen“.</item> + <item>Wenn Ihnen in der App ein erhöhtes Risiko angezeigt wird, können Sie nun sehen, ob der Risikostatus aufgrund einer bzw. mehrerer Begegnungen mit erhöhtem Risiko angezeigt wird, oder aufgrund von mehreren Begegnungen mit niedrigem Risiko.</item> + <item>Auf https://www.coronawarn.app stehen nun alle Screenshots der App zu Verfügung. So können Sie sich nun auch über geplante Funktionen der App informieren.</item> + </string-array> + + <!-- XTXT: Text labels that will be converted to Links --> + <string-array name="new_release_linkified_labels"> + <item></item> + <item></item> + <item></item> + <item>https://www.coronawarn.app</item> + </string-array> + + <!-- XTXT: URL destinations for the lables in new_release_linkified_labels --> + <string-array name="new_release_target_urls"> + <item></item> + <item></item> + <item></item> + <item>https://www.coronawarn.app/de/screenshots</item> </string-array> </resources> diff --git a/Corona-Warn-App/src/main/res/values-en/release_info_strings.xml b/Corona-Warn-App/src/main/res/values-en/release_info_strings.xml index 1b0f501897c1a5c3cdbd5afff1f1be6fb7934666..16bcc281c37b95b523da1f13f0944c8bd5f65fc9 100644 --- a/Corona-Warn-App/src/main/res/values-en/release_info_strings.xml +++ b/Corona-Warn-App/src/main/res/values-en/release_info_strings.xml @@ -34,4 +34,24 @@ <item>"The app now contains more detailed information about the testing procedure."</item> </string-array> + <!-- XTXT: Text labels that will be converted to Links --> + <string-array name="new_release_linkified_labels"> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + </string-array> + + <!-- XTXT: URL destinations for the lables in new_release_linkified_labels --> + <string-array name="new_release_target_urls"> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + </string-array> + </resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values-pl/release_info_strings.xml b/Corona-Warn-App/src/main/res/values-pl/release_info_strings.xml index 0a5e83e4d7b686c57347dfe5262eaffbe2e970d1..1c663f6e74a37130ee3b1b89307408beeec10b4a 100644 --- a/Corona-Warn-App/src/main/res/values-pl/release_info_strings.xml +++ b/Corona-Warn-App/src/main/res/values-pl/release_info_strings.xml @@ -34,4 +34,24 @@ <item>"Aplikacja zawiera teraz bardziej szczegółowe informacje na temat procedury testowania."</item> </string-array> + <!-- XTXT: Text labels that will be converted to Links --> + <string-array name="new_release_linkified_labels"> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + </string-array> + + <!-- XTXT: URL destinations for the lables in new_release_linkified_labels --> + <string-array name="new_release_target_urls"> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + </string-array> + </resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values-ro/release_info_strings.xml b/Corona-Warn-App/src/main/res/values-ro/release_info_strings.xml index 6ed74835dbd04f88fdc76e4fb21be30679b816f0..ab72df625c9f8d4eddcd4860a9a8944b1735ee0a 100644 --- a/Corona-Warn-App/src/main/res/values-ro/release_info_strings.xml +++ b/Corona-Warn-App/src/main/res/values-ro/release_info_strings.xml @@ -34,4 +34,24 @@ <item>"AplicaÈ›ia conÈ›ine acum informaÈ›ii mai detaliate despre procedura de testare."</item> </string-array> + <!-- XTXT: Text labels that will be converted to Links --> + <string-array name="new_release_linkified_labels"> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + </string-array> + + <!-- XTXT: URL destinations for the lables in new_release_linkified_labels --> + <string-array name="new_release_target_urls"> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + </string-array> + </resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values-tr/release_info_strings.xml b/Corona-Warn-App/src/main/res/values-tr/release_info_strings.xml index 2efd5aaec9d3b161c9a40d575d10f2765ea8d919..11084f58b7e4126e7ab7ffb8abef6168d3ffd899 100644 --- a/Corona-Warn-App/src/main/res/values-tr/release_info_strings.xml +++ b/Corona-Warn-App/src/main/res/values-tr/release_info_strings.xml @@ -34,4 +34,24 @@ <item>"Uygulama artık test prosedürü hakkında daha ayrıntılı bilgiler içermektedir."</item> </string-array> + <!-- XTXT: Text labels that will be converted to Links --> + <string-array name="new_release_linkified_labels"> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + </string-array> + + <!-- XTXT: URL destinations for the lables in new_release_linkified_labels --> + <string-array name="new_release_target_urls"> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + <item></item> + </string-array> + </resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values/release_info_strings.xml b/Corona-Warn-App/src/main/res/values/release_info_strings.xml index a4dd7dfe4e495cd8bd6806457481dcfad8b8032c..16d097b510a3ae8c0cf7f16b6c28ef2fc5cbc221 100644 --- a/Corona-Warn-App/src/main/res/values/release_info_strings.xml +++ b/Corona-Warn-App/src/main/res/values/release_info_strings.xml @@ -17,22 +17,34 @@ <!-- XHED: Titles for the release info screen bullet points --> <string-array name="new_release_title"> - <item>"Link to RKI survey"</item> - <item>"Consent to Share Data (optional)"</item> - <item>"Changes to the Risk Tiles"</item> - <item>"Continuation of Exposure Logging after Sharing Your Random IDs"</item> - <item>"Implementation of Tabs"</item> - <item>"More Information about the Testing Procedure"</item> + <item>EN: Zusatzfunktionen im Kontakt-Tagebuch</item> + <item>Direkter Zugriff auf Kontakt-Tagebuch</item> + <item>Mehr Details zum Risikostatus</item> + <item>Screenshots zur Corona-Warn-App</item> </string-array> <!-- XTXT: Text bodies for the release info screen bullet points --> <string-array name="new_release_body"> - <item>"If you have an increased risk, you can start and take a survey conducted by the Robert Koch Institute from within the app."</item> - <item>"You now have the option of sharing your usage data, which will help us to improve the app."</item> - <item>"Minor changes to the texts on the risk tiles."</item> - <item>"After you have shared your encrypted random IDs, you can decide whether and when you want to switch exposure logging back on."</item> - <item>"There is now a separate tab page for your contact journal. This lets you access your journal and switch from the contact journal back to the home screen of the app more quickly."</item> - <item>"The app now contains more detailed information about the testing procedure."</item> + <item>EN: Sie können zu jedem Eintrag angeben, unter welchen Umständen die Begegnung stattfand. Sie können aus vorgegebenen Optionen auswählen (z.B. Dauer der Begegnung, mit oder ohne Maske) sowie zusätzlich in einer kurzen Notiz weitere Umstände erfassen, die zu einem erhöhten Risiko führen könnten. Sollten Sie sich tatsächlich anstecken, können diese Angaben dem Gesundheitsamt bei der Nachverfolgung möglicher Infektionsketten helfen.</item> + <item>Sie können nun direkt einen Eintrag im Kontakt-Tagebuch hinzufügen, ohne erst die App öffnen zu müssen. Tippen Sie dazu etwa 2 Sekunden lang auf das Icon der Corona-Warn-App bis ein Menü erscheint und tippen Sie dann auf "Tagebuch-Eintrag für heute hinzufügen“.</item> + <item>Wenn Ihnen in der App ein erhöhtes Risiko angezeigt wird, können Sie nun sehen, ob der Risikostatus aufgrund einer bzw. mehrerer Begegnungen mit erhöhtem Risiko angezeigt wird, oder aufgrund von mehreren Begegnungen mit niedrigem Risiko.</item> + <item>Auf https://www.coronawarn.app stehen nun alle Screenshots der App zu Verfügung. So können Sie sich nun auch über geplante Funktionen der App informieren.</item> + </string-array> + + <!-- XTXT: Text labels that will be converted to Links --> + <string-array name="new_release_linkified_labels"> + <item></item> + <item></item> + <item></item> + <item>https://www.coronawarn.app</item> + </string-array> + + <!-- XTXT: URL destinations for the lables in new_release_linkified_labels --> + <string-array name="new_release_target_urls"> + <item></item> + <item></item> + <item></item> + <item>https://www.coronawarn.app/en/screenshots</item> </string-array> </resources> diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/release/NewReleaseInfoFragmentTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/release/NewReleaseInfoFragmentTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..03ad1e074b0739a12faf6f28f5e6657fe59efed4 --- /dev/null +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/release/NewReleaseInfoFragmentTest.kt @@ -0,0 +1,72 @@ +package de.rki.coronawarnapp.release + +import android.content.Context +import android.os.Build +import androidx.test.core.app.ApplicationProvider +import de.rki.coronawarnapp.R +import io.kotest.matchers.shouldBe +import io.mockk.MockKAnnotations +import io.mockk.clearAllMocks +import org.junit.After +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import testhelpers.BaseTest +import testhelpers.EmptyApplication + +@Config(sdk = [Build.VERSION_CODES.P], application = EmptyApplication::class) +@RunWith(RobolectricTestRunner::class) +class NewReleaseInfoFragmentTest : BaseTest() { + + @Before + fun setup() { + MockKAnnotations.init(this) + } + + @After + fun tearDown() { + clearAllMocks() + } + + val context: Context + get() = ApplicationProvider.getApplicationContext() + + @Config(qualifiers = "de") + @Test + fun `ensure GERMAN new release info arrays are of equal length`() = loadAndCompareStringArrayResources() + + @Config(qualifiers = "en") + @Test + fun `ensure ENGLISH new release info arrays are of equal length`() = loadAndCompareStringArrayResources() + + @Config(qualifiers = "pl") + @Test + fun `ensure POLISH new release info arrays are of equal length`() = loadAndCompareStringArrayResources() + + @Config(qualifiers = "ro") + @Test + fun `ensure ROMANIAN new release info arrays are of equal length`() = loadAndCompareStringArrayResources() + + @Config(qualifiers = "tr") + @Test + fun `ensure TURKISH new release info arrays are of equal length`() = loadAndCompareStringArrayResources() + + @Config(qualifiers = "fr") + @Test + fun `ensure DEFAULT aka FRENCH new release info arrays are of equal length`() = loadAndCompareStringArrayResources() + + + private fun loadAndCompareStringArrayResources() { + val titles = context.resources.getStringArray(R.array.new_release_title) + val bodies = context.resources.getStringArray(R.array.new_release_body) + val labels = context.resources.getStringArray(R.array.new_release_linkified_labels) + val urls = context.resources.getStringArray(R.array.new_release_target_urls) + + titles.size shouldBe bodies.size + bodies.size shouldBe labels.size + labels.size shouldBe urls.size + } + +} \ No newline at end of file diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/release/NewReleaseInfoViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/release/NewReleaseInfoViewModelTest.kt index 6bc5deee8229f2e495d10ad67cbb1f73377c5fee..094ae35516f1f4e74ca1d9f2d63c3e54e7369fa3 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/release/NewReleaseInfoViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/release/NewReleaseInfoViewModelTest.kt @@ -36,29 +36,58 @@ class NewReleaseInfoViewModelTest { } @Test - fun testGetInfoItem() { - val item1 = NewReleaseInfoItem("title", "body") - val item2 = NewReleaseInfoItem("title2", "body2") + fun `title and body shall be mapped to list of items`() { + val item1 = NewReleaseInfoItemText("title", "body") + val item2 = NewReleaseInfoItemText("title2", "body2") val titles = arrayOf(item1.title, item2.title) val bodies = arrayOf(item1.body, item2.body) - viewModel.getItems(titles, bodies) shouldBe listOf(item1, item2) + viewModel.getItems(titles, bodies, arrayOf("",""), arrayOf("","")) shouldBe listOf(item1, item2) } @Test - fun testGetInfoItemTitleMissing() { - val item1 = NewReleaseInfoItem("title", "body") - val item2 = NewReleaseInfoItem("title2", "body2") + fun `missing title results in an empty list`() { + val item1 = NewReleaseInfoItemText("title", "body") + val item2 = NewReleaseInfoItemText("title2", "body2") val titles = arrayOf(item1.title) val bodies = arrayOf(item1.body, item2.body) - viewModel.getItems(titles, bodies) shouldBe listOf(item1) + viewModel.getItems(titles, bodies, arrayOf("",""), arrayOf("","")) shouldBe emptyList() } @Test - fun testGetInfoItemBodyMissing() { - val item1 = NewReleaseInfoItem("title", "body") - val item2 = NewReleaseInfoItem("title2", "body2") + fun `missing body results in an empty list`() { + val item1 = NewReleaseInfoItemText("title", "body") + val item2 = NewReleaseInfoItemText("title2", "body2") val titles = arrayOf(item1.title, item2.title) val bodies = arrayOf(item1.body) - viewModel.getItems(titles, bodies) shouldBe listOf(item1) + viewModel.getItems(titles, bodies, arrayOf("",""), arrayOf("","")) shouldBe emptyList() + } + + @Test + fun `missing linkified label results in an empty list`() { + val item1 = NewReleaseInfoItemText("title", "body") + val item2 = NewReleaseInfoItemText("title2", "body2") + val titles = arrayOf(item1.title, item2.title) + val bodies = arrayOf(item1.body, item2.body) + viewModel.getItems(titles, bodies, arrayOf(""), arrayOf("","")) shouldBe emptyList() + } + + @Test + fun `missing target url results in an empty list`() { + val item1 = NewReleaseInfoItemText("title", "body") + val item2 = NewReleaseInfoItemText("title2", "body2") + val titles = arrayOf(item1.title, item2.title) + val bodies = arrayOf(item1.body, item2.body) + viewModel.getItems(titles, bodies, arrayOf("",""), arrayOf("")) shouldBe emptyList() + } + + @Test + fun `items with and without links are mapped successfully`() { + val item1 = NewReleaseInfoItemText("title", "body") + val item2 = NewReleaseInfoItemLinked("title2", "body2", "label2", "url2") + val titles = arrayOf(item1.title, item2.title) + val bodies = arrayOf(item1.body, item2.body) + val linkifiedLabels = arrayOf("", item2.linkifiedLabel) + val linkTargets = arrayOf("", item2.linkTarget) + viewModel.getItems(titles, bodies, linkifiedLabels, linkTargets) shouldBe listOf(item1, item2) } }