import { describe, expect, it } from "vitest"; import { HOUSEKEEPING_MANIFESTS } from "../../manifests"; import { economyMigrationEntries } from "../../migration/economy"; import { HOUSEKEEPING_ROUTE_HANDLERS } from "../../route-handlers"; import { economyManifest } from "./manifest"; import { ECONOMY_ROUTE_GROUPS, ECONOMY_ROUTE_IDS, ECONOMY_ROUTES, type EconomyRouteId, economyRouteGroup, } from "./routes"; const expected = [ ["economy.catalog.overview", "/ase/economy/catalog", "catalog"], ["economy.catalog.detail", "/ase/economy/catalog/:id", "catalog"], [ "economy.catalog.builder-club-detail", "/ase/economy/catalog/builder-club/:id", "catalog", ], [ "economy.catalog.maintenance", "/ase/economy/catalog/maintenance", "catalog", ], ["economy.items.overview", "/ase/economy/items", "items"], ["economy.items.detail", "/ase/economy/items/:id", "items"], ["economy.commerce.shop", "/ase/economy/commerce/shop", "commerce"], [ "economy.commerce.shop-create", "/ase/economy/commerce/shop/new", "commerce", ], [ "economy.commerce.shop-detail", "/ase/economy/commerce/shop/:id", "commerce", ], [ "economy.commerce.marketplace", "/ase/economy/commerce/marketplace", "commerce", ], ["economy.commerce.vouchers", "/ase/economy/commerce/vouchers", "commerce"], [ "economy.commerce.subscriptions", "/ase/economy/commerce/subscriptions", "commerce", ], [ "economy.history.transactions", "/ase/economy/history/transactions", "history", ], ["economy.value.rare-values", "/ase/economy/value/rare-values", "value"], ["economy.rewards.badges", "/ase/economy/rewards/badges", "rewards"], [ "economy.rewards.achievements", "/ase/economy/rewards/achievements", "rewards", ], ["economy.rewards.sounds", "/ase/economy/rewards/sounds", "rewards"], ["economy.rewards.calendar", "/ase/economy/rewards/calendar", "rewards"], [ "economy.rewards.calendar-detail", "/ase/economy/rewards/calendar/:id", "rewards", ], ] as const; describe("Economy routes", () => { it("declares the six exact route groups", () => { expect(ECONOMY_ROUTE_GROUPS).toEqual([ "catalog", "items", "commerce", "history", "value", "rewards", ]); }); it("maps all 20 matrix rows into 19 canonical workflows", () => { expect( ECONOMY_ROUTES.map((route) => [ route.id, route.href, economyRouteGroup(route.id as EconomyRouteId), ]), ).toEqual(expected); expect(ECONOMY_ROUTE_IDS).toEqual(expected.map(([id]) => id)); expect( [...new Set(ECONOMY_ROUTES.map((route) => route.href))].sort(), ).toEqual( [ ...new Set( economyMigrationEntries .filter((entry) => entry.targetPath !== null) .map((entry) => entry.targetPath), ), ].sort(), ); }); it("keeps manifest routes and real handlers in exact equality", () => { expect(economyManifest.routes).toBe(ECONOMY_ROUTES); expect(economyManifest.routes.map((route) => route.id)).toEqual( HOUSEKEEPING_ROUTE_HANDLERS.filter((handler) => handler.routeId.startsWith("economy."), ).map((handler) => handler.routeId), ); expect( HOUSEKEEPING_MANIFESTS.flatMap((manifest) => manifest.routes.map((route) => route.id), ), ).toEqual(HOUSEKEEPING_ROUTE_HANDLERS.map((handler) => handler.routeId)); }); });