SyncOrchestrator: restore the initial sync step (#4242)
* SyncOrchestrator: restore the initial sync step * Try having internal and public functions to be able to unit test the initial sync and the state changes separately, as well as the initial sync followed by a state change * Only manually start sync if the `SyncService` was previously stopped, don't do it for `Offline` state
This commit is contained in:
parent
a28796106b
commit
51f5087ef2
2 changed files with 75 additions and 16 deletions
|
|
@ -31,6 +31,50 @@ class SyncOrchestratorTest {
|
|||
@get:Rule
|
||||
val warmUpRule = WarmUpRule()
|
||||
|
||||
@Test
|
||||
fun `when the sync wasn't running before, an initial sync will take place, even with no network`() = runTest {
|
||||
val startSyncRecorder = lambdaRecorder<Result<Unit>> { Result.success(Unit) }
|
||||
val syncService = FakeSyncService(initialSyncState = SyncState.Idle).apply {
|
||||
startSyncLambda = startSyncRecorder
|
||||
}
|
||||
val networkMonitor = FakeNetworkMonitor(initialStatus = NetworkStatus.Disconnected)
|
||||
val syncOrchestrator = createSyncOrchestrator(
|
||||
syncService = syncService,
|
||||
networkMonitor = networkMonitor,
|
||||
)
|
||||
|
||||
// We start observing with an initial sync
|
||||
syncOrchestrator.start()
|
||||
|
||||
// Advance the time just enough to make sure the initial sync has run
|
||||
advanceTimeBy(1.milliseconds)
|
||||
startSyncRecorder.assertions().isCalledOnce()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when the sync wasn't running before, an initial sync will take place`() = runTest {
|
||||
val startSyncRecorder = lambdaRecorder<Result<Unit>> { Result.success(Unit) }
|
||||
val syncService = FakeSyncService(initialSyncState = SyncState.Idle).apply {
|
||||
startSyncLambda = startSyncRecorder
|
||||
}
|
||||
val networkMonitor = FakeNetworkMonitor(initialStatus = NetworkStatus.Connected)
|
||||
val syncOrchestrator = createSyncOrchestrator(
|
||||
syncService = syncService,
|
||||
networkMonitor = networkMonitor,
|
||||
)
|
||||
|
||||
// We start observing with an initial sync
|
||||
syncOrchestrator.start()
|
||||
|
||||
// Advance the time just enough to make sure the initial sync has run
|
||||
advanceTimeBy(1.milliseconds)
|
||||
startSyncRecorder.assertions().isCalledOnce()
|
||||
|
||||
// If we wait for a while, the sync will not be started again by the observer since it's already running
|
||||
advanceTimeBy(10.seconds)
|
||||
startSyncRecorder.assertions().isCalledOnce()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `when the app goes to background and the sync was running, it will be stopped after a delay`() = runTest {
|
||||
val stopSyncRecorder = lambdaRecorder<Result<Unit>> { Result.success(Unit) }
|
||||
|
|
@ -46,7 +90,7 @@ class SyncOrchestratorTest {
|
|||
)
|
||||
|
||||
// We start observing
|
||||
syncOrchestrator.start()
|
||||
syncOrchestrator.observeStates()
|
||||
|
||||
// Advance the time to make sure the orchestrator has had time to start processing the inputs
|
||||
advanceTimeBy(100.milliseconds)
|
||||
|
|
@ -78,7 +122,7 @@ class SyncOrchestratorTest {
|
|||
)
|
||||
|
||||
// We start observing
|
||||
syncOrchestrator.start()
|
||||
syncOrchestrator.observeStates()
|
||||
|
||||
// Advance the time to make sure the orchestrator has had time to start processing the inputs
|
||||
advanceTimeBy(100.milliseconds)
|
||||
|
|
@ -126,7 +170,7 @@ class SyncOrchestratorTest {
|
|||
)
|
||||
|
||||
// We start observing
|
||||
syncOrchestrator.start()
|
||||
syncOrchestrator.observeStates()
|
||||
|
||||
// Advance the time to make sure the orchestrator has had time to start processing the inputs
|
||||
advanceTimeBy(100.milliseconds)
|
||||
|
|
@ -169,7 +213,7 @@ class SyncOrchestratorTest {
|
|||
)
|
||||
|
||||
// We start observing
|
||||
syncOrchestrator.start()
|
||||
syncOrchestrator.observeStates()
|
||||
|
||||
// Advance the time to make sure the orchestrator has had time to start processing the inputs
|
||||
advanceTimeBy(100.milliseconds)
|
||||
|
|
@ -213,7 +257,7 @@ class SyncOrchestratorTest {
|
|||
)
|
||||
|
||||
// We start observing
|
||||
syncOrchestrator.start()
|
||||
syncOrchestrator.observeStates()
|
||||
|
||||
// Advance the time to make sure the orchestrator has had time to start processing the inputs
|
||||
advanceTimeBy(100.milliseconds)
|
||||
|
|
@ -256,7 +300,7 @@ class SyncOrchestratorTest {
|
|||
)
|
||||
|
||||
// We start observing
|
||||
syncOrchestrator.start()
|
||||
syncOrchestrator.observeStates()
|
||||
|
||||
// Advance the time to make sure the orchestrator has had time to start processing the inputs
|
||||
advanceTimeBy(100.milliseconds)
|
||||
|
|
@ -285,7 +329,7 @@ class SyncOrchestratorTest {
|
|||
)
|
||||
|
||||
// We start observing
|
||||
syncOrchestrator.start()
|
||||
syncOrchestrator.observeStates()
|
||||
|
||||
// This should still not trigger a sync, since there is no network
|
||||
advanceTimeBy(10.seconds)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue