Initial Commit
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
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({});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user