From 50ca63593528235a250a33e2b10a9b87a20946ba Mon Sep 17 00:00:00 2001 From: suzunn Date: Wed, 10 Jun 2026 13:45:26 +0300 Subject: [PATCH] test: cover local link edge cases --- test/audit.test.js | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/test/audit.test.js b/test/audit.test.js index 5a39824..ab48df8 100644 --- a/test/audit.test.js +++ b/test/audit.test.js @@ -56,3 +56,41 @@ test('auditDocs can check remote links through an injected checker', async () => assert.equal(result.summary.errors, 1); assert.equal(result.issues[0].code, 'remote-status'); }); + +test('auditDocs validates anchors through directory index files', async () => { + const root = await mkdtemp(path.join(os.tmpdir(), 'doclink-auditor-')); + await mkdir(path.join(root, 'guides')); + await writeFile(path.join(root, 'README.md'), '[Install guide](guides/#install)\n'); + await writeFile(path.join(root, 'guides', 'README.md'), '# Install\n'); + + const result = await auditDocs({ root, ignore: [], include: ['.md'] }); + + assert.equal(result.summary.errors, 0); + assert.deepEqual(result.issues, []); +}); + +test('auditDocs decodes encoded local paths before resolving files', async () => { + const root = await mkdtemp(path.join(os.tmpdir(), 'doclink-auditor-')); + await mkdir(path.join(root, 'docs')); + await writeFile(path.join(root, 'README.md'), '[Space guide](docs/space%20guide.md#overview)\n'); + await writeFile(path.join(root, 'docs', 'space guide.md'), '# Overview\n'); + + const result = await auditDocs({ root, ignore: [], include: ['.md'] }); + + assert.equal(result.summary.errors, 0); + assert.deepEqual(result.issues, []); +}); + +test('auditDocs warns when fragments point at non-Markdown files', async () => { + const root = await mkdtemp(path.join(os.tmpdir(), 'doclink-auditor-')); + await mkdir(path.join(root, 'assets')); + await writeFile(path.join(root, 'README.md'), '[Logo symbol](assets/logo.svg#symbol)\n'); + await writeFile(path.join(root, 'assets', 'logo.svg'), '\n'); + + const result = await auditDocs({ root, ignore: [], include: ['.md'] }); + + assert.equal(result.summary.errors, 0); + assert.equal(result.summary.warnings, 1); + assert.equal(result.issues[0].code, 'anchor-not-checked'); + assert.equal(result.issues[0].severity, 'warning'); +});