Files
ttstd-infinite-canvas/web/test/project-character-cover.test.ts
2026-09-24 06:36:12 +08:00

27 lines
1.3 KiB
TypeScript

import { readFileSync } from "node:fs";
import { resolve } from "node:path";
import { describe, expect, test } from "bun:test";
import type { CharacterRepresentation } from "../src/services/api/projects";
import { projectCharacterCover } from "../src/pages/projects/detail/project-character-cover";
const characterCardSource = readFileSync(resolve(import.meta.dir, "../src/pages/projects/detail/project-character-card.tsx"), "utf8");
const projectAssetsSource = readFileSync(resolve(import.meta.dir, "../src/pages/projects/detail/assets.tsx"), "utf8");
describe("project character cover selection", () => {
test("prefers the front representation over an earlier side representation", () => {
const representations: CharacterRepresentation[] = [
{ id: "side", resourceId: "side-image", mediaType: "image", role: "side" },
{ id: "front", resourceId: "front-image", mediaType: "image", role: "front" },
];
expect(projectCharacterCover(representations)?.resourceId).toBe("front-image");
});
test("uses the same cover selector for cards and the preview modal", () => {
expect(characterCardSource).toContain("projectCharacterCover(character?.representations)");
expect(projectAssetsSource).toContain("projectCharacterCover(asset?.character?.representations)");
});
});