DLNA renderers, app updates told like Librarian, acquisition without Lidarr, Collection and admin rework (M502–M505, M542) #156

Merged
bvandeusen merged 117 commits from dev into main 2026-10-26 12:32:33 -04:00
Showing only changes of commit 46e1dd6c9c - Show all commits
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test
import retrofit2.Response
import retrofit2.Retrofit
import kotlin.test.assertEquals
import kotlin.test.assertNull
/**
* The server returns at most 1000 changes a call (#5654). One page per
@@ -38,7 +39,8 @@ class SyncControllerTest {
every { sessionCookie } returns MutableStateFlow(null)
}
private val networkStatus: NetworkStatusController = mockk {
every { state } returns MutableStateFlow(ServerHealth.Healthy)
// Offline, so construction starts no pass; each test runs one itself.
every { state } returns MutableStateFlow(ServerHealth.Offline)
}
// The cursor round-trips through the DAO, so it is held for real.
@@ -59,11 +61,13 @@ class SyncControllerTest {
coEvery { api.sync(1000) } returns page(2000, deletedTracks = listOf("merged-away"))
coEvery { api.sync(2000) } returns noContent()
SyncController(
val controller = SyncController(
metadataDao, mockk<CachedArtistDao>(relaxed = true), mockk<CachedAlbumDao>(relaxed = true),
trackDao, authStore, backgroundScope, networkStatus, retrofit,
)
testScheduler.advanceUntilIdle()
controller.syncSafe()
assertNull(controller.lastSyncError.value)
coVerify(exactly = 1) { api.sync(2000) }
coVerify { trackDao.deleteByIds(listOf("merged-away")) }
@@ -75,11 +79,13 @@ class SyncControllerTest {
stored = SyncMetadataEntity(cursor = 500)
coEvery { api.sync(500) } returns page(500)
SyncController(
val controller = SyncController(
metadataDao, mockk<CachedArtistDao>(relaxed = true), mockk<CachedAlbumDao>(relaxed = true),
trackDao, authStore, backgroundScope, networkStatus, retrofit,
)
testScheduler.advanceUntilIdle()
controller.syncSafe()
assertNull(controller.lastSyncError.value)
coVerify(exactly = 1) { api.sync(500) }
}
@@ -91,11 +97,13 @@ class SyncControllerTest {
coEvery { api.sync(0) } returns page(1000)
coEvery { api.sync(1000) } returns noContent()
SyncController(
val controller = SyncController(
metadataDao, mockk<CachedArtistDao>(relaxed = true), mockk<CachedAlbumDao>(relaxed = true),
trackDao, authStore, backgroundScope, networkStatus, retrofit,
)
testScheduler.advanceUntilIdle()
controller.syncSafe()
assertNull(controller.lastSyncError.value)
coVerify(exactly = 1) { api.sync(1000) }
assertEquals(1000L, stored?.cursor)