Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

site-tree.js 2.9 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  1. const revalidator = require('revalidator')
  2. const schema = require('../helpers/schemas/site-tree-schema')
  3. const latestEnterpriseRelease = require('../../lib/enterprise-server-releases').latest
  4. const { loadSiteTree } = require('../../lib/page-data')
  5. const japaneseCharacters = require('japanese-characters')
  6. const nonEnterpriseDefaultVersion = require('../../lib/non-enterprise-default-version')
  7. describe('siteTree', () => {
  8. jest.setTimeout(3 * 60 * 1000)
  9. let siteTree
  10. beforeAll(async (done) => {
  11. siteTree = await loadSiteTree()
  12. done()
  13. })
  14. test('has language codes as top-level keys', () => {
  15. expect('en' in siteTree).toBe(true)
  16. expect('ja' in siteTree).toBe(true)
  17. })
  18. test('object order and structure', () => {
  19. expect(siteTree.en[nonEnterpriseDefaultVersion].childPages[0].href).toBe('/en/github')
  20. expect(siteTree.en[nonEnterpriseDefaultVersion].childPages[0].childPages[0].href).toBe('/en/github/getting-started-with-github')
  21. })
  22. describe('localized titles', () => {
  23. test('titles for categories', () => {
  24. const japaneseTitle = siteTree.ja[nonEnterpriseDefaultVersion].childPages[0].childPages[0].page.title
  25. expect(typeof japaneseTitle).toBe('string')
  26. expect(japaneseCharacters.presentIn(japaneseTitle)).toBe(true)
  27. const englishTitle = siteTree.en[nonEnterpriseDefaultVersion].childPages[0].childPages[0].page.title
  28. expect(typeof englishTitle).toBe('string')
  29. expect(japaneseCharacters.presentIn(englishTitle)).toBe(false)
  30. })
  31. test('articles that include site data in liquid templating', async () => {
  32. const ghesLatest = `enterprise-server@${latestEnterpriseRelease}`
  33. const ghesSiteTree = siteTree.en[ghesLatest]
  34. // Find a page in the tree that we know contains Liquid
  35. // TODO: use new findPageInSiteTree helper when it's available
  36. const pageWithDynamicTitle = ghesSiteTree
  37. .childPages.find(child => child.href === `/en/${ghesLatest}/admin`)
  38. .childPages.find(child => child.href === `/en/${ghesLatest}/admin/enterprise-support`)
  39. // Confirm the raw title contains Liquid
  40. expect(pageWithDynamicTitle.page.title).toEqual('Working with {% data variables.contact.github_support %}')
  41. // Confirm a new property contains the rendered title
  42. expect(pageWithDynamicTitle.renderedFullTitle).toEqual('Working with GitHub Support')
  43. })
  44. })
  45. test('object validation', () => {
  46. const childPages = siteTree.en[nonEnterpriseDefaultVersion].childPages
  47. expect(childPages.length).toBeGreaterThan(0)
  48. validate(siteTree.en[nonEnterpriseDefaultVersion])
  49. })
  50. })
  51. function validate (currentPage) {
  52. (currentPage.childPages || []).forEach(childPage => {
  53. const { valid, errors } = revalidator.validate(childPage, schema.childPage)
  54. const expectation = JSON.stringify(errors, null, 2)
  55. expect(valid, expectation).toBe(true)
  56. // Run recurisvely until we run out of child pages
  57. validate(childPage)
  58. })
  59. }
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...