lib/operations/whisper.spec.ts
import { assert } from "chai";
import * as sinon from "sinon";
import { ClientError, ConnectionError, MessageError } from "../client/errors";
import { assertErrorChain, fakeConnection } from "../helpers.spec";
import { sendPing } from "./ping";
import { whisper, WhisperError } from "./whisper";
describe("./operations/whisper", function () {
describe("WhisperError", function () {
it("should not be instanceof ConnectionError", function () {
assert.notInstanceOf(
new WhisperError("pajlada", "test"),
ConnectionError
);
});
it("should not be instanceof ClientError", function () {
assert.notInstanceOf(new WhisperError("pajlada", "test"), ClientError);
});
});
describe("#whisper()", function () {
it("should send the correct wire command", function () {
sinon.useFakeTimers();
const { data, client } = fakeConnection();
whisper(client, "pajlada", "hello world");
assert.deepStrictEqual(data, [
"PRIVMSG #justinfan12345 :/w pajlada hello world\r\n",
]);
});
it("should resolve after 1000 milliseconds", async function () {
sinon.useFakeTimers();
const { client, clientError, end } = fakeConnection();
const promise = whisper(client, "pajlada", "hello world");
sinon.clock.tick(1000);
await promise;
end();
await clientError;
});
it("should resolve if outpaced by other command response", async function () {
const { client, clientError, emitAndEnd } = fakeConnection();
const whisperPromise = whisper(client, "pajlada", "hello world");
const pingPromise = sendPing(client, "test1234");
emitAndEnd(":tmi.twitch.tv PONG tmi.twitch.tv :test1234");
await whisperPromise;
await pingPromise;
await clientError;
});
it("should be rejected on incoming bad NOTICE", async function () {
const { client, clientError, emitAndEnd } = fakeConnection();
const promise = whisper(client, "pajlada", "hello world");
emitAndEnd(
"@msg-id=whisper_limit_per_sec :tmi.twitch.tv NOTICE #justinfan12345 " +
":You are sending whispers too fast. Try again in a second."
);
await assertErrorChain(
promise,
WhisperError,
"Failed to whisper [pajlada]: hello world: Bad response message:" +
" @msg-id=whisper_limit_per_sec :tmi.twitch.tv NOTICE #justinfa" +
"n12345 :You are sending whispers too fast. Try again in a second.",
MessageError,
"Bad response message: @msg-id=whisper_limit_per_sec" +
" :tmi.twitch.tv NOTICE #justinfan12345 :You are " +
"sending whispers too fast. Try again in a second."
);
await assertErrorChain(
clientError,
WhisperError,
"Failed to whisper [pajlada]: hello world: Bad response message:" +
" @msg-id=whisper_limit_per_sec :tmi.twitch.tv NOTICE #justinfa" +
"n12345 :You are sending whispers too fast. Try again in a second.",
MessageError,
"Bad response message: @msg-id=whisper_limit_per_sec" +
" :tmi.twitch.tv NOTICE #justinfan12345 :You are " +
"sending whispers too fast. Try again in a second."
);
});
});
});