18 lines
1.2 KiB
TypeScript
18 lines
1.2 KiB
TypeScript
import { readFile } from "node:fs/promises";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
describe("Go administration HTTP v1 contract", () => {
|
|
it("pins methods, authorization, and security projections", async () => {
|
|
const fixture = JSON.parse(await readFile(new URL("../contracts/admin/http-v1.json", import.meta.url), "utf8"));
|
|
const source = await readFile(new URL("../backend/internal/httpapi/admin.go", import.meta.url), "utf8");
|
|
expect(fixture.routes).toHaveLength(4);
|
|
expect(fixture.routes.filter((route: { path: string }) => route.path !== "/api/admin/accounts/groups").every((route: { requirement: string }) => route.requirement === "admin")).toBe(true);
|
|
expect(fixture.routes.find((route: { path: string }) => route.path === "/api/admin/accounts/groups")?.requirement).toBe("public-compatibility");
|
|
expect(source).toContain("PlatformAdmin");
|
|
expect(source).toContain("http.StatusGone");
|
|
const projection = source.slice(source.indexOf("func adminAccountProjection("));
|
|
for (const field of fixture.secretFields) expect(projection).not.toContain(`\"${field}\"`);
|
|
for (const field of fixture.accountProjection) expect(source).toContain(`\"${field}\"`);
|
|
});
|
|
});
|