-
Notifications
You must be signed in to change notification settings - Fork 17
/
test-chat-server.js
155 lines (125 loc) · 4.11 KB
/
test-chat-server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
var should = require('should');
var io = require('socket.io-client'),
server = require('../chat-server');
var socketURL = 'http://localhost:5000';
var options ={
transports: ['websocket'],
'force new connection': true
};
var chatUser1 = {'name':'Tom'};
var chatUser2 = {'name':'Sally'};
var chatUser3 = {'name':'Dana'};
describe("Chat Server",function(){
/* Test 1 - A Single User */
it('Should broadcast new user once they connect',function(done){
var client = io.connect(socketURL, options);
client.on('connect',function(data){
client.emit('connection name',chatUser1);
});
client.on('new user',function(usersName){
usersName.should.be.type('string');
usersName.should.equal(chatUser1.name + " has joined.");
/* If this client doesn't disconnect it will interfere
with the next test */
client.disconnect();
done();
});
});
/* Test 2 - Two Users */
it('Should broadcast new user to all users', function(done){
var client1 = io.connect(socketURL, options);
client1.on('connect', function(data){
client1.emit('connection name', chatUser1);
/* Since first client is connected, we connect
the second client. */
var client2 = io.connect(socketURL, options);
client2.on('connect', function(data){
client2.emit('connection name', chatUser2);
});
client2.on('new user', function(usersName){
usersName.should.equal(chatUser2.name + " has joined.");
client2.disconnect();
});
});
var numUsers = 0;
client1.on('new user', function(usersName){
numUsers += 1;
if(numUsers === 2){
usersName.should.equal(chatUser2.name + " has joined.");
client1.disconnect();
done();
}
});
});
/* Test 3 - User sends a message to chat room. */
it('Should be able to broadcast messages', function(done){
var client1, client2, client3;
var message = 'Hello World';
var messages = 0;
var checkMessage = function(client){
client.on('message', function(msg){
message.should.equal(msg);
client.disconnect();
messages++;
if(messages === 3){
done();
};
});
};
client1 = io.connect(socketURL, options);
checkMessage(client1);
client1.on('connect', function(data){
client2 = io.connect(socketURL, options);
checkMessage(client2);
client2.on('connect', function(data){
client3 = io.connect(socketURL, options);
checkMessage(client3);
client3.on('connect', function(data){
client2.send(message);
});
});
});
});
/* Test 4 - User sends a private message to another user. */
it('Should be able to send private messages', function(done){
var client1, client2, client3;
var message = {to: chatUser1.name, txt:'Private Hello World'};
var messages = 0;
var completeTest = function(){
messages.should.equal(1);
client1.disconnect();
client2.disconnect();
client3.disconnect();
done();
};
var checkPrivateMessage = function(client){
client.on('private message', function(msg){
message.txt.should.equal(msg.txt);
msg.from.should.equal(chatUser3.name);
messages++;
if(client === client1){
/* The first client has received the message
we give some time to ensure that the others
will not receive the same message. */
setTimeout(completeTest, 40);
};
});
};
client1 = io.connect(socketURL, options);
checkPrivateMessage(client1);
client1.on('connect', function(data){
client1.emit('connection name', chatUser1);
client2 = io.connect(socketURL, options);
checkPrivateMessage(client2);
client2.on('connect', function(data){
client2.emit('connection name', chatUser2);
client3 = io.connect(socketURL, options);
checkPrivateMessage(client3);
client3.on('connect', function(data){
client3.emit('connection name', chatUser3);
client3.emit('private message', message)
});
});
});
});
});