From 1696b15712753039d896a6fcbe3145331f9b5b76 Mon Sep 17 00:00:00 2001 From: Jef LeCompte Date: Mon, 21 Jul 2025 22:44:27 -0700 Subject: [PATCH] fix: headendId when OTA, add tests --- src/config.test.ts | 40 ++++++++++++++++++++++++++++++++++++++++ src/config.ts | 8 ++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 src/config.test.ts diff --git a/src/config.test.ts b/src/config.test.ts new file mode 100644 index 0000000..903e32e --- /dev/null +++ b/src/config.test.ts @@ -0,0 +1,40 @@ +import { describe, it, expect } from "vitest"; +import { processLineupId, getHeadendId } from "./config.js"; + +describe("processLineupId", () => { + it("returns env LINEUP_ID if set", () => { + process.env.LINEUP_ID = "USA-12345"; + expect(processLineupId()).toBe("USA-12345"); + delete process.env.LINEUP_ID; + }); + + it("returns argv --lineupId if set", () => { + process.argv.push("--lineupId=USA-54321"); + expect(processLineupId()).toBe("USA-54321"); + process.argv = process.argv.filter((arg) => !arg.startsWith("--lineupId=")); + }); + + it("returns default if nothing set", () => { + expect(processLineupId()).toBe("USA-lineupId-DEFAULT"); + }); + + it("returns default if lineupId contains OTA", () => { + process.env.LINEUP_ID = "USA-OTA12345"; + expect(processLineupId()).toBe("USA-lineupId-DEFAULT"); + delete process.env.LINEUP_ID; + }); +}); + +describe("getHeadendId", () => { + it("extracts headend from valid lineupId", () => { + expect(getHeadendId("USA-OTA12345")).toBe("lineupId"); + expect(getHeadendId("USA-NY31587-L")).toBe("NY31587"); + expect(getHeadendId("CAN-OTAT1L0A1")).toBe("lineupId"); + expect(getHeadendId("CAN-0008861-X")).toBe("0008861"); + }); + + it("returns 'lineup' if no match", () => { + expect(getHeadendId("INVALID")).toBe("lineup"); + expect(getHeadendId("")).toBe("lineup"); + }); +}); diff --git a/src/config.ts b/src/config.ts index 1186968..57f536b 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,6 +1,6 @@ import { UserAgent } from "./useragents.js"; -function processLineupId(): string { +export function processLineupId(): string { const lineupId = process.env["LINEUP_ID"] || process.argv.find((arg) => arg.startsWith("--lineupId="))?.split("=")[1] || @@ -13,7 +13,11 @@ function processLineupId(): string { return lineupId; } -function getHeadendId(lineupId: string): string { +export function getHeadendId(lineupId: string): string { + if (lineupId.includes("OTA")) { + return "lineupId"; + } + const match = lineupId.match(/^(USA|CAN)-(.*?)(?:-[A-Z]+)?$/); return match?.[2] || "lineup";