Build and publish Eldorado documentation / build (pull_request) Successful in 47s
52 lines
2.7 KiB
JavaScript
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);
|
|
});
|