Add Markdown->JSON tests

This commit is contained in:
2026-03-20 09:28:59 -05:00
parent 6255ecc41d
commit c16ba4bc40
9 changed files with 687 additions and 2 deletions
+49
View File
@@ -0,0 +1,49 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import { readFileSync, readdirSync } from 'node:fs';
import { join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { JSDOM } from 'jsdom';
const { window } = new JSDOM('<!doctype html><html><body></body></html>');
globalThis.DOMParser = window.DOMParser;
globalThis.fetch = () => Promise.resolve({
ok: true,
json: () => Promise.resolve([]),
text: () => Promise.resolve('')
});
const { parseMarkdownIssues, markdownSummaryToHtml } = await import('../web/js/issues.js');
const __dirname = fileURLToPath(new URL('.', import.meta.url));
const fixturesDir = join(__dirname, 'fixtures');
const fixtures = readdirSync(fixturesDir).filter(name => {
const contents = readdirSync(join(fixturesDir, name), { withFileTypes: true }).map(d => d.name);
return contents.includes('expected.md') && contents.includes('expected-parsed.json');
});
fixtures.forEach(fixtureId => {
const fixturePath = join(fixturesDir, fixtureId);
test(`parses and renders ${fixtureId}`, () => {
const markdownText = readFileSync(join(fixturePath, 'expected.md'), 'utf-8');
const expectedParsed = JSON.parse(readFileSync(join(fixturePath, 'expected-parsed.json'), 'utf-8'));
const parsed = parseMarkdownIssues(markdownText);
assert.equal(parsed.length, expectedParsed.length, 'issue count');
parsed.forEach((issue, i) => {
const expected = expectedParsed[i];
assert.equal(issue.id, expected.id, `issue[${i}] id`);
assert.equal(issue.summary, expected.summary, `issue[${i}] summary`);
assert.equal(issue.resolved, expected.resolved, `issue[${i}] resolved`);
assert.equal(issue.caveat, expected.caveat, `issue[${i}] caveat`);
const renderedHtml = markdownSummaryToHtml(issue.summary, issue.resolved, issue.caveat);
assert.equal(renderedHtml, expected.renderedHtml, `issue[${i}] renderedHtml`);
});
});
});