import { describe, test, expect } from 'vitest'; import { toProductDocumentView, toDocumentListView } from './documentMapper'; /** * 单元测试: toProductDocumentView */ describe('toProductDocumentView', () => { const baseData: ProductDocument = { id: 1, file: { id: 'rand-om__-uuid-1234', filename_download: 'document.pdf', filesize: 2048, }, translations: [{ id: 10, title: 'Document Title' }], }; test('convert raw data with fileMeta to ProductDocumentView correctly', () => { const rawData: ProductDocument = { ...baseData }; expect(toProductDocumentView(rawData)).toEqual({ id: 1, fileId: 'rand-om__-uuid-1234', filename: 'document.pdf', title: 'Document Title', url: '/api/assets/rand-om__-uuid-1234', size: 2048, }); }); test('convert raw data with fileId', () => { const rawData: ProductDocument = { ...baseData, file: 'rand-om__-uuid-1234', }; expect(toProductDocumentView(rawData)).toEqual({ id: 1, fileId: '', filename: '', title: 'Document Title', url: '/api/assets/', size: 0, }); }); test('convert raw data with missing translations', () => { const rawData: ProductDocument = { ...baseData, translations: [], }; expect(toProductDocumentView(rawData)).toEqual({ id: 1, fileId: 'rand-om__-uuid-1234', filename: 'document.pdf', title: '', url: '/api/assets/rand-om__-uuid-1234', size: 2048, }); }); }); /** * 单元测试: toDocumentListView */ describe('toDocumentListView', () => { const baseData: ProductDocument = { id: 1, file: { id: 'rand-om__-uuid-1234', filename_download: 'document.pdf', filesize: 2048, }, translations: [{ id: 10, title: 'Document Title' }], products: [ { id: 10, products_id: { id: 1, translations: [{ id: 1, name: 'Product A' }], product_type: { id: 1, translations: [{ id: 1, name: 'Type A' }], }, }, }, ], }; test('convert raw data with fileMeta to DocumentListView correctly', () => { const rawData: ProductDocument = { ...baseData }; expect(toDocumentListView(rawData)).toEqual({ id: 1, fileId: 'rand-om__-uuid-1234', filename: 'document.pdf', title: 'Document Title', url: '/api/assets/rand-om__-uuid-1234', size: 2048, products: [ { id: 1, name: 'Product A', type: { id: 1, name: 'Type A', }, }, ], }); }); });