Files
jhonny-editor/code/tests/release-metadata.test.ts
T
João Henrique b541f502ba feat: initial commit - Jhonny Editor
- Adicionado estrutura completa do projeto
- Configurado MCP server para Premiere Pro
- Adicionado documentação e skills
- Configurado Gitignore para o projeto
2026-09-08 09:59:31 -04:00

152 lines
6.6 KiB
TypeScript
Executable File

import { readFileSync } from "node:fs";
import { join } from "node:path";
import { describe, expect, it } from "vitest";
const root = process.cwd();
const read = (path: string) => readFileSync(join(root, path), "utf8");
const readJson = (path: string) => JSON.parse(read(path));
describe("canonical release metadata", () => {
const release = readJson("release-metadata.json");
it("aligns every distributable manifest with the canonical version", () => {
expect(readJson("package.json").version).toBe(release.version);
expect(readJson("package.json").description).toContain(
`${release.coreTools} core AI video editing tools`,
);
const packageLock = readJson("package-lock.json");
expect(packageLock.version).toBe(release.version);
expect(packageLock.packages[""].version).toBe(release.version);
expect(readJson("claude-desktop/manifest.json").version).toBe(release.version);
expect(readJson("uxp-plugin/manifest.json").version).toBe(release.version);
expect(readJson("plugins/premiere-pro/.codex-plugin/plugin.json").version).toBe(
release.version,
);
expect(
readJson("claude-plugins/premiere-pro/.claude-plugin/plugin.json").version,
).toBe(release.version);
expect(readJson(".claude-plugin/marketplace.json").plugins[0].version).toBe(
release.version,
);
for (const path of [
"plugins/premiere-pro/.mcp.json",
"claude-plugins/premiere-pro/.mcp.json",
]) {
expect(read(path)).toContain(`premiere-pro-mcp@${release.version}`);
}
const cepManifest = read("cep-plugin/CSXS/manifest.xml");
expect(cepManifest).toContain(`ExtensionBundleVersion="${release.version}"`);
expect(cepManifest).toContain(`Version="${release.version}"`);
expect(read("cep-plugin/updater.cjs")).toContain(
`CURRENT_VERSION = "${release.version}"`,
);
expect(read("cep-plugin/index.html")).toContain(`Version ${release.version}`);
});
it("aligns public release and capability claims", () => {
const readme = read("README.md");
const llms = read("landing/public/llms.txt");
const llmsFull = read("landing/public/llms-full.txt");
const llmAlias = read("landing/public/llm.txt");
const landingProduct = read("landing/lib/product.ts");
const landingArticles = read("landing/lib/articles.ts");
const marketingAssets = read("docs/marketing-assets.md");
const supportedActions = read("docs/supported-actions.md");
expect(readme).toContain(`${release.coreTools} core tools`);
expect(readme).toContain(
`${release.defaultProfileTools} under the default profile`,
);
expect(readme).toContain(
`${release.defaultProfileWithUxpTools} with a connected UXP bridge`,
);
expect(readme).toContain(`${release.uxpAdditionalTools} capability-gated tools`);
expect(llms).toContain(`Current project release: ${release.version}`);
expect(llms).toContain(
`${release.coreTools} core structured MCP tools`,
);
expect(llmsFull).toContain(`Current release: ${release.version}`);
expect(llmsFull).toContain(
`${release.uxpAdditionalTools} capability-gated tools`,
);
expect(llmsFull).toContain(
`${release.defaultProfileWithUxpTools} connected tools`,
);
expect(llmAlias).toContain("https://premiere-pro-mcp.com/llms.txt");
expect(marketingAssets).toContain(
`${release.uxpAdditionalTools} additional capability-gated tools`,
);
expect(landingProduct).toContain(`version: "${release.version}"`);
expect(landingProduct).toContain(`coreToolCount: ${release.coreTools}`);
expect(landingProduct).toContain(`defaultProfileToolCount: ${release.defaultProfileTools}`);
expect(landingProduct).toContain(`connectedUxpToolCount: ${release.defaultProfileWithUxpTools}`);
expect(landingArticles).toContain(
`The server currently registers ${release.coreTools} core structured tools`,
);
expect(landingArticles).toContain(
`${release.uxpAdditionalTools} capability-gated tools, bringing the connected surface to ${release.defaultProfileWithUxpTools}`,
);
expect(landingProduct).toContain(
`/releases/download/v${release.version}/premiere-pro-mcp-${release.version}.mcpb`,
);
expect(landingProduct).toContain(
`/releases/download/v${release.version}/MCPBridgeCEP.zxp`,
);
expect(landingProduct).toContain(`/releases/tag/v${release.version}`);
expect(readme).toContain(`Latest release: ${release.version}`);
expect(readme).toContain(`registers ${release.coreTools} tools, filtered by authority profile`);
expect(read("landing/app/changelog/page.tsx")).toContain(
`version: "${release.version}"`,
);
expect(supportedActions).toContain(
`| Registered core actions | ${release.coreTools} |`,
);
expect(supportedActions).toContain(
`| Default-profile core actions | ${release.defaultProfileTools} |`,
);
expect(supportedActions).toContain(
`| Authenticated UXP additions | ${release.uxpAdditionalTools} |`,
);
expect(supportedActions).toContain(
`| Default profile with UXP | ${release.defaultProfileWithUxpTools} |`,
);
});
it("keeps computed tool-count relationships explicit", () => {
expect(release.defaultProfileTools + release.uxpAdditionalTools).toBe(
release.defaultProfileWithUxpTools,
);
expect(release.coreTools - release.defaultProfileTools).toBe(2);
});
it("keeps the CLI help count aligned with the default profile", () => {
expect(read("src/index.ts")).toContain(
`(${release.defaultProfileTools} default-profile tools)`,
);
});
it("keeps the generated public product manifest aligned with current release metadata", () => {
const manifest = readJson("public-product-manifest.json");
expect(manifest.schemaVersion).toBe("premiere-pro-mcp.public-product.v1");
expect(manifest.product.version).toBe(release.version);
expect(manifest.product.mcpName).toBe(readJson("package.json").mcpName);
expect(manifest.capabilitySurface).toMatchObject({
registeredCoreTools: release.coreTools,
defaultProfileTools: release.defaultProfileTools,
authenticatedUxpAdditions: release.uxpAdditionalTools,
defaultProfileWithUxp: release.defaultProfileWithUxpTools,
guidedWorkflows: release.guidedWorkflows,
});
expect(manifest.proofKit.status).toBe("runbook_and_redacted_template_only");
expect(manifest.proofKit.video).toBeNull();
expect(manifest.workflows.map((workflow: { id: string }) => workflow.id)).toEqual([
"safe-project-intake",
"transcript-backed-rough-cut",
"caption-review",
"verified-delivery",
]);
});
});