feat(3d): integrate ZJB scene with project context
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
import { fireEvent, render, screen } from "@testing-library/react";
|
||||
|
||||
import { ThreeDimensionalControls } from "./ThreeDimensionalControls";
|
||||
import type { SceneRuntimeState } from "./sceneProtocol";
|
||||
|
||||
const state: SceneRuntimeState = {
|
||||
mode: "network",
|
||||
status: "管网实体模型",
|
||||
contextVisible: true,
|
||||
roofVisible: true,
|
||||
displayMode: "global",
|
||||
style: {
|
||||
scale: 8,
|
||||
mode: "uniform",
|
||||
color: "#098ed0",
|
||||
missingColor: "#89949d",
|
||||
lowColor: "#2b83ba",
|
||||
highColor: "#e66c37",
|
||||
opacity: 1,
|
||||
roughness: 0.3,
|
||||
metalness: 0.22,
|
||||
nodes: true,
|
||||
direction: "none",
|
||||
arrowColor: "#f2b447",
|
||||
autoRange: true,
|
||||
min: 0,
|
||||
max: 3,
|
||||
},
|
||||
styleSummary: {},
|
||||
appearance: {
|
||||
preset: "day",
|
||||
exposure: 0.95,
|
||||
shadows: true,
|
||||
effects: true,
|
||||
quality: "standard",
|
||||
},
|
||||
camera: {
|
||||
active: "overview",
|
||||
note: "供水总览",
|
||||
views: [
|
||||
{
|
||||
id: "overview",
|
||||
label: "供水总览",
|
||||
mode: "network",
|
||||
saved: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
describe("ThreeDimensionalControls", () => {
|
||||
it("sends typed scene commands from platform controls", () => {
|
||||
const onCommand = jest.fn();
|
||||
const onTimelineOpenChange = jest.fn();
|
||||
render(
|
||||
<ThreeDimensionalControls
|
||||
open
|
||||
activeTab="scene"
|
||||
ready
|
||||
state={state}
|
||||
selection={null}
|
||||
timelineOpen
|
||||
onOpenChange={jest.fn()}
|
||||
onTimelineOpenChange={onTimelineOpenChange}
|
||||
onTabChange={jest.fn()}
|
||||
onCommand={onCommand}
|
||||
/>,
|
||||
);
|
||||
|
||||
fireEvent.click(screen.getByRole("button", { name: "站房精细版" }));
|
||||
expect(onCommand).toHaveBeenCalledWith({ name: "set-mode", mode: "detail" });
|
||||
fireEvent.click(screen.getByRole("button", { name: "时间轴" }));
|
||||
expect(onTimelineOpenChange).toHaveBeenCalledWith(false);
|
||||
});
|
||||
|
||||
it("shows selected asset fields and linked assets in the property tab", () => {
|
||||
const onCommand = jest.fn();
|
||||
render(
|
||||
<ThreeDimensionalControls
|
||||
open
|
||||
activeTab="properties"
|
||||
ready
|
||||
state={state}
|
||||
selection={{
|
||||
assetId: "inp:node:J-1",
|
||||
elementId: "J-1",
|
||||
kind: "节点",
|
||||
title: "节点 · J-1",
|
||||
sections: [
|
||||
{
|
||||
title: "运行结果",
|
||||
fields: [{ label: "压力", value: "31.200 mH₂O" }],
|
||||
},
|
||||
],
|
||||
neighbors: [{ id: "P-1", label: "P-1" }],
|
||||
}}
|
||||
timelineOpen
|
||||
onOpenChange={jest.fn()}
|
||||
onTimelineOpenChange={jest.fn()}
|
||||
onTabChange={jest.fn()}
|
||||
onCommand={onCommand}
|
||||
/>,
|
||||
);
|
||||
|
||||
expect(screen.getByText("节点 · J-1")).toBeInTheDocument();
|
||||
expect(screen.getByText("31.200 mH₂O")).toBeInTheDocument();
|
||||
fireEvent.click(screen.getByRole("button", { name: "P-1" }));
|
||||
expect(onCommand).toHaveBeenCalledWith({ name: "select-asset", assetId: "P-1" });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user