Files
documentation/scripts/sidebar-coverage.test.mjs
T
jarvis-at-skic e087adab1e
Build and publish Eldorado documentation / build (pull_request) Successful in 47s
fix: [verified] expose all documentation in reachable sidebars
2026-10-06 20:00:08 +00:00

52 lines
2.7 KiB
JavaScript

import {test} from 'node:test';
import assert from 'node:assert/strict';
import {auditSidebars} from './sidebar-coverage.mjs';
const fixture = () => [{plugin:'strategy', version:'current', documents:[
{id:'overview', path:'/strategy/overview/', sidebar:'main'},
{id:'nested/reference', path:'/strategy/reference/', sidebar:'main'},
], sidebars:{main:[{type:'category', label:'Stage', href:'/strategy/overview', items:[
{type:'category', label:'Reference', items:[{type:'link', docId:'nested/reference', href:'/strategy/reference'}]},
]}]}}];
const entries = ['strategy:current:main'];
test('resolved nested entries and linked category overviews both count', () => {
assert.equal(auditSidebars(fixture(), entries).length, 2);
});
test('missing docs fail even if Docusaurus assigns a displayed sidebar', () => {
const data = fixture();
data[0].sidebars.main[0].items = [];
assert.throws(() => auditSidebars(data, entries), /Missing sidebar document/);
});
test('new publishable docs and absent category overview links fail closed', () => {
const data = fixture();
data[0].documents.push({id:'new', path:'/new'});
assert.throws(() => auditSidebars(data, entries), /Unreachable sidebar/);
const withoutLink = fixture();
delete withoutLink[0].sidebars.main[0].href;
assert.throws(() => auditSidebars(withoutLink, entries), /Missing sidebar document/);
});
test('duplicate normalized routes and duplicate sidebar entries fail', () => {
const data = fixture();
data[0].documents.push({...data[0].documents[0], path:'/strategy/overview'});
assert.throws(() => auditSidebars(data, entries), /Duplicate document ID/);
data[0].documents.at(-1).id = 'different';
assert.throws(() => auditSidebars(data, entries), /Duplicate document route/);
const duplicate = fixture();
duplicate[0].sidebars.main.push({type:'link', href:'/strategy/overview/'});
assert.throws(() => auditSidebars(duplicate, entries), /Duplicate sidebar route/);
});
test('unlisted entries and unresolved sidebar types fail', () => {
const data = fixture();
data[0].sidebars.main[0].unlisted = true;
assert.throws(() => auditSidebars(data, entries), /Hidden sidebar item/);
data[0].sidebars.main[0] = {type:'autogenerated'};
assert.throws(() => auditSidebars(data, entries), /Unresolved sidebar type/);
});
test('disconnected plugin menus fail, cross-plugin sidebar links make them reachable', () => {
const data = fixture();
data.push({plugin:'default', version:'current', documents:[{id:'help', path:'/docs/help', sidebar:'docs'}], sidebars:{docs:[{type:'link', href:'/docs/help'}]}});
assert.throws(() => auditSidebars(data, entries), /Unreachable sidebar/);
data[0].sidebars.main.push({type:'link', href:'/docs/help/'});
assert.equal(auditSidebars(data, entries).length, 3);
});