robotty/dank-twitch-irc

View on GitHub
lib/mixins/alternate-message-modifier.spec.ts

Summary

Maintainability
F
6 days
Test Coverage
import { assert } from "chai";
import "mocha";
import { promisify } from "util";
import { fakeClient } from "../helpers.spec";
import {
  AlternateMessageModifier,
  invisibleSuffix,
} from "./alternate-message-modifier";

describe("./modules/alternate-message-modifier", function () {
  describe("AlternateMessageModifier", () => {
    it("should have the correct escape for the invisible suffix", () => {
      // 1 (space) + 2 (invisible character)
      assert.strictEqual(invisibleSuffix.length, 3);
      assert.strictEqual([...invisibleSuffix].length, 2);
    });

    it("should append invisible character if last message is equal", async function () {
      const { client, emitAndEnd } = fakeClient();
      client.configuration.username = "randers";
      const messageModifier = new AlternateMessageModifier(client);
      client.use(messageModifier);

      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          false
        ),
        "Kappa Keepo PogChamp"
      );
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          true
        ),
        "Kappa Keepo PogChamp"
      );

      // from a different user should be ignored
      emitAndEnd(
        "@badge-info=subscriber/13;badges=subscriber/12,glhf-p" +
          "ledge/1;color=#19E6E6;display-name=randers;emote-only=1;emotes=" +
          "25:0-4/1902:6-10/88:12-19;flags=;id=4556c83f-4dd6-4c6d-bb87-7a" +
          "b2472188e3;mod=0;room-id=22484632;subscriber=1;tmi-sent-ts=156" +
          "6127471330;turbo=0;user-id=40286300;user-type= :randers00!rander" +
          "s00@randers00.tmi.twitch.tv PRIVMSG #forsen :Kappa Keepo PogChamp"
      );

      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          false
        ),
        "Kappa Keepo PogChamp"
      );
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          true
        ),
        "Kappa Keepo PogChamp"
      );

      emitAndEnd(
        "@badge-info=subscriber/13;badges=subscriber/12,glhf-p" +
          "ledge/1;color=#19E6E6;display-name=randers;emote-only=1;emotes=" +
          "25:0-4/1902:6-10/88:12-19;flags=;id=4556c83f-4dd6-4c6d-bb87-7a" +
          "b2472188e3;mod=0;room-id=22484632;subscriber=1;tmi-sent-ts=156" +
          "6127471330;turbo=0;user-id=40286300;user-type= :randers!rander" +
          "s@randers.tmi.twitch.tv PRIVMSG #forsen :Kappa Keepo PogChamp"
      );

      await promisify(setImmediate);

      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          false
        ),
        "Kappa Keepo PogChamp \u{000e0000}"
      );

      // /me makes it different
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          true
        ),
        "Kappa Keepo PogChamp"
      );
    });

    it("should not append invisible character if fast spam is enabled (mod, VIP, etc.)", async function () {
      const { client, emitAndEnd } = fakeClient();
      client.configuration.username = "randers";
      const messageModifier = new AlternateMessageModifier(client);
      client.use(messageModifier);

      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "pajlada",
          "Kappa Keepo PogChamp",
          false
        ),
        "Kappa Keepo PogChamp"
      );
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "pajlada",
          "Kappa Keepo PogChamp",
          true
        ),
        "Kappa Keepo PogChamp"
      );

      // userstate tracker will register that we are moderator
      // in #pajlada
      emitAndEnd(
        "@badge-info=subscriber/11;badges=moderator/1,subscriber/6" +
          ";color=#19E6E6;display-name=randers;emote-sets=0,42,237,9" +
          "54,1349,3188,4236,13653,15961,19194,22197,103040,164050,5" +
          "40476,588170,669914,771849,1511995,1641460,1641461,164146" +
          "2,300206298;mod=1;subscriber=1;user-type=mod :tmi.twitch." +
          "tv USERSTATE #pajlada",
        "@badge-info=subscriber/11;badges=moderator/1,subscriber/6;" +
          "color=#19E6E6;display-name=randers;emote-only=1;emotes=25" +
          ":0-4/1902:6-10/88:12-19;flags=;id=7467aa03-de47-4841-a0e0" +
          "-d392f1ec1811;mod=1;room-id=11148817;subscriber=1;tmi-sent" +
          "-ts=1566137969595;turbo=0;user-id=40286300;user-type=mod :" +
          "randers!randers@randers.tmi.twitch.tv PRIVMSG #pajlada :Ka" +
          "ppa Keepo PogChamp"
      );

      await promisify(setImmediate);

      // even though our last message was equal,
      // this should not append anything since fast spam
      // is enabled
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          false
        ),
        "Kappa Keepo PogChamp"
      );
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          true
        ),
        "Kappa Keepo PogChamp"
      );
    });

    it("should append invisible character through the say() function (case where we are joined to channel)", async function () {
      const { client, end, transports } = fakeClient();
      client.configuration.username = "randers";
      client.connections[0].joinedChannels.add("forsen");
      client.connections[0].wantedChannels.add("forsen");

      const messageModifier = new AlternateMessageModifier(client);
      client.use(messageModifier);

      const sayPromise = client.say("forsen", "Kappa Keepo PogChamp");

      await promisify(setImmediate);

      assert.deepStrictEqual(transports[1].data, [
        "PRIVMSG #forsen :Kappa Keepo PogChamp\r\n",
      ]);

      transports[1].emit(
        "@badge-info=subscriber/13;badges=subscriber/12,glhf-ple" +
          "dge/1;color=#19E6E6;display-name=randers;emote-sets=0,42,237" +
          ",954,1349,3188,4236,13653,15961,19194,22197,103040,164050,540" +
          "476,588170,669914,771845,1537481,1641460,1641461,1641462,300" +
          "206310;mod=0;subscriber=1;user-type= :tmi.twitch.tv USERSTAT" +
          "E #forsen"
      );

      await sayPromise;

      // we were joined to the channel we sent a message to,
      // so AlternateMessageModifier should NOT save the sent message
      // as the last message (since we expect to receive it back)
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          false
        ),
        "Kappa Keepo PogChamp"
      );

      transports[1].emit(
        "@badge-info=subscriber/13;badges=subscriber/12," +
          "glhf-pledge/1;color=#19E6E6;display-name=randers;emote-o" +
          "nly=1;emotes=25:0-4/1902:6-10/88:12-19;flags=;id=bc4e1af" +
          "8-2226-4e2a-8b18-90b05edfb01e;mod=0;room-id=22484632;subs" +
          "criber=1;tmi-sent-ts=1566133801254;turbo=0;user-id=40286" +
          "300;user-type= :randers!randers@randers.tmi.twitch.tv PR" +
          "IVMSG #forsen :Kappa Keepo PogChamp"
      );
      end();

      await promisify(setImmediate);

      // now our own message was received so it should have been set
      // as the last message.
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          false
        ),
        "Kappa Keepo PogChamp \u{000e0000}"
      );
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          true
        ),
        "Kappa Keepo PogChamp"
      );
    });

    it("should append invisible character through the say() function (case where we are not joined to channel)", async function () {
      const { client, end, transports } = fakeClient();
      client.configuration.username = "randers";

      const messageModifier = new AlternateMessageModifier(client);
      client.use(messageModifier);

      const sayPromise = client.say("forsen", "Kappa Keepo PogChamp");

      await promisify(setImmediate);

      assert.deepStrictEqual(transports[0].data, [
        "PRIVMSG #forsen :Kappa Keepo PogChamp\r\n",
      ]);

      transports[0].emit(
        "@badge-info=subscriber/13;badges=subscriber/12,glhf-ple" +
          "dge/1;color=#19E6E6;display-name=randers;emote-sets=0,42,237" +
          ",954,1349,3188,4236,13653,15961,19194,22197,103040,164050,540" +
          "476,588170,669914,771845,1537481,1641460,1641461,1641462,300" +
          "206310;mod=0;subscriber=1;user-type= :tmi.twitch.tv USERSTAT" +
          "E #forsen"
      );

      await sayPromise;

      // we were NOT joined to the channel we sent a message to,
      // so AlternateMessageModifier SHOULD save the sent message
      // as the last message (since we WILL not receive it back as a PRIVMSG)
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          false
        ),
        "Kappa Keepo PogChamp \u{000e0000}"
      );
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          true
        ),
        "Kappa Keepo PogChamp"
      );

      end();
    });

    it("should append invisible character through the me() function (case where we are joined to channel)", async function () {
      const { client, end, transports } = fakeClient();
      client.configuration.username = "randers";
      client.connections[0].joinedChannels.add("forsen");
      client.connections[0].wantedChannels.add("forsen");

      const messageModifier = new AlternateMessageModifier(client);
      client.use(messageModifier);

      const mePromise = client.me("forsen", "Kappa Keepo PogChamp");

      await promisify(setImmediate);

      assert.deepStrictEqual(transports[1].data, [
        "PRIVMSG #forsen :/me Kappa Keepo PogChamp\r\n",
      ]);

      transports[1].emit(
        "@badge-info=subscriber/13;badges=subscriber/12,glhf-ple" +
          "dge/1;color=#19E6E6;display-name=randers;emote-sets=0,42,237" +
          ",954,1349,3188,4236,13653,15961,19194,22197,103040,164050,540" +
          "476,588170,669914,771845,1537481,1641460,1641461,1641462,300" +
          "206310;mod=0;subscriber=1;user-type= :tmi.twitch.tv USERSTAT" +
          "E #forsen"
      );

      await mePromise;

      // we were joined to the channel we sent a message to,
      // so AlternateMessageModifier should NOT save the sent message
      // as the last message (since we expect to receive it back)
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          true
        ),
        "Kappa Keepo PogChamp"
      );

      transports[1].emit(
        "@badge-info=subscriber/13;badges=subscriber/12," +
          "glhf-pledge/1;color=#19E6E6;display-name=randers;emote-o" +
          "nly=1;emotes=25:0-4/1902:6-10/88:12-19;flags=;id=bc4e1af" +
          "8-2226-4e2a-8b18-90b05edfb01e;mod=0;room-id=22484632;subs" +
          "criber=1;tmi-sent-ts=1566133801254;turbo=0;user-id=40286" +
          "300;user-type= :randers!randers@randers.tmi.twitch.tv PR" +
          "IVMSG #forsen :\u0001ACTION Kappa Keepo PogChamp\u0001"
      );
      end();

      await promisify(setImmediate);

      // now our own message was received so it should have been set
      // as the last message.
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          true
        ),
        "Kappa Keepo PogChamp \u{000e0000}"
      );
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          false
        ),
        "Kappa Keepo PogChamp"
      );
    });

    it("should append invisible character through the me() function (case where we are not joined to channel)", async function () {
      const { client, end, transports } = fakeClient();
      client.configuration.username = "randers";

      const messageModifier = new AlternateMessageModifier(client);
      client.use(messageModifier);

      const mePromise = client.me("forsen", "Kappa Keepo PogChamp");

      await promisify(setImmediate);

      assert.deepStrictEqual(transports[0].data, [
        "PRIVMSG #forsen :/me Kappa Keepo PogChamp\r\n",
      ]);

      transports[0].emit(
        "@badge-info=subscriber/13;badges=subscriber/12,glhf-ple" +
          "dge/1;color=#19E6E6;display-name=randers;emote-sets=0,42,237" +
          ",954,1349,3188,4236,13653,15961,19194,22197,103040,164050,540" +
          "476,588170,669914,771845,1537481,1641460,1641461,1641462,300" +
          "206310;mod=0;subscriber=1;user-type= :tmi.twitch.tv USERSTAT" +
          "E #forsen"
      );

      await mePromise;

      // we were NOT joined to the channel we sent a message to,
      // so AlternateMessageModifier SHOULD save the sent message
      // as the last message (since we WILL not receive it back as a PRIVMSG)
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          true
        ),
        "Kappa Keepo PogChamp \u{000e0000}"
      );
      assert.strictEqual(
        messageModifier.appendInvisibleCharacter(
          "forsen",
          "Kappa Keepo PogChamp",
          false
        ),
        "Kappa Keepo PogChamp"
      );

      end();
    });
  });
});