CODE · 1.2 KB
test/deck-model.test.js
Workspace snapshot · 09/04 13:45
import test from "node:test";
import assert from "node:assert/strict";
import { initialSlides, progressFor, reviseSlide } from "../src/deck-model.js";
import { buildDeckPrompt, parseDeckResult } from "../src/runtime-prompt.js";
test("deck starts with a coherent six-page story", () => {
assert.equal(initialSlides.length, 6);
assert.deepEqual(initialSlides.map((slide) => slide.id), [1, 2, 3, 4, 5, 6]);
assert.ok(initialSlides.every((slide) => slide.claim && slide.source));
});
test("revision remains page-scoped", () => {
const revised = reviseSlide(initialSlides[1], "経営者の損失時間を強調");
assert.equal(revised.id, 2);
assert.match(revised.body, /経営者の損失時間/);
assert.equal(initialSlides[1].revision, undefined);
});
test("progress is clamped", () => {
assert.equal(progressFor(0), 25);
assert.equal(progressFor(3), 75);
assert.equal(progressFor(9), 100);
});
test("runtime prompt treats source as data and validates six slides", () => {
const prompt = buildDeckPrompt({ purpose: "営業提案", audience: "経営者", sourceText: "売上管理の確認を短縮するサービス" });
assert.match(prompt, /<source>/);
assert.equal(parseDeckResult(JSON.stringify({ slides: initialSlides })).length, 6);
});