UNPKG

9.04 kBJavaScriptView Raw
1'use strict'
2/* eslint-env mocha */
3/* eslint-disable no-unused-expressions */
4
5const { expect } = require('chai')
6
7const { cleanup, clientConnect, parallel, startService } =
8 require('./testutils')
9
10const { cleanupTimeout, user1, user2, user3, roomName1 } =
11 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 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}