59 lines
3.6 KiB
TypeScript
59 lines
3.6 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
||
import type { Spec } from "@json-render/core";
|
||
import { withAnswerDisplayTimes } from "./answer-display-time";
|
||
|
||
describe("answer presentation time zone", () => {
|
||
it("formats report text, tables, evidence and axes while preserving IDs and source samples", () => {
|
||
const spec: Spec = { root: "root", elements: {
|
||
root: { type: "Result", props: { title: "诊断", summary: "目标2026-07-16T00:00:00Z,当前08:00(UTC+8)" }, children: [] },
|
||
table: { type: "Table", props: { title: "读数", columns: ["时间"], rows: [["2026-07-16T00:00:00Z"]] }, children: [] },
|
||
evidence: { type: "Evidence", props: { observed_at: "2026-07-16T00:00:00Z", evidence_id: "2026-07-16T00:00:00Z" }, children: [] },
|
||
chart: { type: "Chart", props: { x_axis_name: "时间(UTC0)", x_data: ["00:00 UTC"],
|
||
series: [{ name: "压力", data: [20], sample_times: ["2026-07-16T00:00:00Z"] }] }, children: [] }
|
||
} };
|
||
const original = JSON.stringify(spec);
|
||
const result = withAnswerDisplayTimes(spec);
|
||
expect(result.elements.root.props.summary).toBe("目标2026/7/16 08:00:00(UTC+8),当前08:00(UTC+8)");
|
||
expect(result.elements.table.props.rows).toEqual([["2026/7/16 08:00:00(UTC+8)"]]);
|
||
expect(result.elements.evidence.props.observed_at).toBe("2026/7/16 08:00:00(UTC+8)");
|
||
expect(result.elements.evidence.props.evidence_id).toBe("2026-07-16T00:00:00Z");
|
||
expect(result.elements.chart.props.x_axis_name).toBe("时间");
|
||
expect(result.elements.chart.props.x_data).toEqual(["08:00"]);
|
||
expect(JSON.stringify(spec)).toBe(original);
|
||
expect(withAnswerDisplayTimes(result)).toEqual(result);
|
||
});
|
||
|
||
it("converts bare times when their table header or chart axis explicitly declares UTC", () => {
|
||
const spec: Spec = { root: "chart", elements: {
|
||
chart: { type: "Chart", props: { x_axis_name: "时间(UTC0)", x_data: ["00:00", "2026-12-31 17:00", "08:00+08:00"],
|
||
series: [{ name: "压力", data: [20, 21, 22] }] }, children: [] },
|
||
table: { type: "Table", props: { columns: ["观测时间(UTC)", "测点编号"],
|
||
rows: [["2026-12-31 17:00", "00:00"]] }, children: [] }
|
||
} };
|
||
const result = withAnswerDisplayTimes(spec);
|
||
expect(result.elements.chart.props.x_data).toEqual(["08:00", "2027/1/1 01:00:00", "08:00+08:00"]);
|
||
expect(result.elements.table.props.columns).toEqual(["观测时间(UTC+8)", "测点编号"]);
|
||
expect(result.elements.table.props.rows).toEqual([["2027/1/1 01:00:00(UTC+8)", "00:00"]]);
|
||
expect(withAnswerDisplayTimes(result)).toEqual(result);
|
||
});
|
||
it("removes chart timezone wording while preserving the window, data and sample instants", () => {
|
||
const samples = ["2026-07-15T23:30:00Z", "2026-07-15T23:45:00Z"];
|
||
const spec: Spec = { root: "chart", elements: {
|
||
chart: { type: "Chart", props: {
|
||
title: "回放流量:487434(m³/h,上海时间 07-16 04:45–07:45)",
|
||
x_axis_name: "上海时间", x_data: ["07:30", "07:45"],
|
||
series: [{ name: "当前回放(2026-07-16,UTC+8)", data: [420, 380], sample_times: samples }]
|
||
}, children: [] }
|
||
} };
|
||
const result = withAnswerDisplayTimes(spec);
|
||
expect(result.elements.chart.props.title).toBe("回放流量:487434(m³/h,07-16 04:45–07:45)");
|
||
expect(result.elements.chart.props.x_axis_name).toBe("时间");
|
||
expect(result.elements.chart.props.x_data).toEqual(["07:30", "07:45"]);
|
||
expect(result.elements.chart.props.series).toEqual([
|
||
{ name: "当前回放(2026-07-16)", data: [420, 380], sample_times: samples }
|
||
]);
|
||
expect(withAnswerDisplayTimes(result)).toEqual(result);
|
||
});
|
||
|
||
});
|