polen
Version:
A framework for delightful GraphQL developer portals
56 lines (48 loc) • 1.97 kB
text/typescript
import { describe, expect, it } from 'vitest'
import { createNavbar } from './navbar.js'
import type { Page } from './page.js'
const createPage = (path: string[], fileName = 'index', hidden = false): Page => ({
route: {
id: path.join('/'),
parentId: path.length > 1 ? path.slice(0, -1).join('/') : null,
logical: { path },
file: {
path: {
absolute: { root: '/', dir: `/pages/${path.join('/')}`, base: `${fileName}.md`, ext: '.md', name: fileName },
relative: { root: '', dir: path.join('/'), base: `${fileName}.md`, ext: '.md', name: fileName },
},
},
},
metadata: { description: undefined, hidden },
})
describe('createNavbar', () => {
it('returns empty for empty input', () => {
expect(createNavbar([])).toEqual([])
})
it('excludes hidden pages', () => {
const pages = [createPage(['visible'], 'index', false), createPage(['hidden'], 'index', true)]
const result = createNavbar(pages)
expect(result).toEqual([{ pathExp: '/visible', title: 'Visible' }])
})
it('includes directories with index pages', () => {
const pages = [createPage(['guide'], 'index'), createPage(['guide', 'intro'], 'intro')]
const result = createNavbar(pages)
expect(result).toEqual([{ pathExp: '/guide', title: 'Guide' }])
})
it('excludes directories without index pages', () => {
const pages = [createPage(['guide', 'intro'], 'intro')]
const result = createNavbar(pages)
expect(result).toEqual([])
})
it('includes single top-level pages', () => {
const pages = [createPage(['about'], 'about')]
const result = createNavbar(pages)
expect(result).toEqual([{ pathExp: '/about', title: 'About' }])
})
it('sorts results alphabetically', () => {
const pages = [createPage(['zebra'], 'zebra'), createPage(['alpha'], 'alpha')]
const result = createNavbar(pages)
expect(result[0]!.title).toBe('Alpha')
expect(result[1]!.title).toBe('Zebra')
})
})