@@ -3,6 +3,7 @@ import {setup} from './setup';
33import { BehaviorSubject } from 'rxjs' ;
44import { until } from 'thingies' ;
55import { LocalRepoRebaseEvent } from '../../local/types' ;
6+ import { Testbed } from '../../__tests__/testbed' ;
67
78describe ( 'events' , ( ) => {
89 test ( 'emits "rebase" event on change' , async ( ) => {
@@ -27,4 +28,27 @@ describe('events', () => {
2728 expect ( model2 . view ( ) ) . toEqual ( { foo : 2 } ) ;
2829 await kit . stop ( ) ;
2930 } ) ;
31+
32+ test ( 'can synchronize sessions using local .applyPatch()' , async ( ) => {
33+ const repo = Testbed . createRepo ( ) ;
34+ const schema = s . obj ( { str : s . str ( 'abc' ) } ) ;
35+ const { session : session1 } = repo . sessions . make ( { id : repo . blockId , schema} ) ;
36+ const { session : session2 } = repo . sessions . make ( { id : repo . blockId , schema} ) ;
37+ const clone = session1 . model . clone ( ) ;
38+ session1 . model . api . str ( [ 'str' ] ) . ins ( 3 , 'd' ) ;
39+ expect ( session1 . model . view ( ) ) . toEqual ( { str : 'abcd' } ) ;
40+ clone . api . str ( [ 'str' ] ) . ins ( 3 , ' - 2' ) ;
41+ expect ( clone . view ( ) ) . toEqual ( { str : 'abc - 2' } ) ;
42+ await session1 . sync ( ) ;
43+ const patch = clone . api . flush ( ) ;
44+ session1 . model . applyLocalPatch ( patch ) ;
45+ expect ( session1 . model . view ( ) ) . toEqual ( { str : 'abc - 2d' } ) ;
46+ await session1 . sync ( ) ;
47+ await until ( ( ) => session2 . model . view ( ) . str === 'abc - 2d' ) ;
48+ expect ( session2 . model . view ( ) ) . toEqual ( { str : 'abc - 2d' } ) ;
49+ expect ( session1 . model . view ( ) ) . toEqual ( { str : 'abc - 2d' } ) ;
50+ await session1 . dispose ( ) ;
51+ await session2 . dispose ( ) ;
52+ await repo . stopTab ( ) ;
53+ } ) ;
3054} ) ;
0 commit comments