Files
awesome-copilot/eng/materialize-plugins.test.mjs
T
github-actions[bot] 7174a12f1c chore: publish from main
2026-07-18 00:50:03 +00:00

90 lines
4.0 KiB
JavaScript

import assert from "node:assert/strict";
import fs from "fs";
import os from "os";
import path from "path";
import { after, test } from "node:test";
import { materializeExtensionPlugin } from "./materialize-plugins.mjs";
import { cleanMaterializedExtensionPlugin } from "./clean-materialized-plugins.mjs";
const tempDirs = [];
after(() => {
for (const dir of tempDirs) {
fs.rmSync(dir, { recursive: true, force: true });
}
});
test("materializeExtensionPlugin writes extension bundles to ./extensions and preserves root logo assets", () => {
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "materialize-extension-plugin-"));
tempDirs.push(tempDir);
const pluginDir = path.join(tempDir, "extension-plugin");
fs.mkdirSync(path.join(pluginDir, ".github", "plugin"), { recursive: true });
fs.mkdirSync(path.join(pluginDir, "assets"), { recursive: true });
fs.writeFileSync(path.join(pluginDir, ".github", "plugin", "plugin.json"), JSON.stringify({
name: "test-extension-plugin",
description: "test plugin",
version: "1.0.0",
logo: "assets/preview.png",
extensions: ".",
}, null, 2));
fs.writeFileSync(path.join(pluginDir, "extension.mjs"), "export default {};\n");
fs.writeFileSync(path.join(pluginDir, "README.md"), "# test\n");
fs.writeFileSync(path.join(pluginDir, "assets", "preview.png"), "fake-image-bytes");
const result = materializeExtensionPlugin(pluginDir);
const bundleRoot = path.join(pluginDir, "extensions", "extension-plugin");
assert.equal(result.skipped, false);
assert.equal(result.manifestUpdated, true);
assert.equal(result.movedEntries, 3);
assert.equal(fs.existsSync(path.join(bundleRoot, "extension.mjs")), true);
assert.equal(fs.existsSync(path.join(bundleRoot, "assets", "preview.png")), true);
assert.equal(fs.existsSync(path.join(bundleRoot, "README.md")), true);
assert.equal(fs.existsSync(path.join(pluginDir, "extensions", ".github")), false);
assert.equal(fs.existsSync(path.join(pluginDir, "extension.mjs")), false);
assert.equal(fs.existsSync(path.join(pluginDir, "README.md")), false);
assert.equal(fs.existsSync(path.join(pluginDir, "assets", "preview.png")), true);
const pluginManifest = JSON.parse(
fs.readFileSync(path.join(pluginDir, ".github", "plugin", "plugin.json"), "utf8")
);
assert.equal(pluginManifest.extensions, "extensions");
assert.equal(pluginManifest.logo, "assets/preview.png");
});
test("cleanMaterializedExtensionPlugin restores moved extension files to root", () => {
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "clean-materialized-extension-plugin-"));
tempDirs.push(tempDir);
const pluginDir = path.join(tempDir, "extension-plugin");
fs.mkdirSync(path.join(pluginDir, ".github", "plugin"), { recursive: true });
fs.mkdirSync(path.join(pluginDir, "assets"), { recursive: true });
fs.writeFileSync(path.join(pluginDir, ".github", "plugin", "plugin.json"), JSON.stringify({
name: "test-extension-plugin",
description: "test plugin",
version: "1.0.0",
logo: "assets/preview.png",
extensions: ".",
}, null, 2));
fs.writeFileSync(path.join(pluginDir, "extension.mjs"), "export default {};\n");
fs.writeFileSync(path.join(pluginDir, "README.md"), "# test\n");
fs.writeFileSync(path.join(pluginDir, "assets", "preview.png"), "fake-image-bytes");
materializeExtensionPlugin(pluginDir);
const result = cleanMaterializedExtensionPlugin(pluginDir);
assert.equal(result.removed, 3);
assert.equal(result.manifestUpdated, true);
assert.equal(fs.existsSync(path.join(pluginDir, "extension.mjs")), true);
assert.equal(fs.existsSync(path.join(pluginDir, "README.md")), true);
assert.equal(fs.existsSync(path.join(pluginDir, "assets", "preview.png")), true);
assert.equal(fs.existsSync(path.join(pluginDir, "extensions")), false);
const pluginManifest = JSON.parse(
fs.readFileSync(path.join(pluginDir, ".github", "plugin", "plugin.json"), "utf8")
);
assert.equal(pluginManifest.extensions, ".");
assert.equal(pluginManifest.logo, "assets/preview.png");
});