furniture-3d-system-Wu/tests/lib/panel-node-mapper.test.ts

74 lines
2.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { describe, expect, it } from '@jest/globals'
import { mapPanelsToModelNodes } from '@/lib/panel-node-mapper'
function createPanels(gltfNodeNames: string[]) {
return gltfNodeNames.map((gltfNodeName, index) => ({
id: `panel-db-${index + 1}`,
gltfNodeName,
}))
}
describe('panel-node-mapper', () => {
it('应识别全局 +1 编号偏移,避免 panel_001 错绑到最后一个节点', () => {
const panels = createPanels(['panel_000', 'panel_001', 'panel_002', 'panel_003'])
const modelNodes = ['Board_1', 'Board_2', 'Board_3', 'Board_4']
const result = mapPanelsToModelNodes(panels, modelNodes)
expect(result.usedNumericOffset).toBe(1)
expect(result.panelResolvedNodeNameById.get('panel-db-1')).toBe('Board_1')
expect(result.panelResolvedNodeNameById.get('panel-db-2')).toBe('Board_2')
expect(result.panelResolvedNodeNameById.get('panel-db-3')).toBe('Board_3')
expect(result.panelResolvedNodeNameById.get('panel-db-4')).toBe('Board_4')
expect(result.unresolvedPanelIds).toEqual([])
expect(result.hasFallbackAssignments).toBe(false)
})
it('应保持一对一映射,不产生重复节点绑定', () => {
const panels = createPanels(Array.from({ length: 49 }, (_, index) => `panel_${String(index).padStart(3, '0')}`))
const modelNodes = Array.from({ length: 49 }, (_, index) => `Board_${index + 1}`)
const result = mapPanelsToModelNodes(panels, modelNodes)
const resolvedNodes = Array.from(result.panelResolvedNodeNameById.values())
expect(result.panelResolvedNodeNameById.size).toBe(49)
expect(new Set(resolvedNodes).size).toBe(49)
expect(result.hasAmbiguousMappings).toBe(false)
})
it('应优先使用精确名称匹配,再处理其余节点', () => {
const panels = createPanels(['Board_2', 'panel_001'])
const modelNodes = ['Board_1', 'Board_2']
const result = mapPanelsToModelNodes(panels, modelNodes)
expect(result.panelResolvedNodeNameById.get('panel-db-1')).toBe('Board_2')
expect(result.panelResolvedNodeNameById.get('panel-db-2')).toBe('Board_1')
expect(result.hasFallbackAssignments).toBe(false)
})
it('在节点不足时应标记 unresolved,且只做可确定映射', () => {
const panels = createPanels(['panel_001', 'panel_002'])
const modelNodes = ['Board_1']
const result = mapPanelsToModelNodes(panels, modelNodes)
expect(result.panelResolvedNodeNameById.size).toBe(1)
expect(result.unresolvedPanelIds.length).toBe(1)
})
it('不应把无法确认的板材顺序兜底映射到轮子或五金节点', () => {
const panels = createPanels(['panel_001', 'panel_002', 'panel_003'])
const modelNodes = ['wheel_left', 'caster_01', 'hardware_bracket']
const result = mapPanelsToModelNodes(panels, modelNodes)
expect(result.panelResolvedNodeNameById.size).toBe(0)
expect(result.unresolvedPanelIds).toEqual([
'panel-db-1',
'panel-db-2',
'panel-db-3',
])
})
})