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 }, ]); }); });