1 | 'use strict'
|
2 |
|
3 |
|
4 | const { expect } = require('chai')
|
5 |
|
6 | const { cleanup, clientConnect, startService } = require('./testutils')
|
7 |
|
8 | const { cleanupTimeout, user1, user2 } = require('./config')
|
9 |
|
10 | module.exports = function () {
|
11 | let chatService, socket1, socket2, socket3
|
12 |
|
13 | afterEach(function (cb) {
|
14 | this.timeout(cleanupTimeout)
|
15 | cleanup(chatService, [socket1, socket2, socket3], cb)
|
16 | chatService = socket1 = socket2 = socket3 = null
|
17 | })
|
18 |
|
19 | it('should send direct messages', function (done) {
|
20 | let txt = 'Test message.'
|
21 | let message = { textMessage: txt }
|
22 | chatService = startService({ enableDirectMessages: true })
|
23 | socket1 = clientConnect(user1)
|
24 | socket1.on('loginConfirmed', () => {
|
25 | socket2 = clientConnect(user2)
|
26 | socket2.on('loginConfirmed', () => {
|
27 | socket1.emit('directMessage', user2, message)
|
28 | socket2.on('directMessage', msg => {
|
29 | expect(msg).include.keys('textMessage', 'author', 'timestamp')
|
30 | expect(msg.textMessage).equal(txt)
|
31 | expect(msg.author).equal(user1)
|
32 | expect(msg.timestamp).a('Number')
|
33 | done()
|
34 | })
|
35 | })
|
36 | })
|
37 | })
|
38 |
|
39 | it('should not send direct messages when the option is off', function (done) {
|
40 | let txt = 'Test message.'
|
41 | let message = { textMessage: txt }
|
42 | chatService = startService()
|
43 | socket1 = clientConnect(user1)
|
44 | socket1.on('loginConfirmed', () => {
|
45 | socket2 = clientConnect(user2)
|
46 | socket2.on('loginConfirmed', () => {
|
47 | socket1.emit('directMessage', user2, message, (error, data) => {
|
48 | expect(error).ok
|
49 | expect(data).null
|
50 | done()
|
51 | })
|
52 | })
|
53 | })
|
54 | })
|
55 |
|
56 | it('should not send self-direct messages', function (done) {
|
57 | let txt = 'Test message.'
|
58 | let message = { textMessage: txt }
|
59 | chatService = startService({ enableDirectMessages: true })
|
60 | socket1 = clientConnect(user1)
|
61 | socket1.on('loginConfirmed', () => {
|
62 | socket1.emit('directMessage', user1, message, (error, data) => {
|
63 | expect(error).ok
|
64 | expect(data).null
|
65 | done()
|
66 | })
|
67 | })
|
68 | })
|
69 |
|
70 | it('should not send direct messages to offline users', function (done) {
|
71 | let txt = 'Test message.'
|
72 | let message = { textMessage: txt }
|
73 | chatService = startService({ enableDirectMessages: true })
|
74 | socket2 = clientConnect(user2)
|
75 | socket2.on('loginConfirmed', () => {
|
76 | socket2.disconnect()
|
77 | socket1 = clientConnect(user1)
|
78 | socket1.on('loginConfirmed', () => {
|
79 | socket1.emit('directMessage', user2, message, (error, data) => {
|
80 | expect(error).ok
|
81 | expect(data).null
|
82 | done()
|
83 | })
|
84 | })
|
85 | })
|
86 | })
|
87 |
|
88 | it('should echo direct messages to all user\'s sockets', function (done) {
|
89 | let txt = 'Test message.'
|
90 | let message = { textMessage: txt }
|
91 | chatService = startService({ enableDirectMessages: true })
|
92 | socket1 = clientConnect(user1)
|
93 | socket1.on('loginConfirmed', () => {
|
94 | socket3 = clientConnect(user1)
|
95 | socket3.on('loginConfirmed', () => {
|
96 | socket2 = clientConnect(user2)
|
97 | socket2.on('loginConfirmed', () => {
|
98 | socket1.emit('directMessage', user2, message)
|
99 | socket3.on('directMessageEcho', (u, msg) => {
|
100 | expect(u).equal(user2)
|
101 | expect(msg).include.keys('textMessage', 'author', 'timestamp')
|
102 | expect(msg.textMessage).equal(txt)
|
103 | expect(msg.author).equal(user1)
|
104 | expect(msg.timestamp).a('Number')
|
105 | done()
|
106 | })
|
107 | })
|
108 | })
|
109 | })
|
110 | })
|
111 |
|
112 | it('should echo system messages to all user\'s sockets', function (done) {
|
113 | let data = 'some data.'
|
114 | chatService = startService()
|
115 | socket1 = clientConnect(user1)
|
116 | socket1.on('loginConfirmed', () => {
|
117 | socket2 = clientConnect(user1)
|
118 | socket2.on('loginConfirmed', () => {
|
119 | socket1.emit('systemMessage', data)
|
120 | socket2.on('systemMessage', d => {
|
121 | expect(d).equal(data)
|
122 | done()
|
123 | })
|
124 | })
|
125 | })
|
126 | })
|
127 | }
|