forked from github/docs
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathframe.js
More file actions
120 lines (105 loc) · 4.11 KB
/
frame.js
File metadata and controls
120 lines (105 loc) · 4.11 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import { languageKeys } from '#src/languages/lib/languages.js'
import { blockIndex } from '#src/frame/middleware/block-robots.js'
import { get, getDOMCached as getDOM } from '#src/tests/helpers/e2etest.js'
import Page from '#src/frame/lib/page.js'
import { jest } from '@jest/globals'
const langs = languageKeys.filter((lang) => lang !== 'en')
describe('frame', () => {
jest.setTimeout(60 * 1000)
test.each(langs)('allows crawling of %s pages', async (lang) => {
expect(blockIndex(`/${lang}/articles/verifying-your-email-address`)).toBe(false)
})
test.each(langs)('breadcrumbs link to %s pages', async (lang) => {
const $ = await getDOM(`/${lang}/get-started/learning-about-github`)
const $breadcrumbs = $('[data-testid=breadcrumbs-in-article] a')
expect($breadcrumbs[0].attribs.href).toBe(`/${lang}/get-started`)
})
test.each(langs)('homepage links go to %s pages', async (lang) => {
const $ = await getDOM(`/${lang}`)
const $links = $('[data-testid=bump-link]')
$links.each((i, el) => {
const linkUrl = $(el).attr('href')
expect(linkUrl.startsWith(`/${lang}/`)).toBe(true)
})
})
test.each(langs)('includes homepage hreflang to %s', async (lang) => {
const $ = await getDOM('/en')
expect($(`link[rel="alternate"][href="https://docs.github.com/${lang}"]`).length).toBe(1)
})
test.each(langs)('sets `lang` attribute on <html> attribute in %s', async (lang) => {
const $ = await getDOM(`/${lang}`)
expect($('html').attr('lang')).toBe(lang)
})
// Docs Engineering issue: 2096
test.skip.each(langs)('autogenerated heading IDs on %s are in english', async (lang) => {
const $ = await getDOM(`/${lang}/site-policy/github-terms/github-terms-of-service`)
expect($('h2 a[href="#summary"]').length).toBe(1)
})
test.each(langs)('loads the side bar via site tree in %s', async (lang) => {
const $en = await getDOM(`/en/get-started`)
const $ = await getDOM(`/${lang}/get-started`)
expect($(`a[href="/${lang}/get-started"]`).text()).not.toEqual(
$en(`a[href="/${lang}/get-started"]`).text(),
)
})
// Docs Engineering issue: 2637
test.skip.each(langs)('loads the survey via site data in %s', async (lang) => {
const $en = await getDOM(`/en`)
const $ = await getDOM(`/${lang}`)
expect($('[data-testid="survey-form"] h2').text()).not.toEqual(
$en('[data-testid="survey-form"] h2').text(),
)
})
})
describe('homepage', () => {
test.each(langs)('homepage in non-default product in non-default language', async (lang) => {
const $ = await getDOM(`/${lang}/enterprise-cloud@latest`)
const products = $('[data-testid=product]')
expect(products.length).toBe(1)
})
test.each(langs)('homepage in non-default language has product links', async (lang) => {
const $ = await getDOM(`/${lang}`)
const products = $('[data-testid=product]')
expect(products.length).toBe(1)
})
})
const page = await Page.init({
basePath: 'content',
relativePath: 'admin/release-notes.md',
languageCode: 'en',
})
describe('release notes', () => {
// Return an array of tuples for each language and each first version
// per plan. E.g. ...
// [
// ['ja', 'enterprise-server@3.9'],
// ['pt', 'enterprise-server@3.9'],
// ...
// ['ja', 'enterprise-server@3.8'],
// ['pt', 'enterprise-server@3.8'],
// ...
//
// This is useful because if we test every single individual version of
// every plan the test just takes way too long.
const getReleaseNotesVersionCombinations = (langs) => {
const combinations = []
const prefixes = []
for (const version of page.applicableVersions) {
const prefix = version.split('@')[0]
if (prefixes.includes(prefix)) {
continue
}
prefixes.push(prefix)
combinations.push(...langs.map((lang) => [lang, version]))
}
return combinations
}
test.each(getReleaseNotesVersionCombinations(langs))(
'latest release notes in %s for %s',
async (lang, version) => {
const url = `/${lang}/${version}/admin/release-notes`
const res = await get(url)
expect(res.statusCode).toBe(200)
},
)
})