24 lines
1.5 KiB
TypeScript
24 lines
1.5 KiB
TypeScript
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();
|
||
});
|
||
});
|