125 lines
3.5 KiB
TypeScript
125 lines
3.5 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
toGuideRouteResultFromSgs,
|
|
toGuideRouteResultFromSgsPlan
|
|
} from '@/data/adapters/sgsSdkRouteAdapter'
|
|
|
|
const start = {
|
|
routeTargetId: 'start-anchor',
|
|
poiId: 'start',
|
|
name: '文创 02',
|
|
floorId: 'L1',
|
|
floorLabel: '1F',
|
|
positionGltf: [1, 0, 1] as [number, number, number],
|
|
routeNodeId: 'start-node'
|
|
}
|
|
|
|
const end = {
|
|
routeTargetId: 'end-anchor',
|
|
poiId: 'end',
|
|
name: '文创盖章打卡',
|
|
floorId: 'L2',
|
|
floorLabel: '2F',
|
|
positionGltf: [8, 0, 8] as [number, number, number],
|
|
routeNodeId: 'end-node'
|
|
}
|
|
|
|
describe('toGuideRouteResultFromSgsPlan', () => {
|
|
it('keeps the backend floor-transfer semantic instead of flattening it away', () => {
|
|
const route = toGuideRouteResultFromSgsPlan({
|
|
distance: 32,
|
|
segments: [
|
|
{ floorId: 'L1', transferType: 'WALK', pathPoints: [{ x: 1, y: 0, z: 1 }, { x: 3, y: 0, z: 3 }] },
|
|
{
|
|
floorId: 'L1',
|
|
fromFloorId: 'L1',
|
|
targetFloorId: 'L2',
|
|
transferType: 'ELEVATOR',
|
|
connectorName: '东侧电梯'
|
|
},
|
|
{ floorId: 'L2', transferType: 'WALK', pathPoints: [{ x: 5, y: 0, z: 5 }, { x: 8, y: 0, z: 8 }] }
|
|
]
|
|
}, start, end)
|
|
|
|
expect(route.floorSegments.map((segment) => segment.floorId)).toEqual(['L1', 'L2'])
|
|
expect(route.transitions).toEqual([expect.objectContaining({
|
|
fromFloorId: 'L1',
|
|
toFloorId: 'L2',
|
|
transferType: 'ELEVATOR',
|
|
connectorName: '东侧电梯'
|
|
})])
|
|
})
|
|
|
|
it('unifies floor aliases with published model floor ids', () => {
|
|
const rawStart = {
|
|
...start,
|
|
floorId: 'floor-db-5',
|
|
floorLabel: '5F'
|
|
}
|
|
const rawEnd = {
|
|
...end,
|
|
floorId: 'floor-db-1',
|
|
floorLabel: '1F'
|
|
}
|
|
const route = toGuideRouteResultFromSgsPlan({
|
|
distance: 20,
|
|
segments: [
|
|
{
|
|
floorId: 'L5',
|
|
floorCode: 'L5',
|
|
transferType: 'WALK',
|
|
pathPoints: [{ x: 1, y: 0, z: 1 }, { x: 3, y: 0, z: 3 }]
|
|
},
|
|
{
|
|
floorId: 'floor-db-5',
|
|
fromFloorId: 'floor-db-5',
|
|
targetFloorId: 'L1',
|
|
transferType: 'ELEVATOR',
|
|
connectorName: 'B电梯'
|
|
},
|
|
{
|
|
floorId: 'floor-db-1',
|
|
floorCode: 'L1',
|
|
transferType: 'WALK',
|
|
pathPoints: [{ x: 5, y: 0, z: 5 }, { x: 8, y: 0, z: 8 }]
|
|
}
|
|
]
|
|
}, rawStart, rawEnd)
|
|
|
|
expect(route.start.floorId).toBe('floor-db-5')
|
|
expect(route.end.floorId).toBe('floor-db-1')
|
|
expect(route.floorSegments.map((segment) => segment.floorId)).toEqual([
|
|
'floor-db-5',
|
|
'floor-db-1'
|
|
])
|
|
expect(route.points.every((point) => (
|
|
point.floorId === 'floor-db-5' || point.floorId === 'floor-db-1'
|
|
))).toBe(true)
|
|
expect(route.transitions).toEqual([expect.objectContaining({
|
|
fromFloorId: 'floor-db-5',
|
|
toFloorId: 'floor-db-1'
|
|
})])
|
|
})
|
|
|
|
it('keeps runtime SDK path aliases aligned with endpoint floors', () => {
|
|
const rawStart = { ...start, floorId: 'floor-db-5', floorLabel: '5F' }
|
|
const rawEnd = { ...end, floorId: 'floor-db-1', floorLabel: '1F' }
|
|
const route = toGuideRouteResultFromSgs({
|
|
distance: 12,
|
|
path: [
|
|
{ nodeId: 'a', floorId: 'L5', x: 1, z: 1 },
|
|
{ nodeId: 'b', floorId: 'L1', x: 8, z: 8 }
|
|
]
|
|
} as never, rawStart, rawEnd)
|
|
|
|
expect(route.floorSegments.map((segment) => segment.floorId)).toEqual([
|
|
'floor-db-5',
|
|
'floor-db-1'
|
|
])
|
|
expect(route.points.map((point) => point.floorId)).toEqual([
|
|
'floor-db-5',
|
|
'floor-db-1'
|
|
])
|
|
})
|
|
})
|