1 | 'use strict'
|
2 |
|
3 |
|
4 |
|
5 | const { expect } = require('chai')
|
6 |
|
7 | const { cleanup, clientConnect, parallel, startService } =
|
8 | require('./testutils')
|
9 |
|
10 | const { cleanupTimeout, user1, user2, user3, roomName1 } =
|
11 | require('./config')
|
12 |
|
13 | module.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 be able to get a user mode', function (done) {
|
23 | chatService = startService()
|
24 | chatService.addUser(user1, { whitelistOnly: true }, () => {
|
25 | chatService.execUserCommand(
|
26 | user1, 'directGetWhitelistMode', (error, data) => {
|
27 | expect(error).not.ok
|
28 | expect(data).true
|
29 | done()
|
30 | })
|
31 | })
|
32 | })
|
33 |
|
34 | it('should be able to change user lists', function (done) {
|
35 | chatService = startService()
|
36 | chatService.addUser(user1, null, () => {
|
37 | chatService.execUserCommand(
|
38 | user1, 'directAddToList', 'whitelist', [user2], (error, data) => {
|
39 | expect(error).not.ok
|
40 | expect(data).not.ok
|
41 | chatService.execUserCommand(
|
42 | user1, 'directGetAccessList', 'whitelist', (error, data) => {
|
43 | expect(error).not.ok
|
44 | expect(data).lengthOf(1)
|
45 | expect(data[0]).equal(user2)
|
46 | done()
|
47 | })
|
48 | })
|
49 | })
|
50 | })
|
51 |
|
52 | it('should check room names before adding a new room', function (done) {
|
53 | chatService = startService()
|
54 | chatService.once('ready', () => {
|
55 | chatService.addRoom('room:1', null, (error, data) => {
|
56 | expect(error).ok
|
57 | expect(data).not.ok
|
58 | done()
|
59 | })
|
60 | })
|
61 | })
|
62 |
|
63 | it('should be able to get a room mode', function (done) {
|
64 | chatService = startService()
|
65 | chatService.addRoom(roomName1, { whitelistOnly: true }, () => {
|
66 | chatService.execUserCommand(
|
67 | true, 'roomGetWhitelistMode', roomName1, (error, data) => {
|
68 | expect(error).not.ok
|
69 | expect(data).true
|
70 | done()
|
71 | })
|
72 | })
|
73 | })
|
74 |
|
75 | it('should be able to change room lists', function (done) {
|
76 | chatService = startService()
|
77 | chatService.addRoom(roomName1, null, () => {
|
78 | chatService.execUserCommand(
|
79 | true, 'roomAddToList', roomName1, 'whitelist', [user2],
|
80 | (error, data) => {
|
81 | expect(error).not.ok
|
82 | expect(data).not.ok
|
83 | chatService.execUserCommand(
|
84 | true, 'roomGetAccessList', roomName1, 'whitelist',
|
85 | (error, data) => {
|
86 | expect(error).not.ok
|
87 | expect(data).lengthOf(1)
|
88 | expect(data[0]).equal(user2)
|
89 | done()
|
90 | })
|
91 | })
|
92 | })
|
93 | })
|
94 |
|
95 | it('should send system messages to all user\'s sockets', function (done) {
|
96 | let data = 'some data.'
|
97 | chatService = startService()
|
98 | socket1 = clientConnect(user1)
|
99 | socket1.on('loginConfirmed', () => {
|
100 | socket2 = clientConnect(user1)
|
101 | socket2.on('loginConfirmed', () => parallel([
|
102 | cb => chatService.execUserCommand(user1, 'systemMessage', data, cb),
|
103 | cb => socket1.on('systemMessage', d => {
|
104 | expect(d).equal(data)
|
105 | cb()
|
106 | }),
|
107 | cb => socket2.on('systemMessage', d => {
|
108 | expect(d).equal(data)
|
109 | cb()
|
110 | })
|
111 | ], done))
|
112 | })
|
113 | })
|
114 |
|
115 | it('should be able to bypass command hooks', function (done) {
|
116 | let before, after
|
117 | let roomAddToListBefore = (callInfo, args, cb) => {
|
118 | before = true
|
119 | cb()
|
120 | }
|
121 | let roomAddToListAfter = (callInfo, args, results, cb) => {
|
122 | after = true
|
123 | cb()
|
124 | }
|
125 | chatService = startService(null, {roomAddToListBefore, roomAddToListAfter})
|
126 | chatService.addRoom(
|
127 | roomName1, { owner: user1 },
|
128 | () => {
|
129 | chatService.addUser(user2, null, () => {
|
130 | socket1 = clientConnect(user1)
|
131 | socket1.on('loginConfirmed', () => {
|
132 | socket1.emit('roomJoin', roomName1, () => {
|
133 | chatService.execUserCommand(
|
134 | { userName: user1, bypassHooks: true },
|
135 | 'roomAddToList', roomName1, 'whitelist', [user1]
|
136 | , (error, data) => {
|
137 | expect(error).not.ok
|
138 | expect(before).undefined
|
139 | expect(after).undefined
|
140 | expect(data).not.ok
|
141 | done()
|
142 | })
|
143 | })
|
144 | })
|
145 | })
|
146 | })
|
147 | })
|
148 |
|
149 | it('should be able to bypass user messaging permissions', function (done) {
|
150 | let txt = 'Test message.'
|
151 | let message = { textMessage: txt }
|
152 | chatService = startService({ enableDirectMessages: true })
|
153 | chatService.addUser(user1, null, () => {
|
154 | chatService.addUser(user2, {whitelistOnly: true}, () => {
|
155 | socket2 = clientConnect(user2)
|
156 | socket2.on('loginConfirmed', () => {
|
157 | chatService.execUserCommand(
|
158 | { userName: user1, bypassPermissions: true },
|
159 | 'directMessage', user2, message)
|
160 | socket2.on('directMessage', msg => {
|
161 | expect(msg).include.keys('textMessage', 'author', 'timestamp')
|
162 | expect(msg.textMessage).equal(txt)
|
163 | expect(msg.author).equal(user1)
|
164 | expect(msg.timestamp).a('Number')
|
165 | done()
|
166 | })
|
167 | })
|
168 | })
|
169 | })
|
170 | })
|
171 |
|
172 | it('should be able to bypass room messaging permissions', function (done) {
|
173 | let txt = 'Test message.'
|
174 | let message = { textMessage: txt }
|
175 | chatService = startService()
|
176 | chatService.addRoom(
|
177 | roomName1,
|
178 | { whitelistOnly: true, whitelist: [user1] },
|
179 | () => {
|
180 | chatService.addUser(user2, null, () => {
|
181 | socket1 = clientConnect(user1)
|
182 | socket1.on('loginConfirmed', () => {
|
183 | socket1.emit('roomJoin', roomName1, () => {
|
184 | chatService.execUserCommand(
|
185 | { userName: user2, bypassPermissions: true },
|
186 | 'roomMessage', roomName1, message)
|
187 | socket1.on('roomMessage', (room, msg) => {
|
188 | expect(room).equal(roomName1)
|
189 | expect(msg.author).equal(user2)
|
190 | expect(msg.textMessage).equal(txt)
|
191 | expect(msg).ownProperty('timestamp')
|
192 | expect(msg).ownProperty('id')
|
193 | done()
|
194 | })
|
195 | })
|
196 | })
|
197 | })
|
198 | })
|
199 | })
|
200 |
|
201 | it('should be able to send room messages without an user', function (done) {
|
202 | let txt = 'Test message.'
|
203 | let message = { textMessage: txt }
|
204 | chatService = startService()
|
205 | chatService.addRoom(roomName1, null, () => {
|
206 | socket1 = clientConnect(user1)
|
207 | socket1.on('loginConfirmed', () => {
|
208 | socket1.emit('roomJoin', roomName1, () => {
|
209 | chatService.execUserCommand(
|
210 | true, 'roomMessage', roomName1, message,
|
211 | (error, data) => expect(error).not.ok)
|
212 | socket1.on('roomMessage', (room, msg) => {
|
213 | expect(room).equal(roomName1)
|
214 | expect(room).equal(roomName1)
|
215 | expect(msg.author).undefined
|
216 | expect(msg.textMessage).equal(txt)
|
217 | expect(msg).ownProperty('timestamp')
|
218 | expect(msg).ownProperty('id')
|
219 | done()
|
220 | })
|
221 | })
|
222 | })
|
223 | })
|
224 | })
|
225 |
|
226 | it('should not allow using non-existing users', function (done) {
|
227 | let txt = 'Test message.'
|
228 | let message = { textMessage: txt }
|
229 | chatService = startService()
|
230 | chatService.addRoom(roomName1, null, () => {
|
231 | chatService.execUserCommand(
|
232 | user1, 'roomMessage', roomName1, message, (error, data) => {
|
233 | expect(error).ok
|
234 | expect(data).not.ok
|
235 | done()
|
236 | })
|
237 | })
|
238 | })
|
239 |
|
240 | it('should be able to check direct messaging permissions', function (done) {
|
241 | chatService = startService()
|
242 | socket1 = clientConnect(user1)
|
243 | socket1.on('loginConfirmed', () => {
|
244 | socket1.emit('directAddToList', 'blacklist', [user3], error => {
|
245 | expect(error).not.ok
|
246 | parallel([
|
247 | cb => {
|
248 | chatService.hasDirectAccess(user1, user2, (error, data) => {
|
249 | expect(error).not.ok
|
250 | expect(data).true
|
251 | cb()
|
252 | })
|
253 | },
|
254 | cb => {
|
255 | chatService.hasDirectAccess(user1, user3, (error, data) => {
|
256 | expect(error).not.ok
|
257 | expect(data).false
|
258 | cb()
|
259 | })
|
260 | }
|
261 | ], done)
|
262 | })
|
263 | })
|
264 | })
|
265 |
|
266 | it('should be able to check room messaging permissions', function (done) {
|
267 | chatService = startService()
|
268 | chatService.addRoom(roomName1, {blacklist: [user3]}, () => parallel([
|
269 | cb => {
|
270 | chatService.hasRoomAccess(roomName1, user2, (error, data) => {
|
271 | expect(error).not.ok
|
272 | expect(data).true
|
273 | cb()
|
274 | })
|
275 | },
|
276 | cb => {
|
277 | chatService.hasRoomAccess(roomName1, user3, (error, data) => {
|
278 | expect(error).not.ok
|
279 | expect(data).false
|
280 | cb()
|
281 | })
|
282 | }
|
283 | ], done))
|
284 | })
|
285 | }
|