UNPKG

roomba-server

Version:

Multiplayer game server designed for use with websockets. Manages rooms and users!

87 lines (66 loc) 2.45 kB
var isArray = require('util').isArray , EventEmitter = require('events').EventEmitter , _ = require('lodash') , test = require('tape') , UserMixin = require('./../src/UserMixin') test("UserMixin constructs a new instance", function (t) { t.plan(2); var user = new UserMixin("test", {}); t.ok(typeof UserMixin === "function", "UserMixin is a constructor"); t.ok(typeof user === "object", "new UserMixin returns an instance"); }); test("UserMixin should be throw if name and socket not provided", function (t) { t.plan(1); t.throws(function () { new UserMixin; }); }); test("UserMixin should assign attributes name and socket with provided args", function (t) { t.plan(2); var name = "test-user" , socket = {} , user = new UserMixin(socket); t.same(user.socket, socket, "provided socket instance assigned"); t.ok(typeof user.id === "string", "id assigned by constructor"); }); /** User Mixin is intended to be mixed into your own User objects. Its sole purpose is to provide you with a mechanism for assigning a socket to each of the users in your system. */ //New Constructor which mixes in our UserMixin var FakeUser = function (socket, username, level) { this.username = username; this.level = level; UserMixin.call(this, socket); }; //FakeUser tests test("FakeUser should assign a socket object to the instance", function (t) { t.plan(2); var socket = {} , fu = new FakeUser(socket, 'stevens', 99); t.same(fu.socket, socket, "sock instance assigned to the object via mixin"); t.ok(typeof fu.id === "string" , "user recievers random id if none explictly assigned"); }); //Constructor that assigns 4 to 'id' (for testing...obviously stupid) var DiffUser = function (socket) { this.id = 4; UserMixin.call(this, socket); }; test("DiffUser should have id of 4 and NOT one assigned by UserMixin", function (t) { t.plan(1); var socket = {} , du = new DiffUser(socket); t.same(4, du.id, "id of user instance is assigned by the object mixing it in"); }); test("UserMixin.message should emit a message with name and data provided", function (t) { t.plan(1); var socket = new EventEmitter , um = new UserMixin(socket, "test-user") , messageName = "ping" , data = {test: "winning"}; socket.on("ping", function (messageData) { t.same(messageData, data, "message data sent through to the socket"); }); um.message(messageName, data); });