0.2.40
This commit is contained in:
@@ -5,6 +5,8 @@ import com.ponzischeme89.memby.data.model.UserItemData
|
||||
import com.ponzischeme89.memby.ui.detail.availableSeasons
|
||||
import com.ponzischeme89.memby.ui.detail.defaultSeason
|
||||
import com.ponzischeme89.memby.ui.detail.episodesForSeason
|
||||
import com.ponzischeme89.memby.ui.detail.nextEpisodeToWatch
|
||||
import com.ponzischeme89.memby.ui.detail.primaryActionLabel
|
||||
import com.ponzischeme89.memby.ui.detail.seasonLabel
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
@@ -15,13 +17,14 @@ class SeriesDetailsTest {
|
||||
season: Int,
|
||||
number: Int,
|
||||
played: Boolean = false,
|
||||
resumeTicks: Long = 0,
|
||||
) = BaseItem(
|
||||
id = id,
|
||||
name = "Episode $number",
|
||||
type = "Episode",
|
||||
parentIndexNumber = season,
|
||||
indexNumber = number,
|
||||
userData = UserItemData(played = played),
|
||||
userData = UserItemData(played = played, playbackPositionTicks = resumeTicks),
|
||||
)
|
||||
|
||||
@Test
|
||||
@@ -58,6 +61,31 @@ class SeriesDetailsTest {
|
||||
assertEquals(2, defaultSeason(episodes))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `an old resume marker does not pull schedule playback behind later progress`() {
|
||||
val episodes = (1..7).map { number ->
|
||||
episode(
|
||||
id = "s3e$number",
|
||||
season = 3,
|
||||
number = number,
|
||||
played = number in 2..6,
|
||||
resumeTicks = when (number) {
|
||||
1 -> 60_000_000L
|
||||
7 -> 120_000_000L
|
||||
else -> 0L
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
val next = requireNotNull(nextEpisodeToWatch(episodes))
|
||||
|
||||
assertEquals("s3e7", next.id)
|
||||
assertEquals("Resume S03E07", primaryActionLabel(
|
||||
BaseItem(id = "series", name = "Series", type = "Series"),
|
||||
next,
|
||||
))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `season zero is labelled specials`() {
|
||||
assertEquals("Specials", seasonLabel(0))
|
||||
|
||||
@@ -8,6 +8,27 @@ import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
|
||||
class PlaybackRecoveryTest {
|
||||
|
||||
@Test
|
||||
fun `libmpv takes codec failures only after Media3 recovery is exhausted`() {
|
||||
val codecFailure = describePlaybackFailure(
|
||||
PlaybackException.ERROR_CODE_DECODING_FORMAT_UNSUPPORTED,
|
||||
)
|
||||
|
||||
assertFalse(shouldUseLibmpvFallback(codecFailure, completedAttempts = 0))
|
||||
assertFalse(shouldUseLibmpvFallback(codecFailure, completedAttempts = 1))
|
||||
assertTrue(shouldUseLibmpvFallback(codecFailure, completedAttempts = 2))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `libmpv does not replace Media3 network recovery`() {
|
||||
val networkFailure = describePlaybackFailure(
|
||||
PlaybackException.ERROR_CODE_IO_NETWORK_CONNECTION_FAILED,
|
||||
)
|
||||
|
||||
assertFalse(shouldUseLibmpvFallback(networkFailure, completedAttempts = 2))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun networkFailuresAreSafeToRetry() {
|
||||
val failure = describePlaybackFailure(
|
||||
|
||||
Reference in New Issue
Block a user