import dayjs from "dayjs"; import { api } from "@/lib/api"; import { buildBurstDetectionRequest, createBurstDetectionAnalysisParametersState, fetchPressureSamplingInterval, parseScadaFrequencyMinutes, resolvePressureSamplingInterval, } from "./AnalysisParameters"; jest.mock("@/lib/api", () => ({ api: { get: jest.fn(), }, })); const get = api.get as jest.Mock; describe("burst detection request", () => { beforeEach(() => { get.mockReset(); }); it("requests the latest complete monitoring time by default", () => { const state = createBurstDetectionAnalysisParametersState(); state.schemeName = " latest-case "; expect(buildBurstDetectionRequest(state)).toEqual({ scheme_name: "latest-case", sampling_interval_minutes: 15, }); expect(state.detectionMode).toBe("latest"); expect(state.targetTime).not.toBeNull(); expect(state.targetTime!.minute() % 15).toBe(0); }); it("sends one target time for historical replay", () => { const targetTime = dayjs("2026-06-20T13:30:00+08:00"); expect( buildBurstDetectionRequest( { schemeName: "history-case", detectionMode: "historical", targetTime, samplingIntervalMinutes: 30, samplingIntervalSource: "manual", }, ), ).toEqual({ scheme_name: "history-case", sampling_interval_minutes: 30, target_time: targetTime.toISOString(), }); }); it("uses the dominant pressure SCADA frequency as the editable default", () => { expect(parseScadaFrequencyMinutes("0:15:00")).toBe(15); expect(parseScadaFrequencyMinutes("1:00:00")).toBe(60); expect( resolvePressureSamplingInterval([ { device_type: "pressure", transmission_frequency: "0:15:00" }, { device_type: "pressure", transmission_frequency: "0:15:00" }, { device_type: "pressure", transmission_frequency: "0:30:00" }, { device_type: "pipe_flow", transmission_frequency: "1:00:00" }, ]), ).toBe(15); }); it("loads the pressure frequency from the pooled SCADA metadata endpoint", async () => { get.mockResolvedValue({ data: { success: true, count: 2, data: [ { device_type: "pressure", transmission_frequency: "0:30:00" }, { device_type: "pipe_flow", transmission_frequency: "0:15:00" }, ], }, }); await expect(fetchPressureSamplingInterval()).resolves.toBe(30); expect(get).toHaveBeenCalledWith("/api/v1/scada-info/database-view"); }); });