UNPKG

kara

Version:

A third generation EX-400 android

115 lines (88 loc) 3.68 kB
var assert = require("chai").assert, dev = require("ex-400-dev"), Kara = require("../../kara"); describe("Plugin: Whois", function(){ var k, transport; beforeEach(function() { transport = new dev.Transport(); k = new Kara({ client: {nick: "kara"}, buildTransport: function() { return transport }, }); k.connect(); }); it("should require a nick token", function(done) { var plugin = k.loadPlugin("whois"); k.enablePlugin("whois"); transport.on("msg:2", function(str) { assert.strictEqual(str, "PRIVMSG #chan :jsmith, try whois <nick>\r\n"); done(); }); transport.write(":jsmith PRIVMSG #chan :kara whois\r\n"); }); it("should reply with the user info", function(done) { var plugin = k.loadPlugin("whois"); k.enablePlugin("whois"); transport.on("msg:2", function(str) { assert.strictEqual(str, "WHOIS esnowden\r\n"); transport.write("311 kara esnowden ~edward unaffiliated/esnowden * :Edward Snowden\r\n"); }); transport.on("msg:4", function(str) { assert.strictEqual(str, "PRIVMSG #chan :jsmith, Edward Snowden is logged in as esnowden (unaffiliated/esnowden)\r\n"); done(); }); transport.write(":jsmith PRIVMSG #chan :kara whois esnowden\r\n"); }); it("should reply with notfound is user is not logged in", function(done) { var plugin = k.loadPlugin("whois"); k.enablePlugin("whois"); transport.on("msg:2", function(str) { assert.strictEqual(str, "WHOIS esnowden\r\n"); transport.write("401 kara esnowden :no such nick\r\n"); }); transport.on("msg:4", function(str) { assert.strictEqual(str, "PRIVMSG #chan :jsmith, esnowden is not logged in\r\n"); done(); }); transport.write(":jsmith PRIVMSG #chan :kara whois esnowden\r\n"); }); it("should clean up listeners on whois:end", function(done) { var plugin = k.loadPlugin("whois"); k.enablePlugin("whois"); transport.once("msg:2", function(str) { assert.strictEqual(k.listeners("whois:user").length, 1); assert.strictEqual(k.listeners("whois:notfound").length, 1); // this has to be attached after the whois command enters the queue k.on("whois:end", function(msg) { assert.strictEqual(k.listeners("whois:user").length, 0); assert.strictEqual(k.listeners("whois:notfound").length, 0); done(); }); transport.write("318 kara esnowden :end of whois\r\n"); }); transport.write(":jsmith PRIVMSG #chan :kara whois esnowden\r\n"); }); it("should serialize multiple queries", function(done) { var plugin = k.loadPlugin("whois"); k.enablePlugin("whois"); transport.on("msg:3", function(str) { assert.strictEqual(str, "WHOIS esnowden\r\n"); transport.write("401 kara esnowden :no such nick\r\n"); transport.write("318 kara esnowden :end of whois\r\n"); }); transport.on("msg:6", function(str) { assert.strictEqual(str, "PRIVMSG #chan :jsmith, esnowden is not logged in\r\n"); }); transport.on("msg:7", function(str) { assert.strictEqual(str, "WHOIS jassange\r\n"); transport.write("311 kara jassange ~julian unaffiliated/jassange * :Julian Assange\r\n"); transport.write("318 kara jassange :end of whois\r\n"); }); transport.on("msg:10", function(str) { assert.strictEqual(str, "PRIVMSG #chan :jsmith, Julian Assange is logged in as jassange (unaffiliated/jassange)\r\n"); done(); }); transport.write(":jsmith PRIVMSG #chan :kara whois esnowden\r\n"); transport.write(":jsmith PRIVMSG #chan :kara whois jassange\r\n"); }); });