import { strict as assert } from "node:assert";
import { test } from "node:test";
import { mkdtempSync, writeFileSync, rmSync } from "node:fs";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { tagUsage, partitionUsage } from "./usage.mjs";
function project(html) {
const dir = mkdtempSync(join(tmpdir(), "mu-usage-"));
writeFileSync(join(dir, "index.html"), html);
return dir;
}
const records = [
{ id: "bgm_001", path: ".media/audio/bgm/bgm_001.wav", description: "used track" },
{ id: "bgm_002", path: ".media/audio/bgm/bgm_002.wav", description: "orphan track" },
];
test("an asset referenced by a composition is marked in-use", () => {
const dir = project(``);
try {
const tagged = tagUsage(records, dir);
assert.equal(tagged.find((r) => r.id === "bgm_001").inUse, true);
assert.equal(tagged.find((r) => r.id === "bgm_002").inUse, false);
} finally {
rmSync(dir, { recursive: true, force: true });
}
});
test("partitionUsage splits used vs unused for the filter", () => {
const dir = project(`
`);
try {
const { used, unused } = partitionUsage(records, dir);
assert.deepEqual(
used.map((r) => r.id),
["bgm_001"],
);
assert.deepEqual(
unused.map((r) => r.id),
["bgm_002"],
);
} finally {
rmSync(dir, { recursive: true, force: true });
}
});
test("no compositions -> everything reads as unused (safe default)", () => {
const dir = mkdtempSync(join(tmpdir(), "mu-usage-"));
try {
assert.equal(partitionUsage(records, dir).used.length, 0);
} finally {
rmSync(dir, { recursive: true, force: true });
}
});