From 68a2a6c443a2ccb02d24d67cb35296ea4fe14c96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Wed, 8 Apr 2026 08:50:39 -0400 Subject: [PATCH 1/3] CA STM.info service updates provider > cleanup Add unit test for parseTranslations method in StmInfoServiceUpdateProvider. --- .../info/stm/StmInfoServiceUpdateProviderTest.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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..0a2ad636 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,19 @@ 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"]) + } + } + @Test fun testToServiceUpdates_deduplicatesDuplicateAlerts() { // Two identical alerts for route "34" -> should produce 2 service updates (one per language) From 17b00015a805036e1da5ebc3b590d9f955c8f5ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Wed, 8 Apr 2026 08:51:12 -0400 Subject: [PATCH 2/3] Add visibility annotation to parseTranslations function --- .../provider/ca/info/stm/StmInfoServiceUpdateProvider.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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..2162b0b4 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 -> From 23916b6e929d6425a0f8a0b3f5bb0b2e68a1efe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathieu=20M=C3=A9a?= Date: Wed, 8 Apr 2026 09:05:52 -0400 Subject: [PATCH 3/3] fix --- .../provider/ca/info/stm/StmInfoServiceUpdateProvider.kt | 6 +++--- .../ca/info/stm/StmInfoServiceUpdateProviderTest.kt | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) 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 2162b0b4..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 @@ -329,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 0a2ad636..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 @@ -27,6 +27,15 @@ class StmInfoServiceUpdateProviderTest { 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