Files
WonderQ-Project/WonderQ-MiniAPP/tests/detail-data.test.ts
duanshuwen feec6ab80f feat(wanfa): 新增路线详情参考价格配置及展示功能
- 新增数据库迁移脚本,为详情表添加四个价格相关字段
- 完善后端schema校验、序列化逻辑,增加价格相关的数据清理与验证规则
- 新增价格配置校验逻辑,设置起售价时必须选择对应的计价单位
- 在Admin UI详情编辑器中新增价格配置模块,支持配置起售价、计价单位、适用人数范围和价格说明
- 更新小程序端详情页面,支持展示配置的参考价格信息
- 补充相关测试用例,更新API文档与类型定义
2026-08-27 22:02:51 +08:00

98 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { describe, expect, it } from "vitest";
import {
findWanfaRouteDetailFallback,
normalizeDetailPresentation,
} from "@/pages/detail/components/detailPresentation";
describe("wanfa route detail presentation", () => {
it("normalizes a complete public response", () => {
expect(
normalizeDetailPresentation({
key: "family-water",
eyebrow: " 玩法推荐 ",
duration: " 5天4晚 ",
title: " 亲子玩水 ",
subtitle: " 贵州路线 ",
intro: " 沿着山地深入探索。 ",
highlights: [" 核心景观串联 ", "", " 小团出行 "],
included: [" 行程内用车 "],
excluded: [" 往返大交通 "],
notes: [" 请准备雨具。 "],
gallery: [" https://example.test/cover.jpg "],
priceStartingValue: 1.68,
priceUnit: "person",
pricePeopleRange: " 2-4人 ",
priceDescription: " 价格以最终确认方案为准。 ",
conciergeAdvisor: null,
}),
).toEqual({
key: "family-water",
eyebrow: "玩法推荐",
duration: "5天4晚",
title: "亲子玩水",
subtitle: "贵州路线",
intro: "沿着山地深入探索。",
highlights: ["核心景观串联", "小团出行"],
included: ["行程内用车"],
excluded: ["往返大交通"],
notes: ["请准备雨具。"],
gallery: ["https://example.test/cover.jpg"],
priceStartingValue: 1.68,
priceUnit: "person",
pricePeopleRange: "2-4人",
priceDescription: "价格以最终确认方案为准。",
conciergeAdvisor: null,
});
});
it("normalizes a valid concierge advisor without inventing fallback data", () => {
expect(
normalizeDetailPresentation({
key: "family-water",
eyebrow: "玩法推荐",
duration: "5天4晚",
title: "亲子玩水",
subtitle: "贵州路线",
intro: "介绍",
highlights: [],
included: [],
excluded: [],
notes: [],
gallery: ["https://example.test/cover.jpg"],
conciergeAdvisor: {
avatar: " https://example.test/amanda.jpg ",
name: " Amanda ",
role: " SENIOR TRAVEL ADVISOR ",
details: [{ icon: " calendar ", label: " 服务经验8年 " }],
qrImage: " https://example.test/amanda-qr.png ",
},
}),
).toMatchObject({
conciergeAdvisor: {
avatar: "https://example.test/amanda.jpg",
name: "Amanda",
role: "SENIOR TRAVEL ADVISOR",
details: [{ icon: "calendar", label: "服务经验8年" }],
qrImage: "https://example.test/amanda-qr.png",
},
});
});
it("uses the route fallback for invalid or incomplete API data", () => {
const fallback = findWanfaRouteDetailFallback("family-water");
expect(fallback).not.toBeNull();
expect(
normalizeDetailPresentation(
{ key: "family-water", title: "", gallery: [] },
fallback,
),
).toEqual(fallback);
});
it("returns no fallback for an unknown route", () => {
expect(findWanfaRouteDetailFallback("missing-route")).toBeNull();
});
});