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 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 | }
|