38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
import { explainUseCase } from '@/usecases/explainUseCase'
|
|
import { PoiDetailUseCase } from '@/usecases/poiDetailUseCase'
|
|
|
|
vi.mock('@/usecases/explainUseCase', () => ({
|
|
explainUseCase: {
|
|
getExhibitById: vi.fn(),
|
|
listHalls: vi.fn()
|
|
}
|
|
}))
|
|
|
|
describe('PoiDetailUseCase', () => {
|
|
beforeEach(() => {
|
|
vi.mocked(explainUseCase.getExhibitById).mockReset()
|
|
})
|
|
|
|
it('resolves a POI exhibit reference to a guide stop before opening the unified detail route', async () => {
|
|
vi.mocked(explainUseCase.getExhibitById).mockResolvedValue({
|
|
id: 'stop-865546647764037632',
|
|
resolvedStopId: '865546647764037632'
|
|
} as never)
|
|
|
|
const target = await new PoiDetailUseCase().resolve({
|
|
id: 'poi-1',
|
|
name: '青铜神树',
|
|
floorId: 'floor-1',
|
|
exhibitId: 'exhibit-1'
|
|
})
|
|
|
|
const params = new URLSearchParams(target.url.split('?')[1])
|
|
expect(explainUseCase.getExhibitById).toHaveBeenCalledWith('exhibit-1')
|
|
expect(target.detailId).toBe('865546647764037632')
|
|
expect(target.stopId).toBe('865546647764037632')
|
|
expect(params.get('id')).toBe('exhibit-1')
|
|
expect(params.get('stopId')).toBe('865546647764037632')
|
|
})
|
|
})
|