UNPKG

27.6 kBJavaScriptView Raw
1'use strict'
2/* eslint-env mocha */
3/* eslint-disable no-unused-expressions */
4
5const { expect } = require('chai')
6
7const { cleanup, clientConnect,
8 parallel, series, startService } = require('./testutils')
9
10const { cleanupTimeout, user1, user2,
11 roomName1, roomName2 } = require('./config')
12
13module.exports = function () {
14 let chatService, socket1, socket2, socket3
15
16 afterEach(function (cb) {
17 this.timeout(cleanupTimeout)
18 cleanup(chatService, [socket1, socket2, socket3], cb)
19 chatService = socket1 = socket2 = socket3 = null
20 })
21
22 it('should emit echos to a non-joined user\'s socket', function (done) {
23 chatService = startService()
24 chatService.addRoom(roomName1, null, () => {
25 socket1 = clientConnect(user1)
26 socket1.on('loginConfirmed', (u, data) => {
27 socket2 = clientConnect(user1)
28 socket2.on('loginConfirmed', (u, data) => {
29 let sid2 = data.id
30 socket2.emit('roomJoin', roomName1)
31 socket1.on('roomJoinedEcho', (room, id, njoined) => {
32 expect(room).equal(roomName1)
33 expect(id).equal(sid2)
34 expect(njoined).equal(1)
35 socket2.emit('roomLeave', roomName1)
36 socket1.on('roomLeftEcho', (room, id, njoined) => {
37 expect(room).equal(roomName1)
38 expect(id).equal(sid2)
39 expect(njoined).equal(0)
40 done()
41 })
42 })
43 })
44 })
45 })
46 })
47
48 it('should emit echos to a joined user\'s socket', function (done) {
49 chatService = startService()
50 chatService.addRoom(roomName1, null, () => {
51 socket1 = clientConnect(user1)
52 socket1.on('loginConfirmed', (u, data) => {
53 socket1.emit('roomJoin', roomName1, () => {
54 socket2 = clientConnect(user1)
55 socket2.on('loginConfirmed', (u, data) => {
56 let sid2 = data.id
57 socket2.emit('roomJoin', roomName1)
58 socket1.on('roomJoinedEcho', (room, id, njoined) => {
59 expect(room).equal(roomName1)
60 expect(id).equal(sid2)
61 expect(njoined).equal(2)
62 socket2.emit('roomLeave', roomName1)
63 socket1.on('roomLeftEcho', (room, id, njoined) => {
64 expect(room).equal(roomName1)
65 expect(id).equal(sid2)
66 expect(njoined).equal(1)
67 done()
68 })
69 })
70 })
71 })
72 })
73 })
74 })
75
76 it('should emit leave echo on a disconnect', function (done) {
77 let sid1, sid2
78 chatService = startService()
79 chatService.addRoom(roomName1, null, () => parallel([
80 cb => {
81 socket3 = clientConnect(user1)
82 socket3.on('loginConfirmed', () => cb())
83 },
84 cb => {
85 socket1 = clientConnect(user1)
86 socket1.on('loginConfirmed', (u, data) => {
87 sid1 = data.id
88 socket1.emit('roomJoin', roomName1, cb)
89 })
90 },
91 cb => {
92 socket2 = clientConnect(user1)
93 socket2.on('loginConfirmed', (u, data) => {
94 sid2 = data.id
95 socket2.emit('roomJoin', roomName1, cb)
96 })
97 }
98 ], error => {
99 expect(error).not.ok
100 socket2.disconnect()
101 parallel([
102 cb => socket1.once('roomLeftEcho', (room, id, njoined) => {
103 expect(room).equal(roomName1)
104 expect(id).equal(sid2)
105 expect(njoined).equal(1)
106 cb()
107 }),
108 cb => socket3.once('roomLeftEcho', (room, id, njoined) => {
109 expect(room).equal(roomName1)
110 expect(id).equal(sid2)
111 expect(njoined).equal(1)
112 cb()
113 })
114
115 ], () => {
116 socket1.disconnect()
117 socket3.on('roomLeftEcho', (room, id, njoined) => {
118 expect(room).equal(roomName1)
119 expect(id).equal(sid1)
120 expect(njoined).equal(0)
121 done()
122 })
123 })
124 }))
125 })
126
127 it('should remove disconnected users', function (done) {
128 chatService = startService({ enableUserlistUpdates: true })
129 chatService.addRoom(roomName1, null, () => {
130 socket1 = clientConnect(user1)
131 socket1.on('loginConfirmed', () => {
132 socket1.emit('roomJoin', roomName1, () => {
133 socket2 = clientConnect(user2)
134 socket2.on('loginConfirmed', () => {
135 socket2.emit('roomJoin', roomName1, () => {
136 socket2.disconnect()
137 socket1.on('roomUserLeft', (r, u) => {
138 expect(r).equal(roomName1)
139 expect(u).equal(user2)
140 done()
141 })
142 })
143 })
144 })
145 })
146 })
147 })
148
149 it('should echo leaving when socket disconnects', function (done) {
150 this.timeout(4000)
151 this.slow(2000)
152 chatService = startService({ enableUserlistUpdates: true })
153 chatService.addRoom(roomName1, null, () => {
154 socket1 = clientConnect(user1)
155 socket1.on('loginConfirmed', () => {
156 socket1.emit('roomJoin', roomName1, () => {
157 socket2 = clientConnect(user2)
158 socket2.on('loginConfirmed', () => {
159 socket2.emit('roomLeave', roomName1)
160 socket1.on('roomLeftEcho', () => done(new Error('Wrong echo')))
161 setTimeout(done, 1000)
162 })
163 })
164 })
165 })
166 })
167
168 it('should update userlist on join and leave operations', function (done) {
169 chatService = startService()
170 chatService.addRoom(roomName1, null, () => parallel([
171 cb => {
172 socket1 = clientConnect(user1)
173 socket1.on('loginConfirmed',
174 () => socket1.emit('roomJoin', roomName1, cb))
175 },
176 cb => {
177 socket2 = clientConnect(user2)
178 socket2.on('loginConfirmed',
179 () => socket2.emit('roomJoin', roomName1, cb))
180 }
181 ], error => {
182 expect(error).not.ok
183 socket1.emit(
184 'roomGetAccessList', roomName1, 'userlist', (error, data) => {
185 expect(error).not.ok
186 expect(data).lengthOf(2)
187 expect(data).include(user1)
188 expect(data).include(user2)
189 socket2.emit('roomLeave', roomName1, (error, data) => {
190 expect(error).not.ok
191 socket1.emit(
192 'roomGetAccessList', roomName1, 'userlist', (error, data) => {
193 expect(error).not.ok
194 expect(data).lengthOf(1)
195 expect(data).include(user1)
196 expect(data).not.include(user2)
197 done()
198 })
199 })
200 })
201 }))
202 })
203
204 it('should broadcast join and leave room messages', function (done) {
205 chatService = startService({ enableUserlistUpdates: true })
206 chatService.addRoom(roomName1, null, () => {
207 socket1 = clientConnect(user1)
208 socket1.on('loginConfirmed', () => {
209 socket1.emit('roomJoin', roomName1, (error, njoined) => {
210 expect(error).not.ok
211 expect(njoined).equal(1)
212 socket2 = clientConnect(user2)
213 socket2.on('loginConfirmed', () => {
214 socket2.emit('roomJoin', roomName1)
215 socket1.on('roomUserJoined', (room, user) => {
216 expect(room).equal(roomName1)
217 expect(user).equal(user2)
218 socket2.emit('roomLeave', roomName1)
219 socket1.on('roomUserLeft', (room, user) => {
220 expect(room).equal(roomName1)
221 expect(user).equal(user2)
222 done()
223 })
224 })
225 })
226 })
227 })
228 })
229 })
230
231 it('should update userlist on a disconnect', function (done) {
232 chatService = startService({ enableUserlistUpdates: true })
233 chatService.addRoom(roomName1, null, () => parallel([
234 cb => {
235 socket1 = clientConnect(user1)
236 socket1.on('loginConfirmed',
237 () => socket1.emit('roomJoin', roomName1, cb))
238 },
239 cb => {
240 socket2 = clientConnect(user2)
241 socket2.on('loginConfirmed',
242 () => socket2.emit('roomJoin', roomName1, cb))
243 }
244 ], error => {
245 expect(error).not.ok
246 socket1.emit(
247 'roomGetAccessList', roomName1, 'userlist', (error, data) => {
248 expect(error).not.ok
249 expect(data).lengthOf(2)
250 expect(data).include(user1)
251 expect(data).include(user2)
252 socket2.disconnect()
253 socket1.once('roomUserLeft', () => {
254 socket1.emit(
255 'roomGetAccessList', roomName1, 'userlist', (error, data) => {
256 expect(error).not.ok
257 expect(data).lengthOf(1)
258 expect(data).include(user1)
259 expect(data).not.include(user2)
260 done()
261 })
262 })
263 })
264 }))
265 })
266
267 it('should store and send a room history', function (done) {
268 let txt = 'Test message.'
269 let message = { textMessage: txt }
270 chatService = startService()
271 chatService.addRoom(roomName1, null, () => {
272 socket1 = clientConnect(user1)
273 socket1.on('loginConfirmed', () => {
274 socket1.emit('roomJoin', roomName1, () => {
275 socket1.emit('roomMessage', roomName1, message, (error, data) => {
276 expect(error).not.ok
277 expect(data).a('Number')
278 socket1.emit('roomRecentHistory', roomName1, (error, data) => {
279 expect(error).not.ok
280 expect(data).length(1)
281 let props = ['textMessage', 'author', 'timestamp', 'id']
282 expect(data[0]).include.keys(props)
283 expect(data[0].textMessage).equal(txt)
284 expect(data[0].author).equal(user1)
285 expect(data[0].timestamp).a('Number')
286 expect(data[0].id).equal(1)
287 done()
288 })
289 })
290 })
291 })
292 })
293 })
294
295 it('should send room messages to all joined users', function (done) {
296 let txt = 'Test message.'
297 let message = { textMessage: txt }
298 chatService = startService()
299 chatService.addRoom(roomName1, null, () => parallel([
300 cb => {
301 socket1 = clientConnect(user1)
302 socket1.on('loginConfirmed',
303 () => socket1.emit('roomJoin', roomName1, cb))
304 },
305 cb => {
306 socket2 = clientConnect(user2)
307 socket2.on('loginConfirmed',
308 () => socket2.emit('roomJoin', roomName1, cb))
309 }
310 ], error => {
311 expect(error).not.ok
312 parallel([
313 cb => socket1.emit('roomMessage', roomName1, message, cb),
314 cb => socket1.on('roomMessage', (room, msg) => {
315 expect(room).equal(roomName1)
316 expect(msg.author).equal(user1)
317 expect(msg.textMessage).equal(txt)
318 expect(msg).ownProperty('timestamp')
319 expect(msg).ownProperty('id')
320 cb()
321 }),
322 cb => socket2.on('roomMessage', (room, msg) => {
323 expect(room).equal(roomName1)
324 expect(msg.author).equal(user1)
325 expect(msg.textMessage).equal(txt)
326 expect(msg).ownProperty('timestamp')
327 expect(msg).ownProperty('id')
328 cb()
329 })
330 ], done)
331 }))
332 })
333
334 it('should drop a history if the limit is zero', function (done) {
335 let txt = 'Test message.'
336 let message = { textMessage: txt }
337 chatService = startService({ historyMaxSize: 0 })
338 chatService.addRoom(roomName1, null, () => {
339 socket1 = clientConnect(user1)
340 socket1.on('loginConfirmed', () => {
341 socket1.emit('roomJoin', roomName1, () => {
342 socket1.emit('roomMessage', roomName1, message, (error, id) => {
343 expect(error).not.ok
344 expect(id).equal(1)
345 socket1.emit('roomRecentHistory', roomName1, (error, data) => {
346 expect(error).not.ok
347 expect(data).empty
348 done()
349 })
350 })
351 })
352 })
353 })
354 })
355
356 it('should not send a history if the limit is zero', function (done) {
357 let txt = 'Test message.'
358 let message = { textMessage: txt }
359 chatService = startService({ historyMaxGetMessages: 0 })
360 chatService.addRoom(roomName1, null, () => {
361 socket1 = clientConnect(user1)
362 socket1.on('loginConfirmed', () => {
363 socket1.emit('roomJoin', roomName1, () => {
364 socket1.emit('roomMessage', roomName1, message, () => {
365 socket1.emit('roomRecentHistory', roomName1, (error, data) => {
366 expect(error).not.ok
367 expect(data).empty
368 socket1.emit(
369 'roomHistoryGet', roomName1, 0, 10, (error, data) => {
370 expect(error).not.ok
371 expect(data).empty
372 done()
373 })
374 })
375 })
376 })
377 })
378 })
379 })
380
381 it('should send a room history maximum size', function (done) {
382 let sz = 1000
383 chatService = startService({ historyMaxSize: sz })
384 chatService.addRoom(roomName1, null, () => {
385 socket1 = clientConnect(user1)
386 socket1.on('loginConfirmed', () => {
387 socket1.emit('roomJoin', roomName1, () => {
388 socket1.emit('roomHistoryInfo', roomName1, (error, data) => {
389 expect(error).not.ok
390 expect(data.historyMaxSize).equal(sz)
391 done()
392 })
393 })
394 })
395 })
396 })
397
398 it('should truncate a long history', function (done) {
399 let txt1 = 'Test message 1.'
400 let message1 = { textMessage: txt1 }
401 let txt2 = 'Test message 2.'
402 let message2 = { textMessage: txt2 }
403 chatService = startService({ historyMaxSize: 1 })
404 chatService.addRoom(roomName1, null, () => {
405 socket1 = clientConnect(user1)
406 socket1.on('loginConfirmed', () => {
407 socket1.emit('roomJoin', roomName1, () => {
408 socket1.emit('roomMessage', roomName1, message1, () => {
409 socket1.emit('roomMessage', roomName1, message2, () => {
410 socket1.emit('roomRecentHistory', roomName1, (error, data) => {
411 expect(error).not.ok
412 expect(data).length(1)
413 let props = ['textMessage', 'author', 'timestamp', 'id']
414 expect(data[0]).include.keys(props)
415 expect(data[0].textMessage).equal(txt2)
416 expect(data[0].author).equal(user1)
417 expect(data[0].timestamp).a('Number')
418 expect(data[0].id).equal(2)
419 done()
420 })
421 })
422 })
423 })
424 })
425 })
426 })
427
428 it('should support a history synchronisation', function (done) {
429 let txt = 'Test message.'
430 let message = { textMessage: txt }
431 chatService = startService()
432 chatService.addRoom(roomName1, null, () => {
433 socket1 = clientConnect(user1)
434 series([
435 cb => socket1.on('loginConfirmed',
436 () => socket1.emit('roomJoin', roomName1, cb)),
437 cb => socket1.emit('roomMessage', roomName1, message, cb),
438 cb => socket1.emit('roomMessage', roomName1, message, cb)
439 ], error => {
440 expect(error).not.ok
441 parallel([
442 cb =>
443 socket1.emit('roomHistoryGet', roomName1, 0, 10, (error, data) => {
444 expect(error).not.ok
445 expect(data).lengthOf(2)
446 let props = ['textMessage', 'author', 'timestamp', 'id']
447 expect(data[0]).include.keys(props)
448 expect(data[0].textMessage).equal(txt)
449 expect(data[0].author).equal(user1)
450 expect(data[0].timestamp).a('Number')
451 expect(data[0].id).equal(2)
452 expect(data[1].id).equal(1)
453 cb()
454 }),
455 cb =>
456 socket1.emit('roomHistoryGet', roomName1, 1, 10, (error, data) => {
457 expect(error).not.ok
458 expect(data).lengthOf(1)
459 expect(data[0].id).equal(2)
460 cb()
461 }),
462 cb =>
463 socket1.emit('roomHistoryGet', roomName1, 2, 10, (error, data) => {
464 expect(error).not.ok
465 expect(data).empty
466 cb()
467 })
468 ], done)
469 })
470 })
471 })
472
473 it('should sync a history with respect to the limit', function (done) {
474 let txt = 'Test message.'
475 let message = { textMessage: txt }
476 chatService = startService({ historyMaxGetMessages: 2 })
477 chatService.addRoom(roomName1, null, () => {
478 socket1 = clientConnect(user1)
479 series([
480 cb => socket1.on('loginConfirmed',
481 () => socket1.emit('roomJoin', roomName1, cb)),
482 cb => socket1.emit('roomMessage', roomName1, message, cb),
483 cb => socket1.emit('roomMessage', roomName1, message, cb),
484 cb => socket1.emit('roomMessage', roomName1, message, cb)
485 ], error => {
486 expect(error).not.ok
487 parallel([
488 cb =>
489 socket1.emit('roomHistoryGet', roomName1, 0, 10, (error, data) => {
490 expect(error).not.ok
491 expect(data).lengthOf(2)
492 expect(data[0].id).equal(2)
493 expect(data[1].id).equal(1)
494 cb()
495 }),
496 cb =>
497 socket1.emit('roomHistoryGet', roomName1, 1, 10, (error, data) => {
498 expect(error).not.ok
499 expect(data).lengthOf(2)
500 expect(data[0].id).equal(3)
501 expect(data[1].id).equal(2)
502 cb()
503 }),
504 cb =>
505 socket1.emit('roomHistoryGet', roomName1, 2, 10, (error, data) => {
506 expect(error).not.ok
507 expect(data).lengthOf(1)
508 expect(data[0].id).equal(3)
509 cb()
510 }),
511 cb =>
512 socket1.emit('roomHistoryGet', roomName1, 3, 10, (error, data) => {
513 expect(error).not.ok
514 expect(data).empty
515 cb()
516 })
517 ], done)
518 })
519 })
520 })
521
522 it('should sync a history with respect to a history size', function (done) {
523 let txt = 'Test message.'
524 let message = { textMessage: txt }
525 chatService = startService({ historyMaxSize: 2 })
526 chatService.addRoom(roomName1, null, () => {
527 socket1 = clientConnect(user1)
528 series([
529 cb => socket1.on('loginConfirmed',
530 () => socket1.emit('roomJoin', roomName1, cb)),
531 cb => socket1.emit('roomMessage', roomName1, message, cb),
532 cb => socket1.emit('roomMessage', roomName1, message, cb),
533 cb => socket1.emit('roomMessage', roomName1, message, cb)
534 ], error => {
535 expect(error).not.ok
536 parallel([
537 cb =>
538 socket1.emit('roomHistoryGet', roomName1, 0, 10, (error, data) => {
539 expect(error).not.ok
540 expect(data).lengthOf(2)
541 expect(data[0].id).equal(3)
542 cb()
543 }),
544 cb =>
545 socket1.emit('roomHistoryGet', roomName1, 1, 10, (error, data) => {
546 expect(error).not.ok
547 expect(data).lengthOf(2)
548 expect(data[0].id).equal(3)
549 cb()
550 }),
551 cb =>
552 socket1.emit('roomHistoryGet', roomName1, 2, 10, (error, data) => {
553 expect(error).not.ok
554 expect(data).lengthOf(1)
555 expect(data[0].id).equal(3)
556 cb()
557 }),
558 cb =>
559 socket1.emit('roomHistoryGet', roomName1, 3, 10, (error, data) => {
560 expect(error).not.ok
561 expect(data).empty
562 cb()
563 })
564 ], done)
565 })
566 })
567 })
568
569 it('should trim history on size changes', function (done) {
570 let txt = 'Test message.'
571 let message = { textMessage: txt }
572 chatService = startService({ historyMaxSize: 2 })
573 socket1 = clientConnect(user1)
574 chatService.addRoom(roomName1, null, () => {
575 series([
576 cb => socket1.on('loginConfirmed',
577 () => socket1.emit('roomJoin', roomName1, cb)),
578 cb => socket1.emit('roomMessage', roomName1, message, cb),
579 cb => socket1.emit('roomMessage', roomName1, message, cb)
580 ], error => {
581 expect(error).not.ok
582 chatService.changeRoomHistoryMaxSize(roomName1, 1, (error, data) => {
583 expect(error).not.ok
584 parallel([
585 cb =>
586 socket1.emit('roomHistoryGet', roomName1, 0, 9, (error, data) => {
587 expect(error).not.ok
588 expect(data).to.be.an('array')
589 expect(data).lengthOf(1)
590 expect(data[0].id).equal(2)
591 cb()
592 }),
593 cb =>
594 socket1.emit('roomHistoryInfo', roomName1, (error, data) => {
595 expect(error).not.ok
596 expect(data).to.be.an('object')
597 expect(data.historySize).equal(1)
598 expect(data.historyMaxSize).equal(1)
599 cb()
600 })
601 ], done)
602 })
603 })
604 })
605 })
606
607 it('should send and update a room sync info', function (done) {
608 let txt = 'Test message.'
609 let message = { textMessage: txt }
610 chatService = startService()
611 chatService.addRoom(roomName1, null, () => {
612 socket1 = clientConnect(user1)
613 socket1.on('loginConfirmed', () => {
614 socket1.emit('roomJoin', roomName1, () => {
615 socket1.emit('roomHistoryInfo', roomName1, (error, data) => {
616 expect(error).not.ok
617 expect(data).ownProperty('historyMaxGetMessages')
618 expect(data).ownProperty('historyMaxSize')
619 expect(data).ownProperty('historySize')
620 expect(data).ownProperty('lastMessageId')
621 expect(data.lastMessageId).equal(0)
622 expect(data.historySize).equal(0)
623 socket1.emit('roomMessage', roomName1, message, () => {
624 socket1.emit('roomHistoryInfo', roomName1, (error, data) => {
625 expect(error).not.ok
626 expect(data.lastMessageId).equal(1)
627 expect(data.historySize).equal(1)
628 done()
629 })
630 })
631 })
632 })
633 })
634 })
635 })
636
637 it('should get and update an user seen info', function (done) {
638 chatService = startService()
639 chatService.addRoom(roomName1, null, () => {
640 let ts = new Date().getTime()
641 let tsmax = ts + 2000
642 parallel([
643 cb => {
644 socket1 = clientConnect(user1)
645 socket1.on('loginConfirmed',
646 () => socket1.emit('roomJoin', roomName1, cb))
647 },
648 cb => {
649 socket2 = clientConnect(user2)
650 socket2.on('loginConfirmed',
651 () => socket2.emit('roomJoin', roomName1, cb))
652 }
653 ], error => {
654 expect(error).not.ok
655 socket1.emit('roomUserSeen', roomName1, user2, (error, info1) => {
656 expect(error).not.ok
657 expect(info1).an('object')
658 expect(info1.joined).true
659 expect(info1.timestamp).a('Number')
660 expect(info1.timestamp).within(ts, tsmax)
661 socket2.emit('roomLeave', roomName1, () => {
662 socket1.emit('roomUserSeen', roomName1, user2, (error, info2) => {
663 expect(error).not.ok
664 expect(info2).an('object')
665 expect(info2.joined).false
666 expect(info2.timestamp).a('Number')
667 expect(info2.timestamp).within(ts, tsmax)
668 expect(info2.timestamp).least(info1.timestamp)
669 done()
670 })
671 })
672 })
673 })
674 })
675 })
676
677 it('should send an empty seen info for unseen users', function (done) {
678 chatService = startService()
679 chatService.addRoom(roomName1, null, () => {
680 socket1 = clientConnect(user1)
681 socket1.on('loginConfirmed', () => {
682 socket1.emit('roomJoin', roomName1, () => {
683 socket1.emit('roomUserSeen', roomName1, user2, (error, info) => {
684 expect(error).not.ok
685 expect(info).an('object')
686 expect(info.joined).false
687 expect(info.timestamp).null
688 done()
689 })
690 })
691 })
692 })
693 })
694
695 it('should include info in users\' sockets lists', function (done) {
696 chatService = startService()
697 let { sid1, sid2, sid3 } = {}
698 chatService.addRoom(roomName1, null, () => {
699 chatService.addRoom(roomName2, null, () => {
700 parallel([
701 cb => {
702 socket1 = clientConnect(user1)
703 socket1.on('loginConfirmed', (u, data) => {
704 sid1 = data.id
705 socket1.emit('roomJoin', roomName1,
706 () => socket1.emit('roomJoin', roomName2, cb))
707 })
708 },
709 cb => {
710 socket2 = clientConnect(user1)
711 socket2.on('loginConfirmed', (u, data) => {
712 sid2 = data.id
713 socket2.emit('roomJoin', roomName1, cb)
714 })
715 },
716 cb => {
717 socket3 = clientConnect(user1)
718 socket3.on('loginConfirmed', (u, data) => {
719 sid3 = data.id
720 cb()
721 })
722 }
723 ], error => {
724 expect(error).not.ok
725 socket2.emit('listOwnSockets', (error, data) => {
726 expect(error).not.ok
727 expect(data[sid1]).lengthOf(2)
728 expect(data[sid2]).lengthOf(1)
729 expect(data[sid3]).lengthOf(0)
730 expect(data[sid1]).include.members([roomName1, roomName2])
731 expect(data[sid1]).include(roomName1)
732 done()
733 })
734 })
735 })
736 })
737 })
738
739 it('should send notifications configuration info', function (done) {
740 chatService = startService()
741 let config = {enableAccessListsUpdates: false, enableUserlistUpdates: true}
742 chatService.addRoom(roomName1, config, () => {
743 socket1 = clientConnect(user1)
744 socket1.on('loginConfirmed', () => {
745 socket1.emit('roomJoin', roomName1, () => {
746 socket1.emit('roomNotificationsInfo', roomName1, (error, data) => {
747 expect(error).not.ok
748 expect(data).to.be.an('object')
749 expect(data.enableAccessListsUpdates).false
750 expect(data.enableUserlistUpdates).true
751 done()
752 })
753 })
754 })
755 })
756 })
757
758 it('should not send notifications on duplicate joins', function (done) {
759 this.timeout(4000)
760 this.slow(2000)
761 chatService = startService()
762 let config = {enableUserlistUpdates: true}
763 chatService.addRoom(roomName1, config, () => parallel([
764 cb => {
765 socket1 = clientConnect(user1)
766 socket1.on('loginConfirmed', () => {
767 socket1.emit('roomJoin', roomName1, cb)
768 })
769 },
770 cb => {
771 socket3 = clientConnect(user2)
772 socket3.on('loginConfirmed', () => {
773 socket3.emit('roomJoin', roomName1, cb)
774 })
775 }
776 ], error => {
777 expect(error).not.ok
778 socket3.on('roomUserJoined', () => done(new Error('Wrong notification')))
779 socket1.emit('roomJoin', roomName1, error => {
780 expect(error).not.ok
781 setTimeout(done, 1000)
782 })
783 }))
784 })
785
786 it('should not send notifications on non-joined leave', function (done) {
787 this.timeout(4000)
788 this.slow(2000)
789 chatService = startService()
790 let config = {enableUserlistUpdates: true}
791 chatService.addRoom(roomName1, config, () => parallel([
792 cb => {
793 socket2 = clientConnect(user1)
794 socket2.on('loginConfirmed', () => cb())
795 },
796 cb => {
797 socket3 = clientConnect(user2)
798 socket3.on('loginConfirmed', () => {
799 socket3.emit('roomJoin', roomName1, cb)
800 })
801 }
802 ], error => {
803 expect(error).not.ok
804 socket3.on('roomUserLeft', () => done(new Error('Wrong notification')))
805 socket2.emit('roomLeave', roomName1, error => {
806 expect(error).not.ok
807 setTimeout(done, 1000)
808 })
809 }))
810 })
811}