Skip to content

Commit 7b6979f

Browse files
committed
test: 💍 add local patch test
1 parent 57f2903 commit 7b6979f

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

src/json-crdt-repo/session/__tests__/EditSession.events.spec.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {setup} from './setup';
33
import {BehaviorSubject} from 'rxjs';
44
import {until} from 'thingies';
55
import {LocalRepoRebaseEvent} from '../../local/types';
6+
import {Testbed} from '../../__tests__/testbed';
67

78
describe('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

Comments
 (0)