Add vitest and unit coverage for provider helpers
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
"lint:fix": "biome check --write src",
|
"lint:fix": "biome check --write src",
|
||||||
"format": "biome format src",
|
"format": "biome format src",
|
||||||
"format:fix": "biome format src --write",
|
"format:fix": "biome format src --write",
|
||||||
"test": "echo \"No tests yet\""
|
"test": "vitest"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
@@ -48,6 +48,7 @@
|
|||||||
"@types/express": "^5.0.5",
|
"@types/express": "^5.0.5",
|
||||||
"@types/node": "^24.10.1",
|
"@types/node": "^24.10.1",
|
||||||
"tsx": "^4.20.6",
|
"tsx": "^4.20.6",
|
||||||
"typescript": "^5.9.3"
|
"typescript": "^5.9.3",
|
||||||
|
"vitest": "^2.1.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
29
src/index.test.ts
Normal file
29
src/index.test.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import { describe, expect, it } from "vitest";
|
||||||
|
import { normalizeE164, toWhatsappJid, assertProvider } from "./index.js";
|
||||||
|
|
||||||
|
describe("normalizeE164", () => {
|
||||||
|
it("strips whatsapp: prefix and whitespace", () => {
|
||||||
|
expect(normalizeE164("whatsapp:+1 555 123 4567")).toBe("+15551234567");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("adds plus when missing", () => {
|
||||||
|
expect(normalizeE164("1555123")).toBe("+1555123");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("toWhatsappJid", () => {
|
||||||
|
it("converts E164 to jid", () => {
|
||||||
|
expect(toWhatsappJid("+1 555 123 4567")).toBe("15551234567@s.whatsapp.net");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("assertProvider", () => {
|
||||||
|
it("accepts valid providers", () => {
|
||||||
|
expect(() => assertProvider("twilio")).not.toThrow();
|
||||||
|
expect(() => assertProvider("web")).not.toThrow();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("throws on invalid provider", () => {
|
||||||
|
expect(() => assertProvider("invalid" as string)).toThrow();
|
||||||
|
});
|
||||||
|
});
|
||||||
13
src/index.ts
13
src/index.ts
@@ -5,6 +5,7 @@ import net from "node:net";
|
|||||||
import os from "node:os";
|
import os from "node:os";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import process, { stdin as input, stdout as output } from "node:process";
|
import process, { stdin as input, stdout as output } from "node:process";
|
||||||
|
import { fileURLToPath } from "node:url";
|
||||||
import readline from "node:readline/promises";
|
import readline from "node:readline/promises";
|
||||||
import { promisify } from "node:util";
|
import { promisify } from "node:util";
|
||||||
import bodyParser from "body-parser";
|
import bodyParser from "body-parser";
|
||||||
@@ -384,8 +385,7 @@ type Provider = "twilio" | "web";
|
|||||||
|
|
||||||
function assertProvider(input: string): asserts input is Provider {
|
function assertProvider(input: string): asserts input is Provider {
|
||||||
if (input !== "twilio" && input !== "web") {
|
if (input !== "twilio" && input !== "web") {
|
||||||
console.error("Provider must be 'twilio' or 'web'");
|
throw new Error("Provider must be 'twilio' or 'web'");
|
||||||
process.exit(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1818,4 +1818,11 @@ program
|
|||||||
await waitForever();
|
await waitForever();
|
||||||
});
|
});
|
||||||
|
|
||||||
program.parseAsync(process.argv);
|
export { normalizeE164, toWhatsappJid, assertProvider };
|
||||||
|
|
||||||
|
const isMain =
|
||||||
|
process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1];
|
||||||
|
|
||||||
|
if (isMain) {
|
||||||
|
program.parseAsync(process.argv);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user