Files
EpicNext-Cms/src/lib/import-backend-contract.test.ts
T
SimoandCursor 9c4949186c
CI / check (push) Failing after 8s
CI / release (push) Skipped
CI / deploy (push) Skipped
feat(admin): server-safe StatusCard and Import hub polish
Split OnlineUsersWidget from StatusCard, decouple ad delete button, sync badge import to ExternalTexts+WebsiteBadges, add Import section hub with cancelable SSE jobs and upload SQL option.

Co-authored-by: Cursor <[email protected]>
2026-08-01 15:48:21 +02:00

56 lines
1.5 KiB
TypeScript

import { existsSync, readFileSync } from "node:fs";
import { describe, expect, it } from "vitest";
const ROUTES = [
"audit",
"badges",
"badges/edit",
"clone",
"clone/batch",
"clone/icon",
"clone/sync-all",
"clothing",
"clothing/batch",
"clothing/sets",
"clothing/sets/batch",
"effects",
"effects/batch",
"furni",
"furni/batch",
"furni/batch-regen",
"furni/nitro-editor",
"furni/repair-icons",
"furni/resync",
"furni/upload",
"pets",
"pets/batch",
"pets/icon",
];
describe("admin import backend contract", () => {
it.each(ROUTES)("provides and guards /api/admin/import/%s", (route) => {
const path = `src/app/api/admin/import/${route}/route.ts`;
expect(existsSync(path), path).toBe(true);
const source = readFileSync(path, "utf8");
expect(source, path).toContain("PERMS.ASSETS_IMPORT");
});
it("does not leave import actions as successful no-op stubs", () => {
const source = readFileSync("src/actions/import-furni.ts", "utf8");
expect(source).not.toContain("deleted: 0, remaining: 0");
});
it("keeps badge import ExternalTexts + WebsiteBadges in sync", () => {
const service = readFileSync("src/lib/services/import-badge.ts", "utf8");
expect(service).toContain("ExternalTexts.json");
expect(service).toContain("WebsiteBadges");
expect(service).toContain("importBadgeSynced");
expect(readFileSync("src/actions/import-badges.ts", "utf8")).toContain(
"importBadgeSynced",
);
expect(
readFileSync("src/app/api/admin/import/badges/route.ts", "utf8"),
).toContain("importBadgeSynced");
});
});