kara
Version:
A third generation EX-400 android
115 lines (88 loc) • 3.68 kB
JavaScript
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");
});
});