Synchronize saved-picker test with Android main queue
All checks were successful
review/code-claude No blocking findings; 8 non-blocking notes (see PR comment)
review/design-claude Design review PASS: no blocking finding; 8 non-blocking notes

This commit is contained in:
justinzeus 2026-11-07 18:18:50 +01:00
parent 33cca64eba
commit 5811ab0555
2 changed files with 12 additions and 1 deletions

View file

@ -69,7 +69,12 @@ class SavedPeoplePickerTest {
WolfskinApp(server, users.first(), navigation, UserPreferences(AppPreferences.getDefaultInstance(), null), WolfskinApp(server, users.first(), navigation, UserPreferences(AppPreferences.getDefaultInstance(), null),
viewModel = model, homeContent = { _, _, _, _ -> }) viewModel = model, homeContent = { _, _, _, _ -> })
} }
rule.waitUntil(5_000) { entered.get() && session.state?.people?.size == 3 } rule.waitUntil(5_000) {
// IO completion publishes Compose state on Android's queue, not the test frame clock.
androidx.compose.runtime.snapshots.Snapshot.sendApplyNotifications()
org.robolectric.Shadows.shadowOf(android.os.Looper.getMainLooper()).idle()
entered.get() && session.state?.people?.size == 3
}
users.forEach { rule.onNodeWithText(it.name!!).assertIsDisplayed() } users.forEach { rule.onNodeWithText(it.name!!).assertIsDisplayed() }
rule.runOnIdle { rule.runOnIdle {
assertTrue(session.state!!.pickerVisible) assertTrue(session.state!!.pickerVisible)

View file

@ -43,6 +43,12 @@ execution order. Keep worker heap and parallelism unchanged between samples.
`PersonPickerSessionTest` must also pass late in the full app JVM, not just alone `PersonPickerSessionTest` must also pass late in the full app JVM, not just alone
or promoted to the front by previous failures. or promoted to the front by previous failures.
`SavedPeoplePickerTest` publishes pending Compose snapshots and pumps Android's
main queue while awaiting the saved household, just like the session-picker
await above. Its five-second deadline, blocked first network response and saved
identity assertions are unchanged; the virtual frame clock alone does not drain
an IO continuation queued on Android's host looper.
## Saved-person launch and DNS ## Saved-person launch and DNS
Launch restores an unprotected saved Jellyfin login from local storage before Launch restores an unprotected saved Jellyfin login from local storage before