fix: harden empty asset materialization

This commit is contained in:
2026-09-02 01:09:21 +03:00
parent 49a4f75c8d
commit bc851e398b
3 changed files with 134 additions and 35 deletions

View File

@@ -1,18 +1,10 @@
import { execFile as execFileCallback } from 'node:child_process';
import { mkdir, readFile, readdir, rm, writeFile } from 'node:fs/promises';
import { promisify } from 'node:util';
import { afterEach, describe, expect, it } from 'vitest';
import { readFile } from 'node:fs/promises';
import { describe, expect, it } from 'vitest';
import { parsePortfolioContent, parsePublicAssetManifest, parseSiteConfig } from '@/content/schemas';
const execFile = promisify(execFileCallback);
const repositoryRoot = process.cwd();
const readJson = async (relativePath: string): Promise<unknown> =>
JSON.parse(await readFile(`${repositoryRoot}/${relativePath}`, 'utf8')) as unknown;
const preparedAssetsPath = `${repositoryRoot}/inputs/prepared-assets`;
afterEach(async () => {
await rm(preparedAssetsPath, { recursive: true, force: true });
});
describe('approved public portfolio projection', () => {
it('contains approved identity and balanced evidence without prohibited surfaces', async () => {
@@ -51,14 +43,4 @@ describe('approved public portfolio projection', () => {
});
expect(JSON.stringify(content)).not.toMatch(/Arch Linux|CV download|heatmap|expert|percent/i);
});
it('materializes an empty prepared-asset directory and rejects unexpected members', async () => {
await execFile(process.execPath, ['scripts/materialize-empty-asset-set.mjs'], { cwd: repositoryRoot });
expect(await readdir(preparedAssetsPath)).toEqual([]);
await mkdir(preparedAssetsPath, { recursive: true });
await writeFile(`${preparedAssetsPath}/unexpected.webp`, 'not an asset');
await expect(execFile(process.execPath, ['scripts/materialize-empty-asset-set.mjs'], { cwd: repositoryRoot }))
.rejects.toThrow(/must be empty/i);
});
});