Files
Zakaria a46764fb1b
ci / Validate workspace (push) Has been cancelled
landing-page-ci / Validate landing page (push) Has been cancelled
landing-page-deploy / Deploy landing page (push) Has been cancelled
github-metrics / Generate repository metrics SVG (push) Has been cancelled
refresh-contributors-wall / Refresh contributors wall cache bust (push) Waiting to run
first-commit
2026-05-04 14:58:14 -04:00

73 lines
2.2 KiB
TypeScript

// @ts-nocheck
import { describe, expect, it, beforeAll, afterAll } from 'vitest';
import { mkdtemp, rm, writeFile } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import path from 'node:path';
import { loadCraftSections } from '../src/craft.js';
let craftDir;
beforeAll(async () => {
craftDir = await mkdtemp(path.join(tmpdir(), 'od-craft-test-'));
await writeFile(
path.join(craftDir, 'typography.md'),
'# typography\n\nALL CAPS ≥ 0.06em.\n',
'utf8',
);
await writeFile(
path.join(craftDir, 'color.md'),
'# color\n\nAccent ≤ 2 per screen.\n',
'utf8',
);
await writeFile(path.join(craftDir, 'empty.md'), ' \n\n', 'utf8');
});
afterAll(async () => {
if (craftDir) await rm(craftDir, { recursive: true, force: true });
});
describe('loadCraftSections', () => {
it('returns empty when nothing requested', async () => {
const r = await loadCraftSections(craftDir, []);
expect(r.body).toBe('');
expect(r.sections).toEqual([]);
});
it('concatenates requested sections in order with section headers', async () => {
const r = await loadCraftSections(craftDir, ['typography', 'color']);
expect(r.sections).toEqual(['typography', 'color']);
expect(r.body.startsWith('### typography')).toBe(true);
expect(r.body.includes('### color')).toBe(true);
expect(r.body.indexOf('### typography')).toBeLessThan(r.body.indexOf('### color'));
});
it('drops missing files silently (forward-compatible)', async () => {
const r = await loadCraftSections(craftDir, ['typography', 'motion', 'color']);
expect(r.sections).toEqual(['typography', 'color']);
});
it('drops empty files silently', async () => {
const r = await loadCraftSections(craftDir, ['empty', 'typography']);
expect(r.sections).toEqual(['typography']);
});
it('rejects bogus slugs (path traversal, special chars)', async () => {
const r = await loadCraftSections(craftDir, [
'../etc/passwd',
'typo/graphy',
'typography',
]);
expect(r.sections).toEqual(['typography']);
});
it('dedupes repeated requests', async () => {
const r = await loadCraftSections(craftDir, [
'typography',
'TYPOGRAPHY',
'typography',
]);
expect(r.sections).toEqual(['typography']);
});
});