scripts/mascot-bodies/catalog.test.mjs
Rama main · réplica de lectura del repositorio original.
import { describe, expect, it } from "vitest";
import {
DEFAULT_MASCOT_BODY,
MASCOT_BODIES,
MASCOT_BODY_IDS,
botMascotBody,
mascotBodySchema,
} from "../../shared/mascot-bodies.ts";
describe("the generated catalog", () => {
it("carries all ten bodies", () => {
expect(MASCOT_BODY_IDS).toHaveLength(10);
for (const id of MASCOT_BODY_IDS) expect(MASCOT_BODIES[id].id).toBe(id);
});
it("defaults to the cursor", () => {
expect(DEFAULT_MASCOT_BODY).toBe("cursor");
});
it("gives every body the markup the renderer expects", () => {
for (const id of MASCOT_BODY_IDS) {
const entry = MASCOT_BODIES[id];
expect(entry.body, id).toContain('fill="{{GRADIENT}}"');
expect(entry.clip, id).not.toContain("fill=");
expect(entry.fit, id).toMatch(/^translate\(/);
expect(entry.name.length, id).toBeGreaterThan(0);
}
});
it("places every face inside its body", () => {
for (const id of MASCOT_BODY_IDS) {
const { anchor } = MASCOT_BODIES[id];
expect(anchor.scale, id).toBeGreaterThan(0);
expect(anchor.scale, id).toBeLessThanOrEqual(1);
expect(anchor.x, id).toBeGreaterThan(0);
expect(anchor.y, id).toBeGreaterThan(0);
}
});
it("clamps every face to one shared size", () => {
const scales = new Set(MASCOT_BODY_IDS.map(id => MASCOT_BODIES[id].anchor.scale));
expect([...scales]).toHaveLength(1);
});
});
describe("botMascotBody", () => {
it("accepts a known id", () => {
expect(botMascotBody("blob")).toBe("blob");
});
it("falls back to the cursor for anything else", () => {
expect(botMascotBody("hexagram")).toBe("cursor");
expect(botMascotBody(undefined)).toBe("cursor");
expect(botMascotBody(null)).toBe("cursor");
expect(botMascotBody(42)).toBe("cursor");
});
it("exposes a schema that rejects an unknown id", () => {
expect(mascotBodySchema.safeParse("star").success).toBe(true);
expect(mascotBodySchema.safeParse("nope").success).toBe(false);
});
});