-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathproseCollab.test.js
76 lines (63 loc) · 2.6 KB
/
proseCollab.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import { expect } from '@esm-bundle/chai';
// This is needed to make a dynamic import work that is indirectly referenced
// from edit/prose/index.js
const { setNx } = await import('../../../../scripts/utils.js');
setNx('/bheuaark/', { hostname: 'localhost' });
const pi = await import('../../../../blocks/edit/prose/index.js');
describe('Prose collab', () => {
it('Test awareness status', () => {
const dat = {};
const doc = { querySelector: (e) => (e === 'da-title' ? dat : null) };
const winEventListeners = [];
const win = {
addEventListener: (n, f) => winEventListeners.push({ n, f }),
document: doc,
};
const awarenessOnCalled = [];
const awarenessStates = new Map();
const awareness = {
clientID: 123,
getStates: () => awarenessStates,
on: (n, f) => awarenessOnCalled.push({ n, f }),
getLocalState: () => awarenessStates.get(123),
};
const wspOnCalled = [];
const wsp = {
awareness,
on: (n, f) => wspOnCalled.push({ n, f }),
};
const daTitle = pi.createAwarenessStatusWidget(wsp, win);
expect(daTitle).to.equal(dat);
expect(winEventListeners.length).to.equal(2);
const el0 = winEventListeners[0];
const el1 = winEventListeners[1];
const elOnline = el0.n === 'online' ? el0 : el1;
const elOffline = el0.n === 'offline' ? el0 : el1;
elOnline.f(); // Call the callback function sent to the listener
expect(daTitle.collabStatus).to.equal('online');
elOffline.f(); // Call the callback function sent to the listener
expect(daTitle.collabStatus).to.equal('offline');
expect(wspOnCalled.length).to.equal(1);
expect(wspOnCalled[0].n).to.equal('status');
wspOnCalled[0].f({ status: 'connected' });
expect(daTitle.collabStatus).to.equal('connected');
expect(awarenessOnCalled.length).to.equal(1);
expect(awarenessOnCalled[0].n).to.equal('update');
// The current user
const knownUser123 = { user: { name: 'Daffy Duck', id: 'daffy' } };
awarenessStates.set(123, knownUser123);
// Another known user
const knownUser789 = { user: { name: 'Joe Bloggs', id: 'bloggs' } };
awarenessStates.set(789, knownUser789);
const delta1 = { added: [123], removed: [], updated: [] };
awarenessOnCalled[0].f(delta1); // Call the callback function
expect(daTitle.collabUsers.length).to.equal(0);
const delta2 = {
added: [111, 456, 789, 123],
removed: [456],
updated: [234],
};
awarenessOnCalled[0].f(delta2); // Call the callback function
expect(daTitle.collabUsers).to.deep.equal(['Anonymous', 'Anonymous', 'Joe Bloggs']);
});
});