0.2.56 - Reliable trailer playback

This commit is contained in:
ponzischeme89
2026-08-12 11:05:07 +12:00
parent 9777eb0952
commit f2d052dbf6
22 changed files with 1438 additions and 55 deletions
@@ -13,6 +13,8 @@ import com.ponzischeme89.memby.data.model.GatewayServiceStatus
import com.ponzischeme89.memby.data.model.GatewayIntro
import com.ponzischeme89.memby.data.model.GatewayTrickplay
import com.ponzischeme89.memby.data.model.GatewayFeatures
import com.ponzischeme89.memby.data.model.GatewayTrailerAvailability
import com.ponzischeme89.memby.data.model.GatewayTrailerPlayback
import com.ponzischeme89.memby.data.model.RecommendationOnboarding
import kotlinx.serialization.json.Json
import org.junit.Assert.assertEquals
@@ -28,6 +30,21 @@ import org.junit.Test
* side, this fails before a TV ever sees it.
*/
class GatewayPayloadTest {
@Test
fun `decodes trailer availability and resolved provider candidate`() {
val availability = json.decodeFromString<GatewayTrailerAvailability>(
"""{"available":true,"providers":["local","apple","youtube"]}""",
)
val playback = json.decodeFromString<GatewayTrailerPlayback>(
"""{"candidateId":"youtube-a1","provider":"youtube","url":"https://media.example/trailer.mp4","title":"Arrival trailer","playMethod":"DirectPlay"}""",
)
assertTrue(availability.available)
assertEquals(listOf("local", "apple", "youtube"), availability.providers)
assertEquals("youtube-a1", playback.candidateId)
assertEquals("Arrival trailer", playback.title)
}
@Test
fun `partially populated items decode without inventing an identity`() {
val item = json.decodeFromString<BaseItem>(
@@ -0,0 +1,25 @@
package com.ponzischeme89.memby.data
import com.ponzischeme89.memby.data.model.TrailerPlaybackRequest
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
class TrailerSupportTest {
@Test
fun rejectedCandidatesAreRecordedOnceInOrder() {
val request = TrailerPlaybackRequest("film", "A Film", excludedCandidateIds = listOf("apple"))
val next = afterTrailerCandidate(afterTrailerCandidate(request, "youtube"), "apple")
assertEquals(listOf("apple", "youtube"), next.excludedCandidateIds)
assertEquals("film", next.subjectId)
}
@Test
fun everyTrailerFailureUsesProviderFallback() {
assertTrue(shouldFallbackTrailer(isTrailer = true))
assertFalse(shouldFallbackTrailer(isTrailer = false))
}
}