Files
EpicNext-Cms/src/features/housekeeping/domains/economy/routes.test.ts
T
Simo 9c4b973faf
CI / check (pull_request) Successful in 40s
CI / release (pull_request) Skipped
CI / deploy (pull_request) Skipped
feat(housekeeping): deliver economy vertical
2026-08-30 13:47:06 +02:00

120 lines
3.2 KiB
TypeScript

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