Files
hyperframes/packages/studio-server/src/routes/globalAssets.test.ts
T

63 lines
1.9 KiB
TypeScript

import { describe, it, expect, beforeEach, afterEach } from "vitest";
import { mkdtempSync, rmSync, mkdirSync, writeFileSync } from "node:fs";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { readGlobalAssets, toPublicAsset } from "./globalAssets";
describe("readGlobalAssets", () => {
let home: string;
beforeEach(() => {
home = mkdtempSync(join(tmpdir(), "mu-global-"));
});
afterEach(() => rmSync(home, { recursive: true, force: true }));
function writeManifest(lines: string[]) {
mkdirSync(join(home, ".media"), { recursive: true });
writeFileSync(join(home, ".media", "manifest.jsonl"), lines.join("\n"));
}
it("returns [] when there is no global manifest", () => {
expect(readGlobalAssets(home)).toEqual([]);
});
it("returns only reusable records", () => {
writeManifest([
JSON.stringify({ id: "bgm_001", type: "bgm", reusable: true, sha: "a" }),
JSON.stringify({ id: "tmp_001", type: "sfx", reusable: false, sha: "b" }),
]);
const assets = readGlobalAssets(home);
expect(assets.map((a) => a.id)).toEqual(["bgm_001"]);
});
it("skips malformed lines instead of throwing (torn write)", () => {
writeManifest([
JSON.stringify({ id: "bgm_001", reusable: true }),
"{ not valid json",
"",
JSON.stringify({ id: "img_001", reusable: true }),
]);
expect(readGlobalAssets(home).map((a) => a.id)).toEqual(["bgm_001", "img_001"]);
});
});
describe("toPublicAsset", () => {
it("drops the absolute cached_path before it reaches the browser (m13)", () => {
const pub = toPublicAsset({
id: "bgm_001",
type: "bgm",
description: "calm",
sha: "abc",
entity: "Acme",
cached_path: "/Users/someone/.media/bgm/bgm_001.mp3",
});
expect(pub).toEqual({
id: "bgm_001",
type: "bgm",
description: "calm",
sha: "abc",
entity: "Acme",
});
expect("cached_path" in pub).toBe(false);
});
});