Files
jinshen-website/server/mappers/productMapper.test.ts
R2m1liA 63cdff9c41
All checks were successful
deploy to server / build-and-deploy (push) Successful in 3m10s
feat: 为文档库添加文档类型显示功能
- 功能添加:在文档列表中,当未指定文档类型时,在标题右侧显示文档类型
- 查询更改:产品查询添加文档类型查询方法
- mapper更改:productDocumentView添加文档类型
2025-12-05 17:18:48 +08:00

502 lines
10 KiB
TypeScript

import { describe, test, expect } from 'vitest';
import {
toProductImageView,
toProductSpecView,
toProductSpecGroupView,
toProductQuestionView,
toProductDocumentView,
toProductView,
} from './productMapper';
/**
* 单元测试: toProductImageView
*/
describe('toProductImageView', () => {
const baseData: Array<ProductsProductImage> = [
{
id: 1,
product_images_id: {
id: 1,
image: {
id: 'rand-om__-uuid-1234',
},
translations: [
{
id: 1,
caption: 'Image Caption',
},
],
},
},
{
id: 2,
product_images_id: {
id: 2,
image: {
id: 'rand-om__-uuid-5678',
},
translations: [
{
id: 2,
caption: 'Image Caption 2',
},
],
},
},
];
test('convert raw data to ProductImageView correctly', () => {
const rawData: Array<ProductsProductImage> = [...baseData];
expect(toProductImageView(rawData)).toEqual([
{
id: '1',
image: 'rand-om__-uuid-1234',
caption: 'Image Caption',
},
{
id: '2',
image: 'rand-om__-uuid-5678',
caption: 'Image Caption 2',
},
]);
});
test('convert raw data with missing translations', () => {
const rawData: Array<ProductsProductImage> = [
{
id: 1,
product_images_id: {
id: 1,
image: {
id: 'rand-om__-uuid-1234',
},
translations: [],
},
},
];
expect(toProductImageView(rawData)).toEqual([
{
id: '1',
image: 'rand-om__-uuid-1234',
caption: '',
},
]);
});
test('convert empty array to empty ProductImageView array', () => {
const rawData: Array<ProductsProductImage> = [];
expect(toProductImageView(rawData)).toEqual([]);
});
test('convert input with wrong type to default value', () => {
const rawData: string[] = ['1', '2'];
expect(toProductImageView(rawData)).toEqual([
{
id: '1',
image: '',
caption: '',
},
{
id: '2',
image: '',
caption: '',
},
]);
});
});
/**
* 单元测试: toProductSpecView
*/
describe('toProductSpecView', () => {
const baseData: ProductSpec[] = [
{
id: 1,
translations: [
{
id: 1,
key: 'key 1',
value: 'value 1',
},
],
},
{
id: 2,
translations: [
{
id: 2,
key: 'key 2',
value: 'value 2',
},
],
},
];
test('convert raw data to ProductSpecView correctly', () => {
const rawData: ProductSpec[] = [...baseData];
expect(toProductSpecView(rawData)).toEqual([
{
id: '1',
key: 'key 1',
value: 'value 1',
},
{
id: '2',
key: 'key 2',
value: 'value 2',
},
]);
});
test('convert raw data with missing translations', () => {
const rawData: ProductSpec[] = [{ id: 1, translations: [] }];
expect(toProductSpecView(rawData)).toEqual([
{
id: '1',
key: '',
value: '',
},
]);
});
test('convert empty input to empty array', () => {
const rawData: ProductSpec[] = [];
expect(toProductSpecView(rawData)).toEqual([]);
});
test('convert input with wrong type to default value', () => {
const rawData: string[] = ['1', '2'];
expect(toProductSpecView(rawData)).toEqual([
{
id: '1',
key: '',
value: '',
},
{
id: '2',
key: '',
value: '',
},
]);
});
});
/**
* 单元测试: toProductSpecGroupView
*/
describe('toProductSpecGroupView', () => {
test('convert raw data to ProductSpecGroupView correctly', () => {
const rawData: ProductSpecGroup[] = [
{
id: 1,
translations: [{ id: 1, name: 'Group Name' }],
specs: [
{ id: 1, translations: [{ id: 1, key: 'Key1', value: 'Value1' }] },
{ id: 2, translations: [{ id: 2, key: 'Key2', value: 'Value2' }] },
],
},
];
expect(toProductSpecGroupView(rawData)).toEqual([
{
id: '1',
name: 'Group Name',
specs: [
{ id: '1', key: 'Key1', value: 'Value1' },
{ id: '2', key: 'Key2', value: 'Value2' },
],
},
]);
});
test('convert raw data with missing translations', () => {
const rawData: ProductSpecGroup[] = [
{
id: 1,
translations: [],
specs: [],
},
];
expect(toProductSpecGroupView(rawData)).toEqual([
{
id: '1',
name: '',
specs: [],
},
]);
});
test('convert input with wrong type to default value', () => {
const rawData: string[] = ['1', '2'];
expect(toProductSpecGroupView(rawData)).toEqual([
{
id: '1',
name: '',
specs: [],
},
{
id: '2',
name: '',
specs: [],
},
]);
});
test('convert empty ar ray to empty ProductSpecGroupView array', () => {
const rawData: ProductSpec[] = [];
expect(toProductSpecGroupView(rawData)).toEqual([]);
});
});
/**
* 单元测试: toProductQuestionView
*/
describe('toProductQuestionView', () => {
test('convert raw data to ProductQuestionView correctly', () => {
const rawData: ProductsQuestion[] = [
{
id: 1,
questions_id: {
id: 1,
translations: [
{
id: 1,
title: 'Question Title',
content: 'Question Content',
},
],
},
},
];
expect(toProductQuestionView(rawData)).toEqual([
{
id: '1',
title: 'Question Title',
content: 'Question Content',
},
]);
});
test('convert raw data with missing translations', () => {
const rawData: ProductsQuestion[] = [
{
id: 1,
questions_id: {
id: 1,
translations: [],
},
},
];
expect(toProductQuestionView(rawData)).toEqual([
{
id: '1',
title: '',
content: '',
},
]);
});
test('convert empty array to empty ProductQuestionView array', () => {
const rawData: ProductsQuestion[] = [];
expect(toProductQuestionView(rawData)).toEqual([]);
});
test('convert input with wrong type to default value', () => {
const rawData: string[] = ['1', '2'];
expect(toProductQuestionView(rawData)).toEqual([
{
id: '1',
title: '',
content: '',
},
{
id: '2',
title: '',
content: '',
},
]);
});
});
/**
* 单元测试: toProductDocumentView
*/
describe('toProductDocumentView', () => {
test('convert raw data to ProductDocumentView correctly', () => {
const rawData: ProductsProductDocument[] = [
{
id: 1,
product_documents_id: {
id: 1,
file: {
id: 'rand-om__-uuid-1234',
filesize: 1000,
filename_download: 'doc1.pdf',
},
type: {
id: 1,
translations: [
{
id: 1,
name: 'manual',
},
],
},
translations: [
{
id: 1,
title: 'Document Title 1',
},
],
},
},
];
expect(toProductDocumentView(rawData)).toEqual([
{
id: '1',
fileId: 'rand-om__-uuid-1234',
filename: 'doc1.pdf',
title: 'Document Title 1',
type: {
id: '1',
name: 'manual',
},
size: 1000,
url: '/api/assets/rand-om__-uuid-1234',
},
]);
});
test('convert raw data with missing translations', () => {
const rawData: ProductsProductDocument[] = [
{
id: 1,
product_documents_id: {
id: 1,
file: {
id: 'rand-om__-uuid-1234',
filesize: 1000,
filename_download: 'doc1.pdf',
},
translations: [],
},
},
];
expect(toProductDocumentView(rawData)).toEqual([
{
id: '1',
fileId: 'rand-om__-uuid-1234',
filename: 'doc1.pdf',
title: '',
type: {
id: '-1',
name: '',
},
size: 1000,
url: '/api/assets/rand-om__-uuid-1234',
},
]);
});
test('convert empty array to empty ProductDocumentView array', () => {
const rawData: ProductsProductDocument[] = [];
expect(toProductDocumentView(rawData)).toEqual([]);
});
test('convert input with wrong type to default value', () => {
const rawData: string[] = ['1', '2'];
expect(toProductDocumentView(rawData)).toEqual([
{
id: '1',
fileId: '',
filename: '',
title: '',
size: 0,
type: {
id: '-1',
name: '',
},
url: '',
},
{
id: '2',
fileId: '',
filename: '',
title: '',
size: 0,
type: {
id: '-1',
name: '',
},
url: '',
},
]);
});
});
/**
* 单元测试: toProductView
*/
describe('toProductView', () => {
test('convert raw data to ProductView correctly', () => {
const rawData: Product = {
id: 1,
translations: [
{
id: 1,
name: 'Product Name',
summary: 'Product Summary',
description: 'Product Description',
},
],
};
expect(toProductView(rawData)).toEqual({
id: '1',
name: 'Product Name',
summary: 'Product Summary',
description: 'Product Description',
images: [],
documents: [],
faqs: [],
specs: [],
});
});
test('convert raw data with missing translations', () => {
const rawData: Product = {
id: 1,
translations: [],
};
expect(toProductView(rawData)).toEqual({
id: '1',
name: '',
summary: '',
description: '',
images: [],
documents: [],
faqs: [],
specs: [],
});
});
});