import { describe, expect, it } from "@jest/globals" import { buildPanelNodeNameAliasMap, normalizeNodeNameForMatch, resolvePanelNodeNameFromAlias, } from "@/lib/panel-node-alias" describe("panel-node-alias", () => { it("应按真实编号解析 Board_n / Panel_n,不依赖面板数组顺序", () => { const panelAliasMap = buildPanelNodeNameAliasMap([ { gltfNodeName: "panel_003", code: "CAD_panel_003", name: "竖隔板" }, { gltfNodeName: "panel_001", code: "CAD_panel_001", name: "竖隔板" }, { gltfNodeName: "panel_000", code: "CAD_panel_000", name: "横隔板" }, ]) expect( resolvePanelNodeNameFromAlias(panelAliasMap, "Board_1", { allowRawFallback: false, }), ).toBe("panel_001") expect( resolvePanelNodeNameFromAlias(panelAliasMap, "Panel_1", { allowRawFallback: false, }), ).toBe("panel_001") expect( resolvePanelNodeNameFromAlias(panelAliasMap, "Board_3", { allowRawFallback: false, }), ).toBe("panel_003") expect( resolvePanelNodeNameFromAlias(panelAliasMap, "Board_0", { allowRawFallback: false, }), ).toBe("panel_000") }) it("当 canonical 不含 0 号面板时,别名层不应做顺序兜底映射", () => { const panelAliasMap = buildPanelNodeNameAliasMap([ { gltfNodeName: "panel_003", code: "CAD_panel_003", name: "竖隔板" }, { gltfNodeName: "panel_001", code: "CAD_panel_001", name: "横隔板" }, ]) expect( resolvePanelNodeNameFromAlias(panelAliasMap, "Board_1", { allowRawFallback: false, }), ).toBe("panel_001") expect( resolvePanelNodeNameFromAlias(panelAliasMap, "Board_2", { allowRawFallback: false, }), ).toBeNull() }) it("应兼容 cad_ 前缀与去前缀名称互相解析", () => { const panelAliasMap = buildPanelNodeNameAliasMap([ { gltfNodeName: "cad_panel_left", code: "cad_panel_left", name: "Panel Left", }, ]) expect( resolvePanelNodeNameFromAlias(panelAliasMap, "cad_panel_left", { allowRawFallback: false, }), ).toBe("cad_panel_left") expect( resolvePanelNodeNameFromAlias(panelAliasMap, "panel_left", { allowRawFallback: false, }), ).toBe("cad_panel_left") }) it("名称规范化应去除 cad_ 前缀并忽略大小写与分隔符", () => { expect(normalizeNodeNameForMatch(" CAD_Panel-01 ")).toBe("panel01") expect(normalizeNodeNameForMatch("Panel_01")).toBe("panel01") }) it("模糊匹配时应避免 panel_10 误映射到 panel_1", () => { const panelAliasMap = buildPanelNodeNameAliasMap([ { gltfNodeName: "cad_panel_1", code: "P-001", name: "侧板1" }, { gltfNodeName: "cad_panel_10", code: "P-010", name: "侧板10" }, ]) expect( resolvePanelNodeNameFromAlias(panelAliasMap, "panel_10_mesh", { allowRawFallback: false, }), ).toBe("cad_panel_10") }) it("仅存在 panel_1 时,panel_10 查询不应误命中", () => { const panelAliasMap = buildPanelNodeNameAliasMap([ { gltfNodeName: "cad_panel_1", code: "P-001", name: "Panel" }, ]) expect( resolvePanelNodeNameFromAlias(panelAliasMap, "panel_10_mesh", { allowRawFallback: false, }), ).toBeNull() }) it("应兼容 panel_001_2 这类带子编号节点并映射到主面板", () => { const panelAliasMap = buildPanelNodeNameAliasMap([ { gltfNodeName: "panel_001", code: "CAD_panel_001", name: "竖隔板" }, { gltfNodeName: "panel_003", code: "CAD_panel_003", name: "横隔板" }, ]) expect( resolvePanelNodeNameFromAlias(panelAliasMap, "panel_001_2", { allowRawFallback: false, }), ).toBe("panel_001") expect( resolvePanelNodeNameFromAlias(panelAliasMap, "board_001_5", { allowRawFallback: false, }), ).toBe("panel_001") }) it("显示编号别名不应覆盖真实 canonical panel id", () => { const panelAliasMap = buildPanelNodeNameAliasMap([ { gltfNodeName: "panel_008", code: "CAD_009", name: "层板 9" }, { gltfNodeName: "panel_009", code: "CAD_010", name: "顶板 10" }, ]) expect( resolvePanelNodeNameFromAlias(panelAliasMap, "CAD_009", { allowRawFallback: false, }), ).toBe("panel_008") expect( resolvePanelNodeNameFromAlias(panelAliasMap, "panel_009", { allowRawFallback: false, }), ).toBe("panel_009") expect( resolvePanelNodeNameFromAlias(panelAliasMap, "Board_10", { allowRawFallback: false, }), ).toBeNull() }) })