Files
frontend-miniapp/tests/unit/navAssetsAdapter.spec.ts

105 lines
4.1 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { toMuseumPoi } from '@/data/adapters/navAssetsAdapter'
import { isVisitorSearchPoi, resolvePoiCategory } from '@/domain/poiCategories'
import type { StaticNavPoiPayload } from '@/data/providers/staticNavAssetsProvider'
const createStaticPoi = (name: string, iconType = 'elevator'): StaticNavPoiPayload => ({
id: `poi-${name}`,
name,
floorId: 'L1',
primaryCategory: 'basic_service_facility',
primaryCategoryZh: '基础服务设施',
iconType,
categories: [{
topCategory: 'basic_service_facility',
topCategoryZh: '基础服务设施',
subcategory: iconType,
iconType
}],
positionGltf: [1, 0, 1]
})
const createTouringPoi = (name: string, iconType = 'exhibition'): StaticNavPoiPayload => ({
...createStaticPoi(name, iconType),
primaryCategory: 'touring_poi',
primaryCategoryZh: '展厅与参观点',
categories: [{
topCategory: 'touring_poi',
topCategoryZh: '展厅与参观点',
subcategory: iconType,
iconType
}]
})
describe('static nav POI adapter', () => {
it('repairs legacy static facility icons from visitor-facing names', () => {
const stairs = toMuseumPoi(createStaticPoi('西侧楼梯'))
const escalator = toMuseumPoi(createStaticPoi('中央扶梯'))
const nursing = toMuseumPoi(createStaticPoi('母婴室', 'toilet'))
const restroom = toMuseumPoi(createStaticPoi('无障碍洗手间', 'elevator'))
expect(stairs.primaryCategory.iconType).toBe('stairs')
expect(resolvePoiCategory(stairs)).toBeNull()
expect(escalator.primaryCategory.iconType).toBe('escalator')
expect(resolvePoiCategory(escalator)?.id).toBe('escalator')
expect(nursing.primaryCategory.iconType).toBe('mother_baby_room')
expect(resolvePoiCategory(nursing)?.id).toBe('nursing-room')
expect(restroom.primaryCategory.iconType).toBe('accessible_toilet')
expect(resolvePoiCategory(restroom)?.id).toBe('restroom')
})
it('repairs static generic restroom icons for service facilities without misclassifying tea rooms', () => {
const serviceDesk = toMuseumPoi(createStaticPoi('服务台', 'restroom'))
const locker = toMuseumPoi(createStaticPoi('存包处', 'restroom'))
const teaRoom = toMuseumPoi(createStaticPoi('茶水间', 'restroom'))
const vipReception = toMuseumPoi(createStaticPoi('贵宾接待区', 'restroom'))
const vipRestroom = toMuseumPoi(createStaticPoi('贵宾卫生间', 'restroom'))
expect(resolvePoiCategory(serviceDesk)?.id).toBe('service-center')
expect(resolvePoiCategory(locker)?.id).toBe('service-center')
expect(resolvePoiCategory(teaRoom)).toBeNull()
expect(teaRoom.visitorVisible).toBe(false)
expect(vipReception.visitorVisible).toBe(false)
expect(vipRestroom.visitorVisible).toBe(false)
expect(toMuseumPoi({
...createStaticPoi('茶水间', 'restroom'),
visitorVisible: true
}).visitorVisible).toBe(true)
expect(toMuseumPoi({
...createStaticPoi('贵宾卫生间', 'restroom'),
visitorVisible: true
}).visitorVisible).toBe(true)
})
it('splits generic touring fallback records into their visitor-facing semantic kinds', () => {
const cinema = toMuseumPoi(createTouringPoi('巨幕影院'))
const ticketOffice = toMuseumPoi(createTouringPoi('展厅售票点'))
expect(cinema).toMatchObject({
kind: 'space',
primaryCategory: { id: 'space_theater', iconType: 'theater' }
})
expect(resolvePoiCategory(cinema)?.id).toBe('cinema')
expect(ticketOffice).toMatchObject({
kind: 'facility',
primaryCategory: { id: 'basic_service_facility', iconType: 'ticket_office' }
})
expect(resolvePoiCategory(ticketOffice)?.id).toBe('ticket-office')
})
it('keeps a hall visible when its secondary category describes an entrance', () => {
const hall = toMuseumPoi(createTouringPoi('地球展厅'))
hall.kind = 'hall'
hall.categories = [
hall.primaryCategory,
{
id: 'exhibition_hall_entrance',
label: '展厅出入口',
iconType: 'hall_entrance'
}
]
expect(isVisitorSearchPoi(hall)).toBe(true)
})
})