feat(sensor): 完善监测点结果编辑与图层切换

This commit is contained in:
2026-08-03 19:00:16 +08:00
parent 5592c27386
commit 5d9c40e454
12 changed files with 463 additions and 127 deletions
@@ -1,5 +1,6 @@
import { act, fireEvent, render, screen } from "@testing-library/react";
import MonitoringPlaceOptimizationPanel, {
getMonitoringLayerVisibility,
getTabIndicatorSx,
getTabIndicatorTransform,
} from "./MonitoringPlaceOptimizationPanel";
@@ -7,6 +8,7 @@ import { getSensorPlacementScheme } from "./schemeApi";
import type { SensorPlacementScheme } from "./types";
const mockSchemeEditorRender = jest.fn();
const mockSchemeQueryRender = jest.fn();
jest.mock("@refinedev/core", () => ({
useNotification: () => ({ open: jest.fn() }),
@@ -20,9 +22,16 @@ jest.mock("./OptimizationParameters", () => ({
jest.mock("./SchemeQuery", () => ({
__esModule: true,
default: ({ onEdit }: { onEdit: (schemeId: number) => void }) => (
<button onClick={() => onEdit(7)}></button>
),
default: ({
onEdit,
active,
}: {
onEdit: (schemeId: number) => void;
active?: boolean;
}) => {
mockSchemeQueryRender(active);
return <button onClick={() => onEdit(7)}></button>;
},
createMonitoringSchemeQueryState: () => ({}),
}));
@@ -66,6 +75,7 @@ const scheme: SensorPlacementScheme = {
describe("MonitoringPlaceOptimizationPanel", () => {
beforeEach(() => {
mockSchemeEditorRender.mockClear();
mockSchemeQueryRender.mockClear();
});
it("applies equal-width positioning to the rendered tab indicator", () => {
@@ -90,6 +100,21 @@ describe("MonitoringPlaceOptimizationPanel", () => {
expect(indicator).toHaveStyle({ transform: "translateX(200%)" });
});
it("keeps query and editor layers mutually exclusive by active tab", () => {
expect(getMonitoringLayerVisibility(0)).toEqual({
editor: false,
query: false,
});
expect(getMonitoringLayerVisibility(1)).toEqual({
editor: true,
query: false,
});
expect(getMonitoringLayerVisibility(2)).toEqual({
editor: false,
query: true,
});
});
it("prepares a queried scheme before switching to the result editor", async () => {
let resolveScheme: (value: SensorPlacementScheme) => void = () => {};
mockGetSensorPlacementScheme.mockReturnValue(
@@ -119,5 +144,23 @@ describe("MonitoringPlaceOptimizationPanel", () => {
false,
true,
]);
expect(mockSchemeQueryRender.mock.calls.at(-1)?.[0]).toBe(false);
});
it("keeps the active result layer visible when the panel is collapsed", async () => {
mockGetSensorPlacementScheme.mockResolvedValue(scheme);
render(<MonitoringPlaceOptimizationPanel />);
fireEvent.click(screen.getByRole("tab", { name: /方案查询/ }));
fireEvent.click(screen.getByRole("button", { name: "打开测试方案" }));
await screen.findByTestId("scheme-editor");
const collapseButton = screen
.getByTestId("ChevronRightIcon")
.closest("button");
expect(collapseButton).not.toBeNull();
fireEvent.click(collapseButton!);
expect(mockSchemeEditorRender.mock.calls.at(-1)?.[0]).toBe(true);
});
});