@@ -29,6 +29,7 @@ import { BLOCKED_ROLE_ID, COORDINATOR_ROLE_ID } from '../src/roles.js'
2929import { kSyncState } from '../src/sync/sync-api.js'
3030/** @typedef {import('../src/mapeo-project.js').MapeoProject } MapeoProject */
3131/** @typedef {import('../src/sync/sync-api.js').SyncTypeState } SyncState */
32+ /** @typedef {import('../src/sync/sync-api.js').State } State */
3233
3334const SCHEMAS_INITIAL_SYNC = [ 'preset' , 'field' ]
3435
@@ -558,36 +559,49 @@ test('Sync state emitted when starting and stopping sync', async function (t) {
558559 const managers = await createManagers ( COUNT , t )
559560 const [ invitor , ...invitees ] = managers
560561 const projectId = await invitor . createProject ( { name : 'Mapeo' } )
562+ const project = await invitor . getProject ( projectId )
563+ t . after ( ( ) => project . close ( ) )
561564
562- const disconnect = connectPeers ( managers , { discovery : false } )
565+ /** @type {State[] } */ const statesBeforeStart = [ ]
566+
567+ /** @type {State[] } */ let states = statesBeforeStart
568+ project . $sync . on ( 'sync-state' , ( state ) => states . push ( state ) )
563569
570+ const disconnect = connectPeers ( managers , { discovery : false } )
571+ t . after ( disconnect )
564572 await invite ( { invitor, invitees, projectId } )
565573
566- const projects = await Promise . all (
567- managers . map ( ( m ) => m . getProject ( projectId ) )
574+ /** @type {State[] } */ const statesAfterStart = [ ]
575+ states = statesAfterStart
576+ project . $sync . start ( )
577+ assert (
578+ statesAfterStart . length >= 1 ,
579+ 'Expected at least one event after starting'
568580 )
581+ for ( const state of statesAfterStart ) {
582+ assert ( state . initial . isSyncEnabled , 'initial namespaces are enabled' )
583+ assert ( state . data . isSyncEnabled , 'data namespaces are enabled' )
584+ }
569585
570- const stateEvents = [ ]
571-
572- projects [ 0 ] . $sync . on ( 'sync-state' , ( state ) => {
573- const timestamp = Date . now ( )
574- stateEvents . push ( { state, timestamp } )
575- } )
586+ await delay ( 500 )
576587
577- projects [ 0 ] . $sync . start ( )
578- assert ( stateEvents . length === 1 , 'sync-state event emitted after start' )
588+ /** @type {State[] } */ const statesAfterStop = [ ]
589+ states = statesAfterStop
590+ project . $sync . stop ( )
579591
580- await delay ( 500 )
592+ for ( const state of statesAfterStart ) {
593+ assert ( state . initial . isSyncEnabled , 'initial namespaces are enabled' )
594+ assert ( state . data . isSyncEnabled , 'data namespaces are enabled' )
595+ }
581596
582- const eventCountBeforeStop = stateEvents . length
583- projects [ 0 ] . $sync . stop ( )
584597 assert (
585- stateEvents . length > eventCountBeforeStop ,
586- 'sync-state event emitted after stop '
598+ statesAfterStop . length >= 1 ,
599+ 'Expected at least one event after stopping '
587600 )
588-
589- await disconnect ( )
590- await Promise . all ( projects . map ( ( p ) => p . close ( ) ) )
601+ for ( const state of statesAfterStop ) {
602+ assert ( state . initial . isSyncEnabled , 'initial namespaces are still enabled' )
603+ assert ( ! state . data . isSyncEnabled , 'data namespaces are disabled' )
604+ }
591605} )
592606
593607test ( 'Correct sync state prior to data sync' , async function ( t ) {
0 commit comments