Build household requests under Settings
This commit is contained in:
parent
7a878b2d81
commit
5b0703aec5
58 changed files with 1575 additions and 23 deletions
|
|
@ -0,0 +1,52 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
package org.justinvisser.wolfskin.tv
|
||||
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.test.advanceTimeBy
|
||||
import kotlinx.coroutines.test.runCurrent
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
import org.justinvisser.wolfskin.design.ComingInRequest
|
||||
import org.justinvisser.wolfskin.design.ComingInSnapshot
|
||||
import org.justinvisser.wolfskin.design.ComingInStage
|
||||
import org.justinvisser.wolfskin.design.ComingInStatus
|
||||
import org.justinvisser.wolfskin.design.ShellPerson
|
||||
import org.justinvisser.wolfskin.design.ShellState
|
||||
|
||||
/** The fake clock checks refresh boundaries and cancellation without a server or a real wait. */
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
class RequestsRefreshTest {
|
||||
@Test fun foregroundOpenUnsettledSettledAndStoppedTransitions() = runTest {
|
||||
val state = ShellState(listOf(ShellPerson("justin", "Justin", "J", false)), "justin")
|
||||
val request = ComingInRequest("one", "movie", 1, "One", "justin", "Justin", "shared", "Shared", ComingInStage.Waiting)
|
||||
state.requests.update(ComingInSnapshot(status = ComingInStatus.Ready, signedIn = true))
|
||||
var reads = 0
|
||||
val active = launch { refreshRequestsWhileStarted(state) { reads++ } }
|
||||
runCurrent()
|
||||
assertEquals(1, reads)
|
||||
advanceTimeBy(30_000); runCurrent()
|
||||
assertEquals("Closed and settled does not poll", 1, reads)
|
||||
state.openRequests()
|
||||
advanceTimeBy(29_999); runCurrent()
|
||||
assertEquals(1, reads)
|
||||
advanceTimeBy(1); runCurrent()
|
||||
assertEquals("An open empty sheet still refreshes at 30 seconds", 2, reads)
|
||||
state.closeRequests()
|
||||
state.requests.update(ComingInSnapshot(listOf(request), ComingInStatus.Ready, signedIn = true))
|
||||
advanceTimeBy(30_000); runCurrent()
|
||||
assertEquals("An unsettled request refreshes after the sheet closes", 3, reads)
|
||||
state.requests.update(ComingInSnapshot(listOf(request.copy(stage = ComingInStage.Ready)), ComingInStatus.Ready, signedIn = true))
|
||||
advanceTimeBy(30_000); runCurrent()
|
||||
assertEquals("Ready requests stop polling", 3, reads)
|
||||
active.cancel(); runCurrent()
|
||||
state.openRequests()
|
||||
advanceTimeBy(60_000); runCurrent()
|
||||
assertEquals("A stopped lifecycle cannot poll", 3, reads)
|
||||
val resumed = launch { refreshRequestsWhileStarted(state) { reads++ } }
|
||||
runCurrent()
|
||||
assertEquals("Returning to the foreground refreshes immediately", 4, reads)
|
||||
resumed.cancel()
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue