58 lines
2.4 KiB
TypeScript
58 lines
2.4 KiB
TypeScript
import { readFileSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
import { DocsSidebar } from "./DocsSidebar";
|
|
import { SideBarItem } from "./SidebarItem";
|
|
|
|
describe("DocsSidebar", () => {
|
|
it("should return an array of SideBarItem objects", () => {
|
|
const docsSidebar: SideBarItem[] = DocsSidebar();
|
|
expect(Array.isArray(docsSidebar)).toBe(true);
|
|
docsSidebar.forEach((item) => {
|
|
expect(typeof item.title).toBe("string");
|
|
expect(typeof item.path).toBe("string");
|
|
if (item.items) {
|
|
expect(Array.isArray(item.items)).toBe(true);
|
|
item.items.forEach((subItem) => {
|
|
expect(typeof subItem.title).toBe("string");
|
|
expect(typeof subItem.path).toBe("string");
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
it("should return feature items with tab titles starting with capital letters", () => {
|
|
const docsSidebar: SideBarItem[] = DocsSidebar();
|
|
const pageBlockItem = docsSidebar[2];
|
|
const pageBlockTab = pageBlockItem.items?.find((item) => item.path === "/docs/features");
|
|
|
|
expect(pageBlockTab).toBeDefined();
|
|
expect(pageBlockTab?.title).toMatch(/^\w/);
|
|
expect(pageBlockTab?.title.charAt(0)).toMatch(/[A-Z]/);
|
|
});
|
|
|
|
it("does not expose removed marketing docs in the default navigation", () => {
|
|
const serialized = JSON.stringify(DocsSidebar());
|
|
|
|
expect(serialized).not.toContain(["/docs/page", "-blocks"].join(""));
|
|
expect(serialized).not.toContain("/docs/features/marketing");
|
|
expect(serialized).not.toContain("/docs/features/email-marketing");
|
|
expect(serialized).not.toContain("/docs/features/help-desk");
|
|
expect(serialized).not.toContain("/docs/features/knowledge-base");
|
|
expect(serialized).not.toContain("/docs/features/analytics");
|
|
expect(serialized).not.toContain("/docs/features/onboarding");
|
|
expect(serialized).not.toContain("/docs/learning-center/guides/branding/landing");
|
|
expect(serialized).not.toContain("🚀");
|
|
expect(serialized).not.toContain("🚧");
|
|
});
|
|
|
|
it("uses semantic docs sidebar translation keys", () => {
|
|
const source = readFileSync(join(process.cwd(), "apps/web/app/application/sidebar/DocsSidebar.ts"), "utf8");
|
|
|
|
expect(source).toContain("docs.sidebar.introduction");
|
|
expect(source).toContain("docs.sidebar.learningCenter");
|
|
expect(source).toContain("docs.sidebar.coreModels");
|
|
expect(source.match(/^\s*title:\s*"(?!")/gmu)).toBeNull();
|
|
expect(source).not.toContain("ui.autogenerated");
|
|
});
|
|
});
|