website/docs: Update Docusaurus config. Prep for version picker. (#14401)
* website/docs: Clean up config. Add types. * website/docs: Format MDX. * website: Fix build warnings. Lint badges frontmatter.
This commit is contained in:
78
website/sidebars/integrations.test.mjs
Normal file
78
website/sidebars/integrations.test.mjs
Normal file
@ -0,0 +1,78 @@
|
||||
/**
|
||||
* @file Test suite for the sidebar configuration of the authentik integrations.
|
||||
*
|
||||
* @todo Enforce types.
|
||||
*/
|
||||
import FastGlob from "fast-glob";
|
||||
import assert from "node:assert";
|
||||
import test from "node:test";
|
||||
|
||||
import sidebar from "./integrations.mjs";
|
||||
|
||||
const getSidebarItems = () => {
|
||||
/**
|
||||
* @type {any[]}
|
||||
*/
|
||||
const allItems = [];
|
||||
/**
|
||||
*
|
||||
* @param {any} category
|
||||
*/
|
||||
const mapper = (category) => {
|
||||
if (!category.items) {
|
||||
return;
|
||||
}
|
||||
|
||||
category.items.forEach(
|
||||
/**
|
||||
*
|
||||
* @param {any} item
|
||||
*/
|
||||
(item) => {
|
||||
if (typeof item === "string") {
|
||||
allItems.push(item);
|
||||
} else {
|
||||
mapper(item);
|
||||
}
|
||||
},
|
||||
);
|
||||
};
|
||||
|
||||
sidebar.integrations.forEach(mapper);
|
||||
return allItems.sort();
|
||||
};
|
||||
|
||||
test("ensure all services have a sidebar entry", (_t) => {
|
||||
// All services in the sidebar
|
||||
const services = getSidebarItems()
|
||||
.filter((entry) => entry.startsWith("services/"))
|
||||
.map((entry) => entry.replace("/index", ""))
|
||||
.map((entry) => entry.replace("services/", ""));
|
||||
const servicesFiles = FastGlob.sync("integrations/**/*.+(md|mdx)")
|
||||
.filter((entry) => entry.startsWith("integrations/services/"))
|
||||
.map((entry) => entry.replace("integrations/services/", ""))
|
||||
.map((entry) => entry.replace(/\/index\.mdx?/, ""))
|
||||
.filter((entry) => entry !== "index.mdx")
|
||||
.sort();
|
||||
servicesFiles.forEach((file, idx) => {
|
||||
assert.strictEqual(file, services[idx]);
|
||||
});
|
||||
});
|
||||
|
||||
test("ensure all sources have a sidebar entry", (_t) => {
|
||||
// All sources in the sidebar
|
||||
const sources = getSidebarItems()
|
||||
.filter((entry) => entry.startsWith("sources/"))
|
||||
.map((entry) => entry.replace("/index", ""))
|
||||
.map((entry) => entry.replace("sources/", ""));
|
||||
const sourceFiles = FastGlob.sync("integrations/**/*.+(md|mdx)")
|
||||
.filter((entry) => entry.startsWith("integrations/sources/"))
|
||||
.map((entry) => entry.replace("integrations/sources/", ""))
|
||||
.map((entry) => entry.replace(/\/index\.mdx?/, ""))
|
||||
.map((entry) => entry.replace(".md", ""))
|
||||
.sort();
|
||||
|
||||
sourceFiles.forEach((file, idx) => {
|
||||
assert.strictEqual(file, sources[idx]);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user