详细变更如下: - 更新 .gitignore 文件,添加 pnpm-store 忽略规则 - 新增数据库迁移脚本,为 DetailRecord 添加可空的 conciergeAdvisorId 字段用于关联管家顾问 - 完善 Admin 后台玩法详情编辑器,支持选择关联的管家顾问并校验合法性 - 公共 API 支持返回已启用的管家顾问完整数据,不在详情表中冗余存储管家资料 - 小程序端新增详情页联系管家入口、个人页最近浏览历史功能 - 更新所有相关文档与测试用例,修复下拉选择框的 z-index 样式问题
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import {
|
|
normalizeRecentlyViewed,
|
|
upsertRecentlyViewed,
|
|
type RecentlyViewedItem,
|
|
} from "@/lib/recentlyViewed";
|
|
|
|
const baseItem: RecentlyViewedItem = {
|
|
type: "wanfa-route",
|
|
id: "route-1",
|
|
title: "亲子玩水",
|
|
image: "https://example.test/route-1.jpg",
|
|
visitedAt: 100,
|
|
};
|
|
|
|
describe("recently viewed data", () => {
|
|
it("filters invalid records and sorts valid records by latest visit", () => {
|
|
expect(
|
|
normalizeRecentlyViewed([
|
|
{ ...baseItem, visitedAt: 100 },
|
|
{ ...baseItem, id: "route-2", visitedAt: 300 },
|
|
{ id: "missing-title", type: "wanfa-route", visitedAt: 200 },
|
|
"invalid",
|
|
]),
|
|
).toEqual([
|
|
{ ...baseItem, id: "route-2", visitedAt: 300 },
|
|
baseItem,
|
|
]);
|
|
});
|
|
|
|
it("updates an existing ID, puts it first, and keeps at most five records", () => {
|
|
const existing = Array.from({ length: 5 }, (_, index) => ({
|
|
...baseItem,
|
|
id: `route-${index}`,
|
|
visitedAt: index,
|
|
}));
|
|
|
|
expect(
|
|
upsertRecentlyViewed(existing, {
|
|
...baseItem,
|
|
id: "route-3",
|
|
title: "更新后的路线",
|
|
visitedAt: 10,
|
|
}),
|
|
).toEqual([
|
|
{ ...baseItem, id: "route-3", title: "更新后的路线", visitedAt: 10 },
|
|
{ ...baseItem, id: "route-4", visitedAt: 4 },
|
|
{ ...baseItem, id: "route-2", visitedAt: 2 },
|
|
{ ...baseItem, id: "route-1", visitedAt: 1 },
|
|
{ ...baseItem, id: "route-0", visitedAt: 0 },
|
|
]);
|
|
});
|
|
});
|