| | import { beforeAll, describe, expect, test, vi } from 'vitest' |
| |
|
| | import { getJsonValidator } from '@/tests/lib/validate-json-schema' |
| | import schema from '@/tests/helpers/schemas/site-tree-schema' |
| | import EnterpriseServerReleases from '@/versions/lib/enterprise-server-releases' |
| | import { loadSiteTree } from '@/frame/lib/page-data' |
| | import nonEnterpriseDefaultVersion from '@/versions/lib/non-enterprise-default-version' |
| | import { formatAjvErrors } from '@/tests/helpers/schemas' |
| | import type { SiteTree, Tree } from '@/types' |
| | import findPageInSiteTree from '@/frame/lib/find-page-in-site-tree' |
| |
|
| | const latestEnterpriseRelease = EnterpriseServerReleases.latest |
| |
|
| | const siteTreeValidate = getJsonValidator(schema.childPage) |
| |
|
| | describe('siteTree', () => { |
| | vi.setConfig({ testTimeout: 3 * 60 * 1000 }) |
| |
|
| | let siteTree: SiteTree |
| | beforeAll(async () => { |
| | siteTree = (await loadSiteTree()) as SiteTree |
| | }) |
| |
|
| | test('has language codes as top-level keys', () => { |
| | expect('en' in siteTree).toBe(true) |
| | }) |
| |
|
| | test('object order and structure', () => { |
| | expect(siteTree.en[nonEnterpriseDefaultVersion].childPages[1].href).toBe('/en/get-started') |
| | expect(siteTree.en[nonEnterpriseDefaultVersion].childPages[1].childPages[0].href).toBe( |
| | '/en/get-started/start-your-journey', |
| | ) |
| | }) |
| |
|
| | describe('localized titles', () => { |
| | test('articles that include site data in liquid templating', async () => { |
| | const ghesLatest = `enterprise-server@${latestEnterpriseRelease}` |
| | const ghesSiteTree = siteTree.en[ghesLatest] |
| |
|
| | |
| | const pageWithDynamicTitle = findPageInSiteTree( |
| | ghesSiteTree, |
| | siteTree.en[nonEnterpriseDefaultVersion], |
| | `/en/${ghesLatest}/admin/installing-your-enterprise-server`, |
| | ) |
| |
|
| | |
| | expect(pageWithDynamicTitle.page.title).toEqual( |
| | 'Installing {% data variables.product.prodname_enterprise %}', |
| | ) |
| | }) |
| | }) |
| |
|
| | test('object validation', () => { |
| | const childPages = siteTree.en[nonEnterpriseDefaultVersion].childPages |
| | expect(childPages.length).toBeGreaterThan(0) |
| |
|
| | validate(siteTree.en[nonEnterpriseDefaultVersion]) |
| | }) |
| | }) |
| |
|
| | function validate(currentPage: Tree): void { |
| | const childPages: Tree[] = currentPage.childPages || [] |
| | for (const childPage of childPages) { |
| | |
| | const pageRef: Tree = childPage |
| | const isValid = siteTreeValidate(childPage) |
| | let errors: string | undefined |
| |
|
| | if (!isValid) { |
| | const fullPath = pageRef.page.fullPath |
| | errors = `file ${fullPath}: ${formatAjvErrors(siteTreeValidate.errors || [])}` |
| | } |
| |
|
| | expect(isValid, errors).toBe(true) |
| |
|
| | |
| | validate(pageRef) |
| | } |
| | } |
| |
|