import { describe, expect, it } from "vitest"; import { classifyMatch, formatMatchLine, parseUtc, renderToday, renderWeek, } from "../../../src/modules/lolschedule/format.js"; const scheduled = { DateTime: "2026-04-21 09:00:00", T1: "T1", T2: "Gen.G", S1: "", S2: "", Winner: "", Tournament: "LCK 2026 Spring", BO: "3", OP: "LCK/2026_Season/Spring_Season", }; const live = { ...scheduled, DateTime: "2026-04-21 08:00:00", S1: "1", S2: "0", }; const played = { ...scheduled, DateTime: "2026-04-20 10:00:00", S1: "2", S2: "1", Winner: "1", }; // Fixed reference — 2026-04-21 08:30:00 UTC (i.e. 15:30 ICT) const nowMs = Date.parse("2026-04-21T08:30:00Z"); describe("parseUtc", () => { it("parses Leaguepedia UTC literal", () => { expect(parseUtc("2026-04-21 09:00:00").toISOString()).toBe("2026-04-21T09:00:00.000Z"); }); }); describe("classifyMatch", () => { it("returns played when Winner is 1 or 2", () => { expect(classifyMatch(played, nowMs)).toBe("played"); expect(classifyMatch({ ...played, Winner: "2" }, nowMs)).toBe("played"); }); it("returns live when started, has partial score, no winner", () => { expect(classifyMatch(live, nowMs)).toBe("live"); }); it("returns scheduled when start time is in the future", () => { expect(classifyMatch(scheduled, nowMs)).toBe("scheduled"); }); it("returns scheduled when start is past but no score", () => { const row = { ...scheduled, DateTime: "2026-04-21 07:00:00" }; expect(classifyMatch(row, nowMs)).toBe("scheduled"); }); }); describe("formatMatchLine", () => { it("renders scheduled with ICT time and vs", () => { const line = formatMatchLine(scheduled, nowMs); // 09:00 UTC → 16:00 ICT expect(line).toContain("16:00"); expect(line).toContain("vs"); expect(line).toContain("Bo3"); expect(line).toContain("LCK 2026 Spring"); expect(line.startsWith("🕒")).toBe(true); }); it("renders played with score and winner bolded", () => { const line = formatMatchLine(played, nowMs); expect(line).toContain("2–1"); expect(line).toContain("T1"); expect(line.startsWith("✅")).toBe(true); }); it("renders live prefix", () => { const line = formatMatchLine(live, nowMs); expect(line.startsWith("🔴 LIVE")).toBe(true); expect(line).toContain("1–0"); }); it("escapes HTML in team and tournament names", () => { const row = { ...scheduled, T1: "