summaryrefslogtreecommitdiffstats
path: root/comm/chat/protocols/irc/test/test_setMode.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/chat/protocols/irc/test/test_setMode.js')
-rw-r--r--comm/chat/protocols/irc/test/test_setMode.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/comm/chat/protocols/irc/test/test_setMode.js b/comm/chat/protocols/irc/test/test_setMode.js
new file mode 100644
index 0000000000..9a329beaa5
--- /dev/null
+++ b/comm/chat/protocols/irc/test/test_setMode.js
@@ -0,0 +1,70 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+var { IMServices } = ChromeUtils.importESModule(
+ "resource:///modules/IMServices.sys.mjs"
+);
+var { ircAccount, ircChannel } = ChromeUtils.importESModule(
+ "resource:///modules/ircAccount.sys.mjs"
+);
+
+IMServices.conversations.initConversations();
+
+function FakeAccount() {
+ this.normalizeNick = ircAccount.prototype.normalizeNick.bind(this);
+}
+FakeAccount.prototype = {
+ __proto__: ircAccount.prototype,
+ setWhois: (n, f) => true,
+ ERROR: do_throw,
+};
+
+function run_test() {
+ add_test(test_topicSettable);
+ add_test(test_topicSettableJoinAsOp);
+
+ run_next_test();
+}
+
+// Test joining a channel, then being set as op.
+function test_topicSettable() {
+ let channel = new ircChannel(new FakeAccount(), "#test", "nick");
+ // We're not in the room yet, so the topic is NOT editable.
+ equal(channel.topicSettable, false);
+
+ // Join the room.
+ channel.getParticipant("nick");
+ // The topic should be editable.
+ equal(channel.topicSettable, true);
+
+ // Receive the channel mode.
+ channel.setMode("+t", [], "ChanServ");
+ // Mode +t means that you need status to set the mode.
+ equal(channel.topicSettable, false);
+
+ // Receive a user mode.
+ channel.setMode("+o", ["nick"], "ChanServ");
+ // Nick is now an op and can set the topic!
+ equal(channel.topicSettable, true);
+
+ run_next_test();
+}
+
+// Test when you join as an op (as opposed to being set to op after joining).
+function test_topicSettableJoinAsOp() {
+ let channel = new ircChannel(new FakeAccount(), "#test", "nick");
+ // We're not in the room yet, so the topic is NOT editable.
+ equal(channel.topicSettable, false);
+
+ // Join the room as an op.
+ channel.getParticipant("@nick");
+ // The topic should be editable.
+ equal(channel.topicSettable, true);
+
+ // Receive the channel mode.
+ channel.setMode("+t", [], "ChanServ");
+ // The topic should still be editable.
+ equal(channel.topicSettable, true);
+
+ run_next_test();
+}