import { describe, expect, it } from "vitest"; import { parseFrontendChart } from "./chart"; describe("frontend chart boundary", () => { const chart = { title: "压力", chart_type: "line", x_data: ["t1", "t2"], series: [{ name: "D1", data: [20, 21] }] }; it("accepts finite aligned series and rejects code, unaligned data and excessive points", () => { expect(parseFrontendChart(chart)).not.toBeNull(); expect(parseFrontendChart({ ...chart, formatter: "function(){}" })).toBeNull(); expect(parseFrontendChart({ ...chart, series: [{ name: "D1", data: [20] }] })).toBeNull(); expect(parseFrontendChart({ ...chart, series: [{ name: "D1", data: [20, Infinity] }] })).toBeNull(); expect(parseFrontendChart({ ...chart, x_data: Array(101).fill("t") })).toBeNull(); }); it("accepts sparse history with real timestamp metadata and rejects invented or misaligned timestamps", () => { const series = { name: "前一天", type: "scatter", data: [null, 31], sample_times: [null, "2026-06-13T12:00:00+08:00"] }; expect(parseFrontendChart({ ...chart, y_axis_name: "压力(m)", series: [chart.series[0], series] })).not.toBeNull(); for (const sample_times of [["2026-06-13T11:45:00+08:00", series.sample_times[1]], [null], [null, "2026-06-13T12:00:00"], [null, "2026-02-30T12:00:00+08:00"]]) { expect(parseFrontendChart({ ...chart, series: [{ ...series, sample_times }] })).toBeNull(); } expect(parseFrontendChart({ ...chart, series: [{ ...series, type: "pie" }] })).toBeNull(); }); });