Files
Find-Word/tests/neural-release.test.ts
T

45 lines
1.8 KiB
TypeScript

// @vitest-environment node
import { readFileSync } from "node:fs";
import { expect, it } from "vitest";
// 배포 표기와 재현 명령을 함께 고정한다. 과거 인수 기록은 검사·수정하지 않는다.
it("0.1.1 버전을 package·lock·UI·index·문서에 일치시킨다", () => {
const pkg = JSON.parse(readFileSync("package.json", "utf8"));
const lock = JSON.parse(readFileSync("package-lock.json", "utf8"));
expect.soft(pkg.version).toBe("0.1.1");
expect.soft(lock.version).toBe("0.1.1");
expect.soft(lock.packages[""].version).toBe("0.1.1");
for (const path of [
"src/App.tsx",
"index.html",
"README.md",
"LICENSE",
"docs/AUDIO_PROVENANCE.md",
]) {
expect.soft(readFileSync(path, "utf8"), path).toContain("0.1.1");
}
});
it("고정 venv 생성 명령과 provider·도구·출력물 권리의 경계를 문서화한다", () => {
const pkg = JSON.parse(readFileSync("package.json", "utf8"));
expect
.soft(pkg.scripts["audio:generate"])
.toBe(".venv-audio/bin/python scripts/generate_audio.py");
for (const path of ["README.md", "docs/AUDIO_PROVENANCE.md"]) {
const doc = readFileSync(path, "utf8");
expect.soft(doc, path).toContain("requirements-audio.txt");
expect.soft(doc, path).toContain("ko-KR-HyunsuMultilingualNeural");
expect.soft(doc, path).toContain("7.3.1");
expect.soft(doc, path).not.toMatch(/espeak|포먼트/i);
}
const provenance = readFileSync("docs/AUDIO_PROVENANCE.md", "utf8");
expect
.soft(provenance)
.toContain("https://www.microsoft.com/en-us/servicesagreement");
expect.soft(provenance).toContain("LGPL");
expect.soft(provenance).toContain("독점 권리를 주장하지 않는다");
expect
.soft(readFileSync("LICENSE", "utf8"))
.toContain("does not claim exclusive rights to generated speech");
});