friendship
Version:
Manage friendships between users in your app, knowing when they gets online and offline
124 lines (94 loc) • 3.31 kB
JavaScript
var expect = require('expect.js')
, io = require('socket.io-client')
, config = require('./config')
, socketURL = "http://" + config.host + ":" + config.port
var options ={
transports: ['websocket'],
'force new connection': true
};
module.exports = function(friendship){
describe('Namespace /friends', function(){
before(function(){
socketURL += "/friends";
});
it('should fire checkin and checkout for friends', function(done){
var uid1 = 'uid1'
, friends1 = ['uid2', 'uid3']
, uid2 = 'uid2'
, friends2 = ['uid1', 'uid4']
, firecheckin1 = 0
, firecheckout2 = 0;
friendship.register(uid1, friends1);
friendship.register(uid2, friends2);
var client_uid1 = io.connect(socketURL, options);
client_uid1.on('user:online', function(userId){
firecheckin1++;
expect(userId).to.be.equal(uid2);
});
function connectUser(client, uid, done){
client.on('connect',function(err, data){
expect(err).to.not.be.ok();
client.emit('user:checkin', uid);
done();
});
}
connectUser(client_uid1, uid1, function(){
setTimeout(function(){
var client_uid2 = io.connect(socketURL, options);
client_uid2.on('user:offline', function(userId){
firecheckout2++;
expect(userId).to.be.equal(uid1);
});
connectUser(client_uid2, uid2, function(){
setTimeout(function(){
client_uid1.disconnect();
setTimeout(function(){
expect(firecheckin1).to.be.equal(1);
expect(firecheckout2).to.be.equal(1);
client_uid2.disconnect();
done();
}, 50);
}, 50);
});
}, 50);
});
});
it('should fire checkout when no check is emitted', function(done){
var uid1 = 'uid1'
, friends1 = ['uid2', 'uid3']
, uid2 = 'uid2'
, friends2 = ['uid1', 'uid4']
, firecheckout2 = 0;
friendship.register(uid1, friends1);
friendship.register(uid2, friends2);
var client_uid1 = io.connect(socketURL, options);
function connectUser(client, uid, done){
client.on('connect',function(err, data){
expect(err).to.not.be.ok();
client.emit('user:checkin', uid);
done();
});
}
connectUser(client_uid1, uid1, function(){
setTimeout(function(){
var client_uid2 = io.connect(socketURL, options);
client_uid2.on('user:offline', function(userId){
firecheckout2++;
expect(userId).to.be.equal(uid1);
});
connectUser(client_uid2, uid2, function(){
// reset auto checkout for uid1 after uid2 is connected
client_uid1.emit('user:check', uid1);
setTimeout(function(){
// wait past expiration, should called offline for uid1
expect(firecheckout2).to.be.equal(1);
client_uid1.disconnect();
client_uid2.disconnect();
done();
}, 500);
});
}, 50);
});
});
});
};