diff --git a/src/main/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProvider.kt b/src/main/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProvider.kt index 0526de71..2e32f493 100644 --- a/src/main/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProvider.kt +++ b/src/main/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProvider.kt @@ -319,7 +319,8 @@ object StmInfoServiceUpdateProvider : MTLog.Loggable { return serviceUpdates } - private fun List.parseTranslations(): Map? { + @VisibleForTesting + internal fun List.parseTranslations(): Map? { this.takeIf { it.isNotEmpty() } ?: return null var hasDefaultLanguage = false val translations = this.mapNotNull { translatedText -> @@ -328,9 +329,9 @@ object StmInfoServiceUpdateProvider : MTLog.Loggable { if (language == DEFAULT_LANGUAGE) hasDefaultLanguage = true language to text }.toMap() - if (!hasDefaultLanguage) { - this.firstOrNull()?.text?.let { - return translations + (DEFAULT_LANGUAGE to it) + if (!hasDefaultLanguage && translations.isNotEmpty()) { + translations.values.firstOrNull()?.let { text -> + return translations + (DEFAULT_LANGUAGE to text) } } return translations diff --git a/src/test/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProviderTest.kt b/src/test/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProviderTest.kt index 50a5bb5b..27c7f98e 100644 --- a/src/test/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProviderTest.kt +++ b/src/test/java/org/mtransit/android/commons/provider/ca/info/stm/StmInfoServiceUpdateProviderTest.kt @@ -2,8 +2,10 @@ package org.mtransit.android.commons.provider.ca.info.stm import org.junit.Assert.assertEquals import org.junit.Test +import org.mtransit.android.commons.provider.ca.info.stm.StmInfoServiceUpdateProvider.parseTranslations import org.mtransit.android.commons.provider.ca.info.stm.StmInfoServiceUpdateProvider.toServiceUpdates import org.mtransit.android.commons.secsToInstant +import kotlin.test.assertNotNull import kotlin.time.Duration.Companion.days class StmInfoServiceUpdateProviderTest { @@ -14,6 +16,28 @@ class StmInfoServiceUpdateProviderTest { private const val SOURCE_LABEL = "stm.info" } + @Test + fun test_parseTranslations() { + buildList { + add(EtatServiceResponse.Alert.TranslatedText(language = "fr", text = "Titre")) + add(EtatServiceResponse.Alert.TranslatedText(language = "en", text = null)) + }.parseTranslations().let { result -> + assertNotNull(result) + assertEquals(2, result.size) + assertEquals("Titre", result["fr"]) + assertEquals("Titre", result["en"]) + } + buildList { + add(EtatServiceResponse.Alert.TranslatedText(language = "en", text = null)) + add(EtatServiceResponse.Alert.TranslatedText(language = "fr", text = "Titre")) + }.parseTranslations().let { result -> + assertNotNull(result) + assertEquals(2, result.size) + assertEquals("Titre", result["fr"]) + assertEquals("Titre", result["en"]) + } + } + @Test fun testToServiceUpdates_deduplicatesDuplicateAlerts() { // Two identical alerts for route "34" -> should produce 2 service updates (one per language)