diff --git a/README.md b/README.md index 7af693b..6edc9fa 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ Technical improvements: - Update the technical foundations (dependencies, XML -> jetpack compose, resolve deprecation notices) - Remove remains of various API migrations (which happen every 2 years or so) - Refactor caches to minimize accesses which will further improve startup time +- Support fallback to other language if menu not translated to target language (#51) Functional improvements: - View menu for the whole week (usecase: plan ahead whether to prepare lunch for the next day) diff --git a/app/src/main/java/ch/famoser/mensa/services/providers/ETHMensaProvider2.kt b/app/src/main/java/ch/famoser/mensa/services/providers/ETHMensaProvider2.kt index 5479d2e..c747c47 100644 --- a/app/src/main/java/ch/famoser/mensa/services/providers/ETHMensaProvider2.kt +++ b/app/src/main/java/ch/famoser/mensa/services/providers/ETHMensaProvider2.kt @@ -126,10 +126,10 @@ class ETHMensaProvider2( } val time = parseMealTime(mealTime.name) ?: continue - val menus = mealTime.lineArray - .map { if (it.meal != null) parseApiLineArray(it.name, it.meal) else null } - .filterNotNull() - .filter { !isNoMenuNotice(it, language) } + val menus = + mealTime.lineArray + .mapNotNull { parseApiLineArray(it.name, it.meal) } + .filter { !isNoMenuNotice(it, language) } menuByFacilityIds[weeklyRotaArray.facilityId.toString() + "_" + time] = menus } @@ -178,7 +178,11 @@ class ETHMensaProvider2( } - private fun parseApiLineArray(name: String, meal: ApiMeal): Menu { + private fun parseApiLineArray(name: String, meal: ApiMeal?): Menu? { + if (meal == null) { + return null + } + val description = meal.name.trim() + "\n" + meal.description.replace("\\s+".toRegex(), " ") diff --git a/app/src/test/java/ch/famoser/mensa/services/providers/ETHMensaProvider2Test.kt b/app/src/test/java/ch/famoser/mensa/services/providers/ETHMensaProvider2Test.kt index 4be7638..c073f8d 100644 --- a/app/src/test/java/ch/famoser/mensa/services/providers/ETHMensaProvider2Test.kt +++ b/app/src/test/java/ch/famoser/mensa/services/providers/ETHMensaProvider2Test.kt @@ -5,6 +5,8 @@ import ch.famoser.mensa.testServices.InMemoryAssetService import ch.famoser.mensa.testServices.NoCacheService import com.google.common.truth.Truth.assertThat import org.junit.Test +import java.time.Instant +import java.util.Date class ETHMensaProvider2Test: BaseProviderTest() { private fun getEthLocationsJson(): String { @@ -21,6 +23,15 @@ class ETHMensaProvider2Test: BaseProviderTest() { "facilityId": 9, "timeSlug": "lunch", "infoUrlSlug": "zentrum/mensa-polyterrasse" + }, + { + "id": "67708910-6bab-4890-9c66-46cdc490dcbf", + "title": "Archimedes", + "mealTime": "11:00-14:00", + "idSlug": 8, + "facilityId": 8, + "timeSlug": "lunch", + "infoUrlSlug": "zentrum/archimedes" } ] } @@ -42,10 +53,10 @@ class ETHMensaProvider2Test: BaseProviderTest() { val response = provider.getMenus(date, AbstractMensaProvider.Language.German, true) // assert - val polymensa = locations.first().mensas.first() - assertThat(response).contains(polymensa) assertThat(locations).hasSize(1) - assertThat(locations.first().mensas).hasSize(1) - assertThat(locations.first().mensas.filter { it.menus.isNotEmpty() }).isNotEmpty() + for (mensa in locations.first().mensas) { + assertThat(response).contains(mensa) + assertThat(mensa.menus).isNotEmpty() + } } } \ No newline at end of file