diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/HomeRowConfig.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/HomeRowConfig.kt index 8468b012..d760d445 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/HomeRowConfig.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/HomeRowConfig.kt @@ -83,6 +83,7 @@ sealed class HomeRowConfig { } } +@Serializable data class HomeRowConfigDisplay( val title: String, val config: HomeRowConfig, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomePageSettings.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomePageSettings.kt index b12d8ded..61a2ec2a 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomePageSettings.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/main/settings/HomePageSettings.kt @@ -52,7 +52,6 @@ import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.update -import kotlinx.serialization.json.Json import org.jellyfin.sdk.api.client.ApiClient import org.jellyfin.sdk.api.client.extensions.userLibraryApi import org.jellyfin.sdk.model.api.CollectionType @@ -61,7 +60,6 @@ import org.jellyfin.sdk.model.api.SortOrder import org.jellyfin.sdk.model.api.request.GetGenresRequest import org.jellyfin.sdk.model.api.request.GetItemsRequest import org.jellyfin.sdk.model.api.request.GetLatestMediaRequest -import timber.log.Timber import java.util.UUID import javax.inject.Inject @@ -151,8 +149,8 @@ class HomePageSettingsViewModel _state.update { it.copy(rows = rowConfig) } - val json = Json.encodeToString(rowConfig.map { it.config }) - Timber.v("json=$json") +// val json = Json.encodeToString(rowConfig) +// Timber.v("json=$json") fetchRowData() } diff --git a/app/src/test/java/com/github/damontecres/wholphin/test/TestHomeRowSamples.kt b/app/src/test/java/com/github/damontecres/wholphin/test/TestHomeRowSamples.kt new file mode 100644 index 00000000..ec3bf4eb --- /dev/null +++ b/app/src/test/java/com/github/damontecres/wholphin/test/TestHomeRowSamples.kt @@ -0,0 +1,112 @@ +package com.github.damontecres.wholphin.test + +import com.github.damontecres.wholphin.data.model.HomeRowConfig +import com.github.damontecres.wholphin.data.model.HomeRowConfigDisplay +import com.github.damontecres.wholphin.data.model.HomeRowViewOptions +import com.github.damontecres.wholphin.preferences.PrefContentScale +import com.github.damontecres.wholphin.ui.AspectRatio +import com.github.damontecres.wholphin.ui.components.ViewOptionImageType +import kotlinx.serialization.json.Json +import org.jellyfin.sdk.model.UUID +import org.junit.Assert +import org.junit.Test +import kotlin.reflect.KClass + +class TestHomeRowSamples { + companion object { + val SAMPLES = + listOf( + HomeRowConfigDisplay( + title = "Recently added", + config = + HomeRowConfig.RecentlyAdded( + id = 0, + parentId = UUID.randomUUID(), + viewOptions = + HomeRowViewOptions( + heightDp = 100, + spacing = 8, + contentScale = PrefContentScale.CROP, + aspectRatio = AspectRatio.FOUR_THREE, + imageType = ViewOptionImageType.THUMB, + showTitles = false, + useSeries = false, + ), + ), + ), + HomeRowConfigDisplay( + title = "Recently released", + config = + HomeRowConfig.RecentlyReleased( + id = 0, + parentId = UUID.randomUUID(), + viewOptions = HomeRowViewOptions(), + ), + ), + HomeRowConfigDisplay( + title = "Genres", + config = + HomeRowConfig.Genres( + id = 0, + parentId = UUID.randomUUID(), + viewOptions = HomeRowViewOptions(), + ), + ), + HomeRowConfigDisplay( + title = "Continue watching", + config = + HomeRowConfig.ContinueWatching( + id = 0, + viewOptions = HomeRowViewOptions(), + ), + ), + HomeRowConfigDisplay( + title = "Next up", + config = + HomeRowConfig.NextUp( + id = 0, + viewOptions = HomeRowViewOptions(), + ), + ), + HomeRowConfigDisplay( + title = "Combined", + config = + HomeRowConfig.ContinueWatchingCombined( + id = 0, + viewOptions = HomeRowViewOptions(), + ), + ), + ) + } + + @Test + fun `Check all types have a sample`() { + // This ensures there is a sample for each possible HomeRowConfig type + val foundTypes = mutableSetOf>() + SAMPLES.forEach { + when (it.config) { + is HomeRowConfig.ContinueWatching -> foundTypes.add(HomeRowConfig.ContinueWatching::class) + is HomeRowConfig.ContinueWatchingCombined -> foundTypes.add(HomeRowConfig.ContinueWatchingCombined::class) + is HomeRowConfig.Genres -> foundTypes.add(HomeRowConfig.Genres::class) + is HomeRowConfig.NextUp -> foundTypes.add(HomeRowConfig.NextUp::class) + is HomeRowConfig.RecentlyAdded -> foundTypes.add(HomeRowConfig.RecentlyAdded::class) + is HomeRowConfig.RecentlyReleased -> foundTypes.add(HomeRowConfig.RecentlyReleased::class) + } + } + Assert.assertEquals(HomeRowConfig::class.sealedSubclasses.size, foundTypes.size) + } + + @Test + fun `Print sample JSON`() { + // This just prints out the JSON of the samples so developers can review + val json = + Json { + ignoreUnknownKeys = true + isLenient = true + prettyPrint = true + } + val string = json.encodeToString(SAMPLES) + println(string) + json.decodeFromString>(string) + } +}