120 lines
3.2 KiB
TypeScript
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));
|
|
});
|
|
});
|