mirror of
https://github.com/austinried/subtracks.git
synced 2026-11-10 15:11:58 +01:00
address review: drop the dead disc query, pin the fetch bound, cover multi-page disc prune
This commit is contained in:
@@ -312,7 +312,7 @@ class SubsonicSourceTest {
|
||||
assertEquals(listOf(0L, 1L, 2L), batch.sortedBy { it.position }.map { it.position })
|
||||
assertEquals((1..3).map { "$playlistId-s$it" }, batch.sortedBy { it.position }.map { it.songId })
|
||||
}
|
||||
assertTrue(maxInFlight.get() >= 2)
|
||||
assertTrue(maxInFlight.get() in 2..MAX_CONCURRENT_FETCHES)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -389,7 +389,7 @@ class SubsonicSourceTest {
|
||||
val songs = SubsonicSource(1, client()).songs().toList().flatten()
|
||||
|
||||
assertEquals(4, songs.size)
|
||||
assertTrue(maxInFlight.get() >= 2)
|
||||
assertTrue(maxInFlight.get() in 2..MAX_CONCURRENT_FETCHES)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -10,6 +10,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.subtracks.data.db.SubtracksDatabase
|
||||
import com.subtracks.data.model.Album
|
||||
import com.subtracks.data.model.Artist
|
||||
import com.subtracks.data.model.DiscKey
|
||||
import com.subtracks.data.model.Playlist
|
||||
import com.subtracks.data.model.PlaylistSong
|
||||
import com.subtracks.data.model.Song
|
||||
@@ -542,6 +543,34 @@ class SyncServiceTest {
|
||||
assertEquals(survivors.sorted(), db.libraryDao().artistIds(1).sorted())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun partialDiscPruneAcrossManyPagesKeepsTheSurvivors() =
|
||||
runTest {
|
||||
insertSource()
|
||||
val total = 1100
|
||||
|
||||
fun albumsWithDiscTitles(predicate: (Int) -> Boolean) =
|
||||
(1..total).map { index ->
|
||||
if (predicate(index)) {
|
||||
album("al$index").copy(discTitles = mapOf(1L to "Disc $index"))
|
||||
} else {
|
||||
album("al$index")
|
||||
}
|
||||
}
|
||||
val source = FakeMusicSource(albums = albumsWithDiscTitles { true })
|
||||
|
||||
SyncService(db, source).sync()
|
||||
assertEquals(total, storedDiscKeys().size)
|
||||
|
||||
source.albums = albumsWithDiscTitles { it % 2 == 0 }
|
||||
|
||||
SyncService(db, source).sync()
|
||||
|
||||
val survivors = (1..total).filter { it % 2 == 0 }.map { "al$it" }.toSet()
|
||||
assertEquals(survivors.size, storedDiscKeys().size)
|
||||
assertEquals(survivors, storedDiscKeys().map { it.albumId }.toSet())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun anIdenticalSyncDoesNotRewriteRows() =
|
||||
runTest {
|
||||
@@ -571,6 +600,11 @@ class SyncServiceTest {
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun storedDiscKeys(): List<DiscKey> =
|
||||
db
|
||||
.libraryDao()
|
||||
.discKeysAfter(1, "", 0L, 100_000)
|
||||
|
||||
private suspend fun storedDiscs(albumId: String): Map<Long, String> =
|
||||
db
|
||||
.libraryDao()
|
||||
|
||||
Reference in New Issue
Block a user