Add vitest and unit coverage for provider helpers

This commit is contained in:
Peter Steinberger
2025-11-24 17:23:59 +01:00
parent 3c8a105165
commit 657188a7e2
3 changed files with 42 additions and 5 deletions

View File

@@ -20,7 +20,7 @@
"lint:fix": "biome check --write src",
"format": "biome format src",
"format:fix": "biome format src --write",
"test": "echo \"No tests yet\""
"test": "vitest"
},
"keywords": [],
"author": "",
@@ -48,6 +48,7 @@
"@types/express": "^5.0.5",
"@types/node": "^24.10.1",
"tsx": "^4.20.6",
"typescript": "^5.9.3"
"typescript": "^5.9.3",
"vitest": "^2.1.4"
}
}

29
src/index.test.ts Normal file
View 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();
});
});

View File

@@ -5,6 +5,7 @@ import net from "node:net";
import os from "node:os";
import path from "node:path";
import process, { stdin as input, stdout as output } from "node:process";
import { fileURLToPath } from "node:url";
import readline from "node:readline/promises";
import { promisify } from "node:util";
import bodyParser from "body-parser";
@@ -384,8 +385,7 @@ type Provider = "twilio" | "web";
function assertProvider(input: string): asserts input is Provider {
if (input !== "twilio" && input !== "web") {
console.error("Provider must be 'twilio' or 'web'");
process.exit(1);
throw new Error("Provider must be 'twilio' or 'web'");
}
}
@@ -1818,4 +1818,11 @@ program
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);
}