|
'use strict'; |
|
|
|
var should = require('should'); |
|
var Room = require('../../source/room'); |
|
var Namespace = require('../../source/namespace'); |
|
var Broadcast = require('../../source/broadcast'); |
|
var Socket = require('../fake_socket'); |
|
|
|
describe('Room', function () { |
|
|
|
beforeEach(function () { |
|
Broadcast.init(Room); |
|
}); |
|
|
|
afterEach(function () { |
|
Room.flush(); |
|
}); |
|
|
|
it('can create rooms', function () { |
|
var room = Room.get('something'); |
|
room.id.should.equal('something'); |
|
}); |
|
|
|
it('one room per room id', function () { |
|
var room1 = Room.get('anything'); |
|
var room2 = Room.get('anything'); |
|
|
|
room1.should.equal(room2); |
|
}); |
|
|
|
it('sockets can join rooms', function () { |
|
var room = Room.get('chicken'); |
|
room._join(new Socket()); |
|
|
|
room.length().should.equal(1); |
|
}); |
|
|
|
it('sockets can leave rooms', function () { |
|
var socket = new Socket(); |
|
|
|
var room = Room.get('pineapple'); |
|
room.length().should.equal(0); |
|
|
|
room._join(socket); |
|
room.length().should.equal(1); |
|
|
|
room._leave(socket); |
|
room.length().should.equal(0); |
|
}); |
|
|
|
it('check if a socket is in a room', function () { |
|
var room = Room.get('my_room'); |
|
var socket = new Socket(); |
|
|
|
room._join(socket); |
|
room.contains(socket).should.equal(true); |
|
|
|
room._leave(socket); |
|
room.contains(socket).should.equal(false); |
|
}); |
|
|
|
it('get another room', function () { |
|
var room1 = Room.get('room1'); |
|
var room2 = Room.get('room2'); |
|
|
|
Room.get('room2').should.equal(room2); |
|
}); |
|
|
|
it('emit to all sockets in a room', function () { |
|
var room = Room.get('special'); |
|
var socket1 = new Socket(); |
|
var socket2 = new Socket(); |
|
var callCount = 0; |
|
|
|
new Socket.listen(function (event) { |
|
callCount++; |
|
event.should.equal('hello'); |
|
}); |
|
|
|
room._join(socket1); |
|
room._join(socket2); |
|
room.length().should.equal(2); |
|
|
|
room.emit('hello'); |
|
callCount.should.equal(2); |
|
}); |
|
|
|
it('broadcast to all sockets in a room', function () { |
|
var room = Room.get('broadcast'); |
|
var socket1 = new Socket(); |
|
var socket2 = new Socket(); |
|
var sender = new Socket(); |
|
var callCount = 0; |
|
|
|
room._join(socket1); |
|
room._join(socket2); |
|
room._join(sender); |
|
|
|
new Socket.listen(function (event) { |
|
event.should.equal('the_broadcast'); |
|
this.should.not.equal(sender); |
|
callCount++; |
|
}); |
|
|
|
room.broadcast(sender.id, 'the_broadcast'); |
|
callCount.should.equal(2); |
|
}); |
|
|
|
it('emit to a room from a namespace', function () { |
|
var room = Room.get('room'); |
|
var socket1 = new Socket(); |
|
var socket2 = new Socket(); |
|
|
|
room._join(socket1); |
|
room._join(socket2); |
|
|
|
var namespace = room.namespace('namespace'); |
|
var callCount = 0; |
|
|
|
new Socket.listen(function (event) { |
|
event.should.equal('namespace.event'); |
|
callCount++; |
|
}); |
|
|
|
namespace.emit('event'); |
|
callCount.should.equal(2); |
|
}); |
|
|
|
it('broadcast to a room from a namespace', function () { |
|
var room = Room.get('room'); |
|
var socket1 = new Socket(); |
|
var socket2 = new Socket(); |
|
var socket3 = new Socket(); |
|
var callCount = 0; |
|
|
|
room._join(socket1); |
|
room._join(socket2); |
|
room._join(socket3); |
|
|
|
new Socket.listen(function (event) { |
|
this.should.not.equal(socket1); |
|
event.should.equal('namespace.event'); |
|
callCount++; |
|
}); |
|
|
|
var namespace = socket1.namespace('namespace'); |
|
|
|
namespace.broadcast('event'); |
|
callCount.should.equal(2); |
|
|
|
}); |
|
|
|
}); |
|
|