@webex/internal-plugin-presence 3.0.0-beta.9 → 3.0.0-bnr.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -3
- package/dist/config.js +0 -3
- package/dist/config.js.map +1 -1
- package/dist/constants.js +0 -9
- package/dist/constants.js.map +1 -1
- package/dist/index.js +1 -10
- package/dist/index.js.map +1 -1
- package/dist/internal-plugin-presence.d.ts +8 -0
- package/dist/presence-batcher.js +0 -15
- package/dist/presence-batcher.js.map +1 -1
- package/dist/presence-worker.js +17 -52
- package/dist/presence-worker.js.map +1 -1
- package/dist/presence.js +7 -46
- package/dist/presence.js.map +1 -1
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/types/config.d.ts +8 -0
- package/dist/types/constants.d.ts +14 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/presence-batcher.d.ts +6 -0
- package/dist/types/presence-worker.d.ts +68 -0
- package/dist/types/presence.d.ts +6 -0
- package/package.json +9 -9
- package/src/config.js +2 -2
- package/src/constants.js +2 -4
- package/src/index.js +6 -6
- package/src/presence-batcher.js +13 -12
- package/src/presence-worker.js +43 -51
- package/src/presence.js +50 -45
- package/test/integration/spec/presence.js +112 -76
- package/test/unit/spec/presence-worker.js +33 -37
- package/test/unit/spec/presence.js +18 -9
|
@@ -18,22 +18,18 @@ describe('presence-worker', () => {
|
|
|
18
18
|
webex = new MockWebex({
|
|
19
19
|
children: {
|
|
20
20
|
mercury: Mercury,
|
|
21
|
-
presence: Presence
|
|
22
|
-
}
|
|
21
|
+
presence: Presence,
|
|
22
|
+
},
|
|
23
23
|
});
|
|
24
24
|
worker = new PresenceWorker();
|
|
25
25
|
worker.webex = webex;
|
|
26
26
|
});
|
|
27
27
|
|
|
28
28
|
describe('#initialize()', () => {
|
|
29
|
-
it('requires webex', () =>
|
|
30
|
-
worker.initialize,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
it('requires webex internal', () => assert.throws(
|
|
34
|
-
() => worker.initialize({}),
|
|
35
|
-
/Must initialize Presence Worker with webex!/
|
|
36
|
-
));
|
|
29
|
+
it('requires webex', () =>
|
|
30
|
+
assert.throws(worker.initialize, /Must initialize Presence Worker with webex!/));
|
|
31
|
+
it('requires webex internal', () =>
|
|
32
|
+
assert.throws(() => worker.initialize({}), /Must initialize Presence Worker with webex!/));
|
|
37
33
|
});
|
|
38
34
|
|
|
39
35
|
describe('#enqueue()', () => {
|
|
@@ -119,12 +115,11 @@ describe('presence-worker', () => {
|
|
|
119
115
|
const boarding = {
|
|
120
116
|
pam: true,
|
|
121
117
|
jim: true,
|
|
122
|
-
dwight: true
|
|
118
|
+
dwight: true,
|
|
123
119
|
};
|
|
124
120
|
|
|
125
121
|
it('moves fetchers to flights', () => {
|
|
126
|
-
webex.internal.presence.list = sinon.stub()
|
|
127
|
-
.returns(Promise.resolve({statusList: []}));
|
|
122
|
+
webex.internal.presence.list = sinon.stub().returns(Promise.resolve({statusList: []}));
|
|
128
123
|
|
|
129
124
|
worker.fetchers = boarding;
|
|
130
125
|
|
|
@@ -134,13 +129,10 @@ describe('presence-worker', () => {
|
|
|
134
129
|
});
|
|
135
130
|
|
|
136
131
|
it('calls presence.list', async () => {
|
|
137
|
-
const response = [
|
|
138
|
-
{subject: 'pam'},
|
|
139
|
-
{subject: 'jim'},
|
|
140
|
-
{subject: 'dwight'}
|
|
141
|
-
];
|
|
132
|
+
const response = [{subject: 'pam'}, {subject: 'jim'}, {subject: 'dwight'}];
|
|
142
133
|
|
|
143
|
-
webex.internal.presence.list = sinon
|
|
134
|
+
webex.internal.presence.list = sinon
|
|
135
|
+
.stub()
|
|
144
136
|
.returns(Promise.resolve({statusList: response}));
|
|
145
137
|
webex.internal.presence.emitEvent = sinon.stub();
|
|
146
138
|
|
|
@@ -151,9 +143,10 @@ describe('presence-worker', () => {
|
|
|
151
143
|
assert.calledWith(webex.internal.presence.list, Object.keys(boarding));
|
|
152
144
|
assert.isEmpty(worker.flights);
|
|
153
145
|
assert.deepEqual(Object.keys(worker.presences), Object.keys(boarding));
|
|
154
|
-
assert.calledWith(webex.internal.presence.emitEvent,
|
|
155
|
-
'
|
|
156
|
-
|
|
146
|
+
assert.calledWith(webex.internal.presence.emitEvent, 'updated', {
|
|
147
|
+
type: 'presence',
|
|
148
|
+
payload: {statusList: response},
|
|
149
|
+
});
|
|
157
150
|
});
|
|
158
151
|
});
|
|
159
152
|
|
|
@@ -163,7 +156,7 @@ describe('presence-worker', () => {
|
|
|
163
156
|
const scouts = {
|
|
164
157
|
pam: now - 60001, // move them back a little over a minute
|
|
165
158
|
jim: now - 60001,
|
|
166
|
-
dwight: now
|
|
159
|
+
dwight: now,
|
|
167
160
|
};
|
|
168
161
|
|
|
169
162
|
worker.campers = scouts;
|
|
@@ -180,11 +173,11 @@ describe('presence-worker', () => {
|
|
|
180
173
|
const subbies = {
|
|
181
174
|
pam: now,
|
|
182
175
|
jim: now + 61000, // move forward a little over a minute
|
|
183
|
-
dwight: now
|
|
176
|
+
dwight: now,
|
|
184
177
|
};
|
|
185
178
|
const watching = {
|
|
186
179
|
pam: 1,
|
|
187
|
-
jim: 1
|
|
180
|
+
jim: 1,
|
|
188
181
|
};
|
|
189
182
|
|
|
190
183
|
worker.watchers = watching;
|
|
@@ -200,7 +193,7 @@ describe('presence-worker', () => {
|
|
|
200
193
|
const subbies = {
|
|
201
194
|
pam: now + 600000, // move forward 10 minutes
|
|
202
195
|
jim: now - 20000, // move back 20 seconds
|
|
203
|
-
dwight: now - 60000 // move back 1 minute
|
|
196
|
+
dwight: now - 60000, // move back 1 minute
|
|
204
197
|
};
|
|
205
198
|
|
|
206
199
|
worker.subscribers = subbies;
|
|
@@ -218,7 +211,7 @@ describe('presence-worker', () => {
|
|
|
218
211
|
const presences = {
|
|
219
212
|
pam: now - 300000, // 5 minutes ago
|
|
220
213
|
jim: now - 600001, // little over 10 minutes ago
|
|
221
|
-
dwight: now - 1200000 // 20 minutes ago
|
|
214
|
+
dwight: now - 1200000, // 20 minutes ago
|
|
222
215
|
};
|
|
223
216
|
|
|
224
217
|
webex.internal.presence.emitEvent = sinon.stub();
|
|
@@ -226,30 +219,33 @@ describe('presence-worker', () => {
|
|
|
226
219
|
|
|
227
220
|
worker.cleanPresences();
|
|
228
221
|
|
|
229
|
-
assert.calledWith(webex.internal.presence.emitEvent,
|
|
230
|
-
'
|
|
231
|
-
|
|
222
|
+
assert.calledWith(webex.internal.presence.emitEvent, 'updated', {
|
|
223
|
+
type: 'delete',
|
|
224
|
+
payload: ['jim', 'dwight'],
|
|
225
|
+
});
|
|
232
226
|
});
|
|
233
227
|
});
|
|
234
228
|
|
|
235
229
|
describe('#groundskeeper()', () => {
|
|
236
230
|
it('renews subscriptions', async () => {
|
|
237
|
-
webex.internal.presence.subscribe = sinon.stub()
|
|
238
|
-
|
|
231
|
+
webex.internal.presence.subscribe = sinon.stub().returns(
|
|
232
|
+
Promise.resolve({
|
|
239
233
|
responses: [
|
|
240
234
|
{
|
|
241
235
|
responseCode: 200,
|
|
242
236
|
subscriptionTtl: 600,
|
|
243
237
|
subject: 'pam',
|
|
244
238
|
status: {
|
|
245
|
-
subject: 'pam'
|
|
246
|
-
}
|
|
239
|
+
subject: 'pam',
|
|
240
|
+
},
|
|
247
241
|
},
|
|
248
242
|
{
|
|
249
243
|
responseCode: 500,
|
|
250
|
-
subject: 'jim'
|
|
251
|
-
}
|
|
252
|
-
|
|
244
|
+
subject: 'jim',
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
})
|
|
248
|
+
);
|
|
253
249
|
worker.checkCampers = sinon.stub().returns(['pam']);
|
|
254
250
|
worker.checkSubscriptions = sinon.stub().returns(['jim']);
|
|
255
251
|
worker.cleanPresences = sinon.stub();
|
|
@@ -14,23 +14,30 @@ describe('plugin-presence', () => {
|
|
|
14
14
|
beforeEach(() => {
|
|
15
15
|
webex = new MockWebex({
|
|
16
16
|
children: {
|
|
17
|
-
presence: Presence
|
|
18
|
-
}
|
|
17
|
+
presence: Presence,
|
|
18
|
+
},
|
|
19
19
|
});
|
|
20
20
|
});
|
|
21
21
|
|
|
22
22
|
describe('#get()', () => {
|
|
23
|
-
it('requires a person id parameter', () =>
|
|
23
|
+
it('requires a person id parameter', () =>
|
|
24
|
+
assert.isRejected(webex.internal.presence.get(), /A person id is required/));
|
|
24
25
|
});
|
|
25
26
|
|
|
26
27
|
describe('#list()', () => {
|
|
27
|
-
it('requires a parameter', () =>
|
|
28
|
+
it('requires a parameter', () =>
|
|
29
|
+
assert.isRejected(webex.internal.presence.list(), /An array of person ids is required/));
|
|
28
30
|
|
|
29
|
-
it('requires a person array parameter', () =>
|
|
31
|
+
it('requires a person array parameter', () =>
|
|
32
|
+
assert.isRejected(
|
|
33
|
+
webex.internal.presence.list('abc'),
|
|
34
|
+
/An array of person ids is required/
|
|
35
|
+
));
|
|
30
36
|
});
|
|
31
37
|
|
|
32
38
|
describe('#subscribe()', () => {
|
|
33
|
-
it('requires a person parameter', () =>
|
|
39
|
+
it('requires a person parameter', () =>
|
|
40
|
+
assert.isRejected(webex.internal.presence.subscribe(), /A person id is required/));
|
|
34
41
|
it('subscription request called twice with batch of 100 ids', () => {
|
|
35
42
|
const ids = [...Array(100).keys()];
|
|
36
43
|
|
|
@@ -38,7 +45,7 @@ describe('plugin-presence', () => {
|
|
|
38
45
|
return Promise.resolve({
|
|
39
46
|
statusCode: 204,
|
|
40
47
|
body: [],
|
|
41
|
-
options
|
|
48
|
+
options,
|
|
42
49
|
});
|
|
43
50
|
};
|
|
44
51
|
sinon.spy(webex, 'request');
|
|
@@ -49,11 +56,13 @@ describe('plugin-presence', () => {
|
|
|
49
56
|
});
|
|
50
57
|
|
|
51
58
|
describe('#unsubscribe()', () => {
|
|
52
|
-
it('requires a person parameter', () =>
|
|
59
|
+
it('requires a person parameter', () =>
|
|
60
|
+
assert.isRejected(webex.internal.presence.unsubscribe(), /A person id is required/));
|
|
53
61
|
});
|
|
54
62
|
|
|
55
63
|
describe('#setStatus()', () => {
|
|
56
|
-
it('requires a status', () =>
|
|
64
|
+
it('requires a status', () =>
|
|
65
|
+
assert.isRejected(webex.internal.presence.setStatus(), /A status is required/));
|
|
57
66
|
});
|
|
58
67
|
});
|
|
59
68
|
});
|