UNPKG

9.72 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 disconnect all user\'s sockets', function (done) {
23 chatService = startService()
24 socket1 = clientConnect(user1)
25 socket1.on('loginConfirmed', u => {
26 expect(u).equal(user1)
27 socket2 = clientConnect(user1)
28 socket2.on('loginConfirmed', u => {
29 expect(u).equal(user1)
30 parallel([
31 cb => {
32 chatService.disconnectUserSockets(user1)
33 cb()
34 },
35 cb => socket1.on('disconnect', () => {
36 expect(socket1.connected).not.ok
37 cb()
38 }),
39 cb => socket2.on('disconnect', () => {
40 expect(socket2.connected).not.ok
41 cb()
42 })
43 ], done)
44 })
45 })
46 })
47
48 it('should be able to add users', function (done) {
49 chatService = startService()
50 chatService.addUser(user1, { whitelistOnly: true }, () => {
51 socket1 = clientConnect(user1)
52 socket1.on('loginConfirmed', () => {
53 socket1.emit('directGetWhitelistMode', (error, data) => {
54 expect(error).not.ok
55 expect(data).true
56 done()
57 })
58 })
59 })
60 })
61
62 it('should be able to delete users', function (done) {
63 chatService = startService()
64 socket1 = clientConnect(user1)
65 socket1.on('loginConfirmed', () => {
66 chatService.disconnectUserSockets(user1)
67 socket1.on('disconnect', () => {
68 chatService.hasUser(user1, (error, data) => {
69 expect(error).not.ok
70 expect(data).true
71 chatService.deleteUser(user1, error => {
72 expect(error).not.ok
73 chatService.hasUser(user1, (error, data) => {
74 expect(error).not.ok
75 expect(data).false
76 done()
77 })
78 })
79 })
80 })
81 })
82 })
83
84 it('should not delete connected users', function (done) {
85 chatService = startService()
86 socket1 = clientConnect(user1)
87 socket1.on('loginConfirmed', () => {
88 chatService.deleteUser(user1, error => {
89 expect(error).ok
90 done()
91 })
92 })
93 })
94
95 it('should be able to delete rooms', function (done) {
96 chatService = startService()
97 chatService.addRoom(roomName1, { owner: user1 }, () => {
98 chatService.hasRoom(roomName1, (error, data) => {
99 expect(error).not.ok
100 expect(data).true
101 chatService.deleteRoom(roomName1, (error, data) => {
102 expect(error).not.ok
103 expect(data).not.ok
104 chatService.hasRoom(roomName1, (error, data) => {
105 expect(error).not.ok
106 expect(data).false
107 done()
108 })
109 })
110 })
111 })
112 })
113
114 it('should check user names before adding a new user', function (done) {
115 chatService = startService()
116 chatService.once('ready', () => {
117 chatService.addUser('user:1', null, (error, data) => {
118 expect(error).ok
119 expect(data).not.ok
120 done()
121 })
122 })
123 })
124
125 it('should check existing users before adding a new one', function (done) {
126 chatService = startService()
127 chatService.addUser(user1, null, () => {
128 chatService.addUser(user1, null, (error, data) => {
129 expect(error).ok
130 expect(data).not.ok
131 done()
132 })
133 })
134 })
135
136 it('should check commands for existence', function (done) {
137 chatService = startService()
138 chatService.addUser(user1, null, () => {
139 chatService.execUserCommand(user1, 'nocmd', error => {
140 expect(error).ok
141 done()
142 })
143 })
144 })
145
146 it('should check for socket ids if required', function (done) {
147 chatService = startService()
148 chatService.addUser(user1, null, () => {
149 chatService.addRoom(roomName1, null, () => {
150 chatService.execUserCommand(user1, 'roomJoin', roomName1, error => {
151 expect(error).ok
152 done()
153 })
154 })
155 })
156 })
157
158 it('should be able to change a room owner', function (done) {
159 chatService = startService()
160 chatService.addRoom(roomName1, { owner: user1 }, () => {
161 socket1 = clientConnect(user1)
162 socket1.on('loginConfirmed', () => {
163 socket1.emit('roomJoin', roomName1, () => {
164 chatService.changeRoomOwner(roomName1, user2, (error, data) => {
165 expect(error).not.ok
166 expect(data).not.ok
167 socket1.emit('roomGetOwner', roomName1, (error, data) => {
168 expect(error).not.ok
169 expect(data).equal(user2)
170 done()
171 })
172 })
173 })
174 })
175 })
176 })
177
178 it('should be able to change a room history limit', function (done) {
179 let sz = 100
180 chatService = startService()
181 chatService.addRoom(roomName1, null, () => {
182 chatService.changeRoomHistoryMaxSize(roomName1, sz, (error, data) => {
183 expect(error).not.ok
184 expect(data).not.ok
185 socket1 = clientConnect(user1)
186 socket1.on('loginConfirmed', () => {
187 socket1.emit('roomJoin', roomName1, () => {
188 socket1.emit('roomHistoryInfo', roomName1, (error, data) => {
189 expect(error).not.ok
190 expect(data).ownProperty('historyMaxSize')
191 expect(data.historyMaxSize).equal(sz)
192 done()
193 })
194 })
195 })
196 })
197 })
198 })
199
200 it('should be able to check room lists', function (done) {
201 chatService = startService()
202 chatService.addRoom(
203 roomName1,
204 { adminlist: [user1] },
205 () => {
206 chatService.roomHasInList(
207 roomName1, 'adminlist', user1, (error, data) => {
208 expect(error).not.ok
209 expect(data).true
210 chatService.roomHasInList(
211 roomName1, 'adminlist', user2, (error, data) => {
212 expect(error).not.ok
213 expect(data).false
214 done()
215 })
216 })
217 })
218 })
219
220 it('should be able to check user lists', function (done) {
221 chatService = startService()
222 chatService.addUser(
223 user1, { blacklist: [user2] },
224 () => {
225 chatService.userHasInList(
226 user1, 'blacklist', user2, (error, data) => {
227 expect(error).not.ok
228 expect(data).true
229 chatService.userHasInList(
230 user1, 'blacklist', user3, (error, data) => {
231 expect(error).not.ok
232 expect(data).false
233 done()
234 })
235 })
236 })
237 })
238
239 it('should be able to leave and join sockets', function (done) {
240 chatService = startService()
241 chatService.addRoom(roomName1, null, () => {
242 socket1 = clientConnect(user1)
243 let context = { userName: user1 }
244 socket1.on('loginConfirmed', (userName, {id}) => {
245 context.id = id
246 chatService.execUserCommand(context, 'roomJoin', roomName1)
247 socket1.on('roomJoinedEcho', (roomName, id, njoined) => {
248 expect(roomName).equal(roomName1)
249 expect(id).equal(context.id)
250 expect(njoined).equal(1)
251 let msg = { textMessage: 'Text message' }
252 chatService.execUserCommand(context, 'roomMessage', roomName1, msg)
253 socket1.on('roomMessage', (roomName, message) => {
254 expect(roomName).equal(roomName1)
255 chatService.execUserCommand(context, 'roomLeave', roomName1)
256 socket1.on('roomLeftEcho', (roomName, id, njoined) => {
257 expect(roomName).equal(roomName1)
258 expect(id).equal(context.id)
259 expect(njoined).equal(0)
260 done()
261 })
262 })
263 })
264 })
265 })
266 })
267
268 it('should be able to enable access lists updates', function (done) {
269 chatService = startService()
270 chatService.addRoom(roomName1, { owner: user1 }, () => {
271 socket1 = clientConnect(user1)
272 socket1.on('loginConfirmed', () => {
273 socket1.emit('roomJoin', roomName1, () => {
274 chatService.changeAccessListsUpdates(roomName1, true, error => {
275 expect(error).not.ok
276 chatService.execUserCommand(
277 user1, 'roomAddToList', roomName1, 'whitelist', [user2])
278 socket1.on('roomAccessListAdded', (roomName, listName, names) => {
279 expect(roomName).equal(roomName1)
280 expect(listName).equal('whitelist')
281 expect(names[0]).equal(user2)
282 done()
283 })
284 })
285 })
286 })
287 })
288 })
289
290 it('should be able to enable user list updates', function (done) {
291 chatService = startService()
292 chatService.addRoom(roomName1, { owner: user1 }, () => {
293 socket1 = clientConnect(user1)
294 socket1.on('loginConfirmed', () => {
295 socket1.emit('roomJoin', roomName1, () => {
296 chatService.changeUserlistUpdates(roomName1, true, error => {
297 expect(error).not.ok
298 socket1.on('roomUserJoined', (roomName, userName) => {
299 expect(roomName).equal(roomName1)
300 expect(userName).equal(user2)
301 done()
302 })
303 socket2 = clientConnect(user2)
304 socket2.on('loginConfirmed', () => {
305 socket2.emit('roomJoin', roomName1)
306 })
307 })
308 })
309 })
310 })
311 })
312}