package link.roadio.riff.ui import link.roadio.riff.indexer.core.media.MediaId import link.roadio.riff.player.storage.PlaybackCheckpoint import link.roadio.riff.player.storage.PlaybackQueueKind import link.roadio.riff.player.storage.PlaybackQueueOccurrence import link.roadio.riff.player.storage.PlaybackQueueSnapshot import org.junit.Assert.assertEquals import org.junit.Assert.assertSame import org.junit.Test class PreparedQueuePresentationTest { @Test fun repeatedMediaUsesTheExactResumedOccurrenceWithoutRewalkingTheContext() { val first = BrowserItem("chapter:a", "Chapter A", BrowserKind.TRACK, mediaId = MediaId(7), sourceBindingId = 101) val second = first.copy(id = "chapter:b", label = "Chapter B", sourceBindingId = 102) val root = BrowserItem("root", "Library", BrowserKind.ROOT) val queue = PlaybackQueueSnapshot( 17, PlaybackQueueKind.MANUAL, 1, true, listOf(PlaybackQueueOccurrence(21, 0, 0, MediaId(7)), PlaybackQueueOccurrence(23, 1, 1, MediaId(7))), PlaybackCheckpoint(23), contextKey = "album:17", albumContext = true, ) val ready = prepareQueuePresentation(root, emptyList(), queue, listOf(first, second)) assertEquals(listOf(MediaId(7), MediaId(7)), ready.mediaIds) assertEquals(1, ready.index) assertSame(second, ready.track) } @Test fun permanentPlaylistDoesNotInterpretItsOrdinalAsACurrentBrowseOrdinal() { val selected = BrowserItem("track:7", "Selected", BrowserKind.TRACK, mediaId = MediaId(7)) val wrong = selected.copy(label = "Unrelated browse occurrence") val root = BrowserItem("root", "Library", BrowserKind.ROOT) val queue = PlaybackQueueSnapshot( 17, PlaybackQueueKind.PERMANENT_PLAYLIST, 1, false, listOf(PlaybackQueueOccurrence(21, 0, 0, MediaId(7))), PlaybackCheckpoint(21), contextKey = "playlist:17", ) assertSame(selected, prepareQueuePresentation(root, listOf(selected), queue, listOf(wrong)).track) } @Test fun rowIdentitySearchDoesNotDecodeComparisonKeysOrUnselectedRows() { var keyReads = 0 var rowReads = 0 val selected = BrowserItem("row:199999", "Selected", BrowserKind.TRACK) val rows = object : BrowserRows() { override val size = 200_000 override fun rowId(index: Int) = "row:$index" override fun key(index: Int): BrowserRowKey { keyReads++ return BrowserRowKey(rowId(index), "Track", BrowserKind.TRACK) } override fun get(index: Int): BrowserItem { rowReads++ return selected } } assertSame(selected, rows.rowById(selected.id)) assertEquals(0, keyReads) assertEquals(1, rowReads) } }