83 lines
2.8 KiB
TypeScript
83 lines
2.8 KiB
TypeScript
import { describe, expect, it } from "@suaveplan/testing/runner";
|
|
import { SmsError } from "./legacy-errors.js";
|
|
|
|
describe("SmsError legacy class", () => {
|
|
it("factory methods return the right code", { timeout: 5000 }, () => {
|
|
expect(SmsError.invalidPhoneNumber("bad").code).toBe(
|
|
"SMS_INVALID_PHONE_NUMBER"
|
|
);
|
|
expect(SmsError.sendFailed("m1").code).toBe("SMS_SEND_FAILED");
|
|
expect(SmsError.templateNotFound("t").code).toBe(
|
|
"SMS_TEMPLATE_NOT_FOUND"
|
|
);
|
|
expect(SmsError.recipientOptedOut("+15551234567").code).toBe(
|
|
"SMS_RECIPIENT_OPTED_OUT"
|
|
);
|
|
expect(SmsError.providerNotConfigured().code).toBe(
|
|
"SMS_PROVIDER_NOT_CONFIGURED"
|
|
);
|
|
});
|
|
|
|
it("isSmsError narrows the type", { timeout: 5000 }, () => {
|
|
const e = SmsError.invalidPhoneNumber("bad");
|
|
expect(SmsError.isSmsError(e)).toBe(true);
|
|
expect(SmsError.isSmsError(new Error("x"))).toBe(false);
|
|
expect(SmsError.isSmsError("string")).toBe(false);
|
|
});
|
|
|
|
it("carries phoneNumber context for invalidPhoneNumber", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
const e = SmsError.invalidPhoneNumber("bad-phone");
|
|
expect(e.context).toEqual({ phoneNumber: "bad-phone" });
|
|
});
|
|
|
|
it("carries messageId context for sendFailed", { timeout: 5000 }, () => {
|
|
const cause = new Error("net");
|
|
const e = SmsError.sendFailed("m1", cause);
|
|
expect(e.context).toEqual({ messageId: "m1" });
|
|
expect(e.cause).toBe(cause);
|
|
});
|
|
|
|
it("sendFailed without cause omits cause property", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
const e = SmsError.sendFailed("m1");
|
|
expect(e.cause).toBeUndefined();
|
|
});
|
|
|
|
it("templateNotFound carries templateId context", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
const e = SmsError.templateNotFound("welcome");
|
|
expect(e.context).toEqual({ templateId: "welcome" });
|
|
});
|
|
|
|
it("recipientOptedOut carries phoneNumber context", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
const e = SmsError.recipientOptedOut("+15551234567");
|
|
expect(e.context).toEqual({ phoneNumber: "+15551234567" });
|
|
});
|
|
|
|
it("constructor with custom context", { timeout: 5000 }, () => {
|
|
const e = new SmsError({
|
|
message: "custom",
|
|
code: "SMS_SEND_FAILED",
|
|
context: { providerId: "twilio" },
|
|
});
|
|
expect(e.name).toBe("SmsError");
|
|
expect(e.context).toEqual({ providerId: "twilio" });
|
|
});
|
|
|
|
it("constructor without context defaults to empty object", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
const e = new SmsError({
|
|
message: "custom",
|
|
code: "SMS_SEND_FAILED",
|
|
});
|
|
expect(e.context).toEqual({});
|
|
});
|
|
});
|