close the test gaps a QA pass found, and de-flake the flaky ones

Verify the Subsonic token hash and salt freshness, and fall back to per-album
songs when the empty-search probe fails with an I/O error instead of
aborting the whole sync.

Add a real-server sync test that mirrors navidrome and gonic into Room and
reads the rows back, plus SyncManager coverage for the success, coalescing
and mid-sync-failure paths.

Cover the sort mapping and delete/ping ViewModels, the download engine's
request flags, the queue helpers, download prefs and migration data
preservation.

Drop the leaked collectors in the ViewModel/queue tests, document the
screenshot tests as render smoke tests, bind a real search term in the
trigram plan test, and assert a positive in-flight invariant alongside the
concurrency timing checks.
This commit is contained in:
austinried
2026-10-04 00:30:04 +00:00
parent 5cbe4c6839
commit 684cc5a287
27 changed files with 989 additions and 25 deletions
+7 -3
View File
@@ -75,12 +75,16 @@ ksp {
arg("room.schemaLocation", "$projectDir/schemas")
}
val integrationTestClassName = "com.subtracks.data.source.subsonic.SubsonicSourceIntegrationTest"
val integrationTestClasses =
listOf(
"com.subtracks.data.source.subsonic.SubsonicSourceIntegrationTest",
"com.subtracks.data.sync.SyncServiceIntegrationTest",
)
tasks.withType<Test>().configureEach {
if (name.endsWith("UnitTest")) {
filter {
excludeTestsMatching(integrationTestClassName)
integrationTestClasses.forEach { excludeTestsMatching(it) }
}
}
}
@@ -93,7 +97,7 @@ tasks.register<Test>("integrationTest") {
testClassesDirs = files(provider { unitTest.get().testClassesDirs })
classpath = files(provider { unitTest.get().classpath })
filter {
includeTestsMatching(integrationTestClassName)
integrationTestClasses.forEach { includeTestsMatching(it) }
}
}