CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Connect Security-Test-Gate (QA-01 AC4, Merge-Gate) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
Fable-Review auf Code-Dopplung/interne Links (siehe Analyse). P0-Funde: - Dangling Prosa-Verweise auf die per PR #367 geloeschten *-kanban/-Ordner in SKALIERUNGSKONZEPT.md, STORAGE-KONZEPT.md, MIGRATIONSKONZEPT.md, SICHERHEITSKONZEPT.md (7x "siehe X-kanban/README.md"), PRODUKTARCHITEKTUR.md um Hinweis ergaenzt, dass Boards jetzt in main-Historie/Gitea-PRs liegen. - dms/internal/searchsync/searchsync_test.go:19: falscher Pfad im Kommentar ("internal/bulkedit"/"internal/jobqueue" statt "dms/internal/..."). - web/shl/components/ModuleNavShell.tsx: resolveHrefClientOnly war inhaltlich identisch zu resolveModuleHref in web/portal/app/ModuleGrid.tsx (zwei unabhaengig gepflegte Kopien derselben Hostname-Ersetzung). Als resolveModuleHref aus shl exportiert, ModuleGrid.tsx nutzt jetzt die gemeinsame Funktion, Test-Import entsprechend umgestellt. - web/portal/lib/modules.test.ts: KNOWN_REAL_PERMISSIONS-Whitelist hatte kennzahlen.read (migrations/0019_kennzahlen_policy_rule.up.sql, real existierend seit ANA-02/PR #362) nie nachgetragen, Test lief seitdem unbemerkt im Fehler. Ergaenzt. go test/vitest: web/portal (15/15) und web/shl (61/61) gruen auf Testhost 131. Verbleibender P0-Punkt (14 Web-Apps ohne ModuleNavShell) braucht Produktentscheidung -- mehrere Registry-Keys (ai/mail/workflow/connect) sind bereits durch eine jeweils ANDERE App belegt als die ohne Navigation (z.B. mail-search hat "mail", mail-postfach nicht), daher keine mechanische Zuordnung moeglich ohne zu raten. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
40 lines
1.7 KiB
TypeScript
40 lines
1.7 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { resolveModuleHref } from "@nexarch/shl";
|
|
import { fetchVisibleModules } from "./ModuleGrid";
|
|
|
|
describe("fetchVisibleModules", () => {
|
|
it("ruft die Portal-eigene Route mit tenant/role auf und gibt die Modulliste zurueck", async () => {
|
|
const fetchImpl = vi.fn(
|
|
async () => new Response(JSON.stringify({ modules: [{ key: "dms", label: "Dokumente", description: "x", href: "http://a", permission: "dms.document.read" }] }), { status: 200 })
|
|
) as unknown as typeof fetch;
|
|
|
|
const modules = await fetchVisibleModules("acme", "user", fetchImpl);
|
|
|
|
expect(modules).toHaveLength(1);
|
|
expect(modules[0].key).toBe("dms");
|
|
const calledUrl = (fetchImpl as ReturnType<typeof vi.fn>).mock.calls[0][0] as string;
|
|
expect(calledUrl).toContain("tenant=acme");
|
|
expect(calledUrl).toContain("role=user");
|
|
});
|
|
|
|
it("gibt eine leere Liste zurueck wenn die Route fehlschlaegt", async () => {
|
|
const fetchImpl = vi.fn(async () => new Response("", { status: 500 })) as unknown as typeof fetch;
|
|
const modules = await fetchVisibleModules("acme", "user", fetchImpl);
|
|
expect(modules).toEqual([]);
|
|
});
|
|
});
|
|
|
|
describe("resolveModuleHref", () => {
|
|
it("ersetzt localhost durch den echten Hostnamen", () => {
|
|
expect(resolveModuleHref("http://localhost:3107/", "192.168.1.204")).toBe("http://192.168.1.204:3107/");
|
|
});
|
|
|
|
it("laesst Nicht-localhost-Hrefs unveraendert", () => {
|
|
expect(resolveModuleHref("http://dms.example.com:3107/", "192.168.1.204")).toBe("http://dms.example.com:3107/");
|
|
});
|
|
|
|
it("laesst localhost unveraendert wenn das Portal selbst auf localhost laeuft", () => {
|
|
expect(resolveModuleHref("http://localhost:3107/", "localhost")).toBe("http://localhost:3107/");
|
|
});
|
|
});
|