2016-03-15 05:40:48 +00:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
var expect = require("chai").expect;
|
|
|
|
|
|
|
|
var Chan = require("../../src/models/chan");
|
|
|
|
var User = require("../../src/models/user");
|
|
|
|
|
|
|
|
describe("Chan", function() {
|
2016-03-18 04:52:17 +00:00
|
|
|
describe("#sortUsers(irc)", function() {
|
2016-09-24 16:34:35 +00:00
|
|
|
var network = {
|
|
|
|
network: {
|
|
|
|
options: {
|
|
|
|
PREFIX: [
|
|
|
|
{symbol: "~", mode: "q"},
|
|
|
|
{symbol: "&", mode: "a"},
|
|
|
|
{symbol: "@", mode: "o"},
|
|
|
|
{symbol: "%", mode: "h"},
|
|
|
|
{symbol: "+", mode: "v"}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
var prefixLookup = {};
|
|
|
|
|
2016-10-12 07:55:40 +00:00
|
|
|
network.network.options.PREFIX.forEach(mode => {
|
2016-09-24 16:34:35 +00:00
|
|
|
prefixLookup[mode.mode] = mode.symbol;
|
|
|
|
});
|
|
|
|
|
|
|
|
var makeUser = function(nick) {
|
|
|
|
return new User({nick: nick}, prefixLookup);
|
|
|
|
};
|
|
|
|
|
|
|
|
var getUserNames = function(chan) {
|
|
|
|
return chan.users.map(function(u) {
|
|
|
|
return u.name;
|
|
|
|
});
|
|
|
|
};
|
2016-03-15 05:40:48 +00:00
|
|
|
|
|
|
|
it("should sort a simple user list", function() {
|
|
|
|
var chan = new Chan({users: [
|
|
|
|
"JocelynD", "YaManicKill", "astorije", "xPaw", "Max-P"
|
|
|
|
].map(makeUser)});
|
2016-09-24 16:34:35 +00:00
|
|
|
chan.sortUsers(network);
|
2016-03-15 05:40:48 +00:00
|
|
|
|
|
|
|
expect(getUserNames(chan)).to.deep.equal([
|
|
|
|
"astorije", "JocelynD", "Max-P", "xPaw", "YaManicKill"
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should group users by modes", function() {
|
|
|
|
var chan = new Chan({users: [
|
2016-09-24 16:34:35 +00:00
|
|
|
new User({nick: "JocelynD", modes: ["a", "o"]}, prefixLookup),
|
|
|
|
new User({nick: "YaManicKill", modes: ["v"]}, prefixLookup),
|
|
|
|
new User({nick: "astorije", modes: ["h"]}, prefixLookup),
|
|
|
|
new User({nick: "xPaw", modes: ["q"]}, prefixLookup),
|
|
|
|
new User({nick: "Max-P", modes: ["o"]}, prefixLookup),
|
2016-03-15 05:40:48 +00:00
|
|
|
]});
|
2016-09-24 16:34:35 +00:00
|
|
|
chan.sortUsers(network);
|
2016-03-15 05:40:48 +00:00
|
|
|
|
|
|
|
expect(getUserNames(chan)).to.deep.equal([
|
|
|
|
"xPaw", "JocelynD", "Max-P", "astorije", "YaManicKill"
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should sort a mix of users and modes", function() {
|
|
|
|
var chan = new Chan({users: [
|
2016-09-24 16:34:35 +00:00
|
|
|
new User({nick: "JocelynD"}, prefixLookup),
|
|
|
|
new User({nick: "YaManicKill", modes: ["o"]}, prefixLookup),
|
|
|
|
new User({nick: "astorije"}, prefixLookup),
|
|
|
|
new User({nick: "xPaw"}, prefixLookup),
|
|
|
|
new User({nick: "Max-P", modes: ["o"]}, prefixLookup),
|
2016-03-15 05:40:48 +00:00
|
|
|
]});
|
2016-09-24 16:34:35 +00:00
|
|
|
chan.sortUsers(network);
|
2016-03-15 05:40:48 +00:00
|
|
|
|
|
|
|
expect(getUserNames(chan)).to.deep.equal(
|
|
|
|
["Max-P", "YaManicKill", "astorije", "JocelynD", "xPaw"]
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should be case-insensitive", function() {
|
|
|
|
var chan = new Chan({users: ["aB", "Ad", "AA", "ac"].map(makeUser)});
|
2016-09-24 16:34:35 +00:00
|
|
|
chan.sortUsers(network);
|
2016-03-15 05:40:48 +00:00
|
|
|
|
|
|
|
expect(getUserNames(chan)).to.deep.equal(["AA", "aB", "ac", "Ad"]);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should parse special characters successfully", function() {
|
|
|
|
var chan = new Chan({users: [
|
|
|
|
"[foo", "]foo", "(foo)", "{foo}", "<foo>", "_foo", "@foo", "^foo",
|
|
|
|
"&foo", "!foo", "+foo", "Foo"
|
|
|
|
].map(makeUser)});
|
2016-09-24 16:34:35 +00:00
|
|
|
chan.sortUsers(network);
|
2016-03-15 05:40:48 +00:00
|
|
|
|
|
|
|
expect(getUserNames(chan)).to.deep.equal([
|
|
|
|
"!foo", "&foo", "(foo)", "+foo", "<foo>", "@foo", "[foo", "]foo",
|
|
|
|
"^foo", "_foo", "Foo", "{foo}"
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|