feat: 产品视图模型添加状态
- 产品状态:从Directus Schema获取Product的Status字段 - 视图字段:添加Status字段用于标示产品状态 - 测试方法:为Status字段添加单元测试
This commit is contained in:
@ -456,9 +456,9 @@ describe('toProductDocumentView', () => {
|
|||||||
* 单元测试: toProductView
|
* 单元测试: toProductView
|
||||||
*/
|
*/
|
||||||
describe('toProductView', () => {
|
describe('toProductView', () => {
|
||||||
test('convert raw data to ProductView correctly', () => {
|
const baseData: Product = {
|
||||||
const rawData: Product = {
|
|
||||||
id: 1,
|
id: 1,
|
||||||
|
status: 'in-production',
|
||||||
translations: [
|
translations: [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
@ -468,9 +468,14 @@ describe('toProductView', () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
test('convert raw data to ProductView correctly', () => {
|
||||||
|
const rawData: Product = {
|
||||||
|
...baseData,
|
||||||
|
};
|
||||||
|
|
||||||
expect(toProductView(rawData)).toEqual({
|
expect(toProductView(rawData)).toEqual({
|
||||||
id: '1',
|
id: '1',
|
||||||
|
status: 'in-production',
|
||||||
name: 'Product Name',
|
name: 'Product Name',
|
||||||
summary: 'Product Summary',
|
summary: 'Product Summary',
|
||||||
description: 'Product Description',
|
description: 'Product Description',
|
||||||
@ -483,12 +488,13 @@ describe('toProductView', () => {
|
|||||||
|
|
||||||
test('convert raw data with missing translations', () => {
|
test('convert raw data with missing translations', () => {
|
||||||
const rawData: Product = {
|
const rawData: Product = {
|
||||||
id: 1,
|
...baseData,
|
||||||
translations: [],
|
translations: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(toProductView(rawData)).toEqual({
|
expect(toProductView(rawData)).toEqual({
|
||||||
id: '1',
|
id: '1',
|
||||||
|
status: 'in-production',
|
||||||
name: '',
|
name: '',
|
||||||
summary: '',
|
summary: '',
|
||||||
description: '',
|
description: '',
|
||||||
@ -498,4 +504,23 @@ describe('toProductView', () => {
|
|||||||
specs: [],
|
specs: [],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('conert raw data with missing status', () => {
|
||||||
|
const rawData: Product = {
|
||||||
|
...baseData,
|
||||||
|
status: undefined,
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(toProductView(rawData)).toEqual({
|
||||||
|
id: '1',
|
||||||
|
status: 'discontinued',
|
||||||
|
name: 'Product Name',
|
||||||
|
summary: 'Product Summary',
|
||||||
|
description: 'Product Description',
|
||||||
|
images: [],
|
||||||
|
documents: [],
|
||||||
|
faqs: [],
|
||||||
|
specs: [],
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -219,6 +219,8 @@ export function toProductDocumentView(
|
|||||||
export function toProductView(raw: Product): ProductView {
|
export function toProductView(raw: Product): ProductView {
|
||||||
const trans = raw.translations?.[0];
|
const trans = raw.translations?.[0];
|
||||||
|
|
||||||
|
const status = raw.status ?? 'discontinued';
|
||||||
|
|
||||||
const images = toProductImageView(raw.images ?? []);
|
const images = toProductImageView(raw.images ?? []);
|
||||||
|
|
||||||
const specs = toProductSpecGroupView(raw.specs ?? []);
|
const specs = toProductSpecGroupView(raw.specs ?? []);
|
||||||
@ -229,6 +231,7 @@ export function toProductView(raw: Product): ProductView {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
id: raw.id.toString(),
|
id: raw.id.toString(),
|
||||||
|
status: status,
|
||||||
name: trans?.name ?? '',
|
name: trans?.name ?? '',
|
||||||
summary: trans?.summary ?? '',
|
summary: trans?.summary ?? '',
|
||||||
images: images,
|
images: images,
|
||||||
|
|||||||
@ -1,4 +1,7 @@
|
|||||||
import type { DocumentTypeView } from './document-list-view';
|
import type { DocumentTypeView } from './document-list-view';
|
||||||
|
import type { Product } from '../directus/my-schema.ts';
|
||||||
|
|
||||||
|
type ProductStatus = Product['status'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 产品图片视图模型
|
* 产品图片视图模型
|
||||||
@ -90,6 +93,9 @@ export interface ProductView {
|
|||||||
/** 唯一标识符 **/
|
/** 唯一标识符 **/
|
||||||
id: string;
|
id: string;
|
||||||
|
|
||||||
|
/** 产品状态 **/
|
||||||
|
status: ProductStatus;
|
||||||
|
|
||||||
/** 产品名称 **/
|
/** 产品名称 **/
|
||||||
name: string;
|
name: string;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user