test/shared/admin-api-example.test.ts
Rama main · réplica de lectura del repositorio original.
/**
* The admin API docs page publishes an example listing. These check it against
* a hand-written shape, so a change to the real conversion cannot quietly take
* the documented example with it.
*/
import { expect } from "@std/expect";
import { describe, it as test } from "@std/testing/bdd";
import * as v from "valibot";
import { toAdminListing } from "#routes/admin/api.ts";
import { ADMIN_API_EXAMPLE_ADMIN_LISTING } from "#shared/admin-api-example.ts";
import { API_EXAMPLE_LISTING } from "#shared/api-example.ts";
import { AdminListingSchema } from "#test-utils/api-schemas.ts";
describe("admin API example", () => {
test("the documented example has every admin listing field", () => {
expect(() =>
v.parse(AdminListingSchema, ADMIN_API_EXAMPLE_ADMIN_LISTING),
).not.toThrow();
});
test("an internal field leaking into a response is refused", () => {
expect(() =>
v.parse(AdminListingSchema, {
...ADMIN_API_EXAMPLE_ADMIN_LISTING,
slug_index: "leaked",
}),
).toThrow();
});
test("a missing field is refused", () => {
const { name: _, ...withoutName } = ADMIN_API_EXAMPLE_ADMIN_LISTING;
expect(() => v.parse(AdminListingSchema, withoutName)).toThrow();
});
test("a field of the wrong type is refused", () => {
expect(() =>
v.parse(AdminListingSchema, {
...ADMIN_API_EXAMPLE_ADMIN_LISTING,
id: "1",
}),
).toThrow();
});
test("the conversion drops the internal slug index", () => {
expect(toAdminListing(API_EXAMPLE_LISTING)).not.toHaveProperty(
"slug_index",
);
});
test("the conversion keeps every other listing field as it was", () => {
const { slug_index: _, ...expected } = API_EXAMPLE_LISTING;
expect(toAdminListing(API_EXAMPLE_LISTING)).toEqual(expected);
});
test("the documented example says which groups the listing is in", () => {
expect(ADMIN_API_EXAMPLE_ADMIN_LISTING.group_ids).toEqual([]);
});
});