Files
frontend-miniapp/tests/unit/SgsSdkRouteAdapter.spec.ts
lyf 9ea1bfab71
Some checks failed
CI / verify (push) Has been cancelled
同步 sgs-frontend-mobile 源码
2026-07-27 11:26:01 +08:00

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'
])
})
})