From 657188a7e2b10e0a7448c7c554be89590c570c99 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 24 Nov 2025 17:23:59 +0100 Subject: [PATCH] Add vitest and unit coverage for provider helpers --- package.json | 5 +++-- src/index.test.ts | 29 +++++++++++++++++++++++++++++ src/index.ts | 13 ++++++++++--- 3 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 src/index.test.ts diff --git a/package.json b/package.json index 6b7f8957f..1848a26e5 100644 --- a/package.json +++ b/package.json @@ -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" } } diff --git a/src/index.test.ts b/src/index.test.ts new file mode 100644 index 000000000..d520f8055 --- /dev/null +++ b/src/index.test.ts @@ -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(); + }); +}); diff --git a/src/index.ts b/src/index.ts index 31b487b8a..1723cce59 100644 --- a/src/index.ts +++ b/src/index.ts @@ -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); +}