@@ -257,7 +257,7 @@ test('auto-stop', async (t) => {
257
257
)
258
258
const [ invitorProject , inviteeProject ] = projects
259
259
260
- const generatedObservations = generate ( 'observation' , { count : 2 } )
260
+ const generatedObservations = generate ( 'observation' , { count : 3 } )
261
261
262
262
invitorProject . $sync . start ( { autostopDataSyncAfter : 10_000 } )
263
263
inviteeProject . $sync . start ( { autostopDataSyncAfter : 10_000 } )
@@ -302,7 +302,7 @@ test('auto-stop', async (t) => {
302
302
"invitee hasn't auto-stopped yet because the timer has been restarted"
303
303
)
304
304
305
- const invitorProjectOnSyncDisabled = pEvent (
305
+ let invitorProjectOnSyncDisabled = pEvent (
306
306
invitorProject . $sync ,
307
307
'sync-state' ,
308
308
( { data : { isSyncEnabled } } ) => ! isSyncEnabled
@@ -327,6 +327,109 @@ test('auto-stop', async (t) => {
327
327
! inviteeProject . $sync . getState ( ) . data . isSyncEnabled ,
328
328
'invitee has auto-stopped'
329
329
)
330
+
331
+ invitorProject . $sync . setAutostopDataSyncTimeout ( 20_000 )
332
+ assert (
333
+ ! invitorProject . $sync . getState ( ) . data . isSyncEnabled ,
334
+ 'invitor is still stopped'
335
+ )
336
+
337
+ invitorProject . $sync . start ( )
338
+
339
+ const observation3 = await invitorProject . observation . create (
340
+ valueOf ( generatedObservations [ 2 ] )
341
+ )
342
+ await waitForSync ( projects , 'full' )
343
+ assert (
344
+ await inviteeProject . observation . getByDocId ( observation3 . docId ) ,
345
+ 'invitee receives doc'
346
+ )
347
+
348
+ await clock . tickAsync ( 19_000 )
349
+
350
+ assert (
351
+ invitorProject . $sync . getState ( ) . data . isSyncEnabled ,
352
+ "invitor hasn't auto-stopped"
353
+ )
354
+
355
+ invitorProjectOnSyncDisabled = pEvent (
356
+ invitorProject . $sync ,
357
+ 'sync-state' ,
358
+ ( { data : { isSyncEnabled } } ) => ! isSyncEnabled
359
+ )
360
+
361
+ clock . tick ( 2_000 )
362
+
363
+ await invitorProjectOnSyncDisabled
364
+ assert (
365
+ ! invitorProject . $sync . getState ( ) . data . isSyncEnabled ,
366
+ 'invitor has auto-stopped'
367
+ )
368
+
369
+ invitorProject . $sync . start ( { autostopDataSyncAfter : 999_999 } )
370
+ invitorProject . $sync . setAutostopDataSyncTimeout ( 20_000 )
371
+
372
+ assert (
373
+ invitorProject . $sync . getState ( ) . data . isSyncEnabled ,
374
+ 'invitor has not yet auto-stopped'
375
+ )
376
+
377
+ invitorProjectOnSyncDisabled = pEvent (
378
+ invitorProject . $sync ,
379
+ 'sync-state' ,
380
+ ( { data : { isSyncEnabled } } ) => ! isSyncEnabled
381
+ )
382
+ clock . tick ( 21_000 )
383
+ await invitorProjectOnSyncDisabled
384
+
385
+ assert (
386
+ ! invitorProject . $sync . getState ( ) . data . isSyncEnabled ,
387
+ 'invitor has auto-stopped'
388
+ )
389
+ } )
390
+
391
+ test ( 'disabling auto-stop timeout' , async ( t ) => {
392
+ const clock = FakeTimers . install ( { shouldAdvanceTime : true } )
393
+ t . after ( ( ) => clock . uninstall ( ) )
394
+
395
+ const managers = await createManagers ( 2 , t )
396
+ const [ invitor , ...invitees ] = managers
397
+
398
+ const disconnect = connectPeers ( managers , { discovery : false } )
399
+ t . after ( disconnect )
400
+
401
+ const projectId = await invitor . createProject ( { name : 'mapeo' } )
402
+ await invite ( { invitor, invitees, projectId } )
403
+
404
+ const projects = await Promise . all (
405
+ managers . map ( ( m ) => m . getProject ( projectId ) )
406
+ )
407
+ const [ invitorProject , inviteeProject ] = projects
408
+
409
+ invitorProject . $sync . start ( { autostopDataSyncAfter : 10_000 } )
410
+ invitorProject . $sync . setAutostopDataSyncTimeout ( null )
411
+
412
+ inviteeProject . $sync . start ( )
413
+
414
+ assert (
415
+ invitorProject . $sync . getState ( ) . data . isSyncEnabled ,
416
+ "invitor hasn't auto-stopped yet"
417
+ )
418
+
419
+ const observation1 = await invitorProject . observation . create (
420
+ valueOf ( generate ( 'observation' ) [ 0 ] )
421
+ )
422
+ await waitForSync ( projects , 'full' )
423
+ assert (
424
+ await inviteeProject . observation . getByDocId ( observation1 . docId ) ,
425
+ 'invitee receives doc'
426
+ )
427
+
428
+ await clock . tickAsync ( 999_999_999 )
429
+ assert (
430
+ invitorProject . $sync . getState ( ) . data . isSyncEnabled ,
431
+ "invitor still hasn't auto-stopped"
432
+ )
330
433
} )
331
434
332
435
test ( 'validates auto-stop timeouts' , async ( t ) => {
@@ -339,6 +442,9 @@ test('validates auto-stop timeouts', async (t) => {
339
442
assert . throws ( ( ) => {
340
443
project . $sync . start ( { autostopDataSyncAfter } )
341
444
} )
445
+ assert . throws ( ( ) => {
446
+ project . $sync . setAutostopDataSyncTimeout ( autostopDataSyncAfter )
447
+ } )
342
448
}
343
449
344
450
assert ( ! project . $sync . getState ( ) . data . isSyncEnabled , 'sync is not enabled' )
0 commit comments