forked from github/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathheader.js
155 lines (132 loc) · 6.65 KB
/
header.js
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import { expect, jest } from '@jest/globals'
import { getDOM } from '../helpers/e2etest.js'
import { oldestSupported } from '../../lib/enterprise-server-releases.js'
import { getUserLanguage } from '../helpers/script-data.js'
describe('header', () => {
jest.setTimeout(5 * 60 * 1000)
test('includes localized meta tags', async () => {
const $ = await getDOM('/en')
expect($('link[rel="alternate"]').length).toBeGreaterThan(2)
})
test("includes a link to the homepage (in the current page's language)", async () => {
let $ = await getDOM('/en')
expect($('#github-logo a[href="/en"]').length).toBe(2)
$ = await getDOM('/ja')
expect($('#github-logo a[href="/ja"]').length).toBe(2)
expect($('#github-logo a[href="/en"]').length).toBe(0)
})
describe('language links', () => {
test('lead to the same page in a different language', async () => {
const $ = await getDOM(
'/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/managing-a-branch-protection-rule'
)
expect(
$(
'[data-testid=desktop-header] [data-testid=language-picker] a[href="/ja/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/managing-a-branch-protection-rule"]'
).length
).toBe(1)
})
test('display the native name and the English name for each translated language', async () => {
const $ = await getDOM('/en')
expect(
$('[data-testid=desktop-header] [data-testid=language-picker] a[href="/en"]').text().trim()
).toBe('English')
expect(
$('[data-testid=desktop-header] [data-testid=language-picker] a[href="/cn"]').text().trim()
).toBe('简体中文 (Simplified Chinese)')
expect(
$('[data-testid=desktop-header] [data-testid=language-picker] a[href="/ja"]').text().trim()
).toBe('日本語 (Japanese)')
})
test('emphasize the current language', async () => {
const $ = await getDOM('/en')
expect($('[data-testid=desktop-header] [data-testid=language-picker] summary').text()).toBe(
'English'
)
})
})
describe('notices', () => {
// Docs engineering issue: 1055
test.skip('displays a "localization in progress" notice for WIP languages', async () => {
const $ = await getDOM('/de')
expect($('[data-testid=header-notification][data-type=TRANSLATION]').length).toBe(1)
expect($('[data-testid=header-notification] a[href="/en"]').length).toBe(1)
})
test('displays "complete" notice for non-WIP non-English languages', async () => {
const $ = await getDOM('/ja')
expect($('[data-testid=header-notification][data-type=TRANSLATION]').length).toBe(1)
expect($('[data-testid=header-notification] a[href="/en"]').length).toBe(1)
expect($('[data-testid=header-notification] a[href*="github.com/contact"]').length).toBe(1)
})
// Docs Engineering issue: 966
test.skip('does not display any notices for English', async () => {
const $ = await getDOM('/en')
expect($('[data-testid=header-notification]').length).toBe(0)
})
test('displays translation disclaimer notice on localized site-policy pages', async () => {
const $ = await getDOM('/ja/site-policy/other-site-policies/github-logo-policy')
// The first case is for a complete translation, the second case is for a page pending complete translation.
expect(
$(
'[data-testid=header-notification][data-type=TRANSLATION] a[href="https://github.com/github/site-policy/issues"]'
).length ||
$(
'[data-testid=header-notification][data-type=TRANSLATION] a[href="https://github.com/contact?form[subject]=translation%20issue%20on%20docs.github.com&form[comments]="]'
).length
).toBe(1)
})
test("renders a link to the same page in user's preferred language, if available", async () => {
const headers = { 'accept-language': 'ja' }
const $ = await getDOM('/en', { headers })
expect(getUserLanguage($)).toBe('ja')
})
test("renders a link to the same page if user's preferred language is Chinese - PRC", async () => {
const headers = { 'accept-language': 'zh-CN' }
const $ = await getDOM('/en', { headers })
expect(getUserLanguage($)).toBe('cn')
})
test("renders a link to the same page in user's preferred language from multiple, if available", async () => {
const headers = { 'accept-language': 'ja, *;q=0.9' }
const $ = await getDOM('/en', { headers })
expect(getUserLanguage($)).toBe('ja')
})
test("renders a link to the same page in user's preferred language with weights, if available", async () => {
const headers = { 'accept-language': 'ja;q=1.0, *;q=0.9' }
const $ = await getDOM('/en', { headers })
expect(getUserLanguage($)).toBe('ja')
})
test("renders a link to the user's 2nd preferred language if 1st is not available", async () => {
const headers = { 'accept-language': 'zh-TW,zh;q=0.9,ja *;q=0.8' }
const $ = await getDOM('/en', { headers })
expect(getUserLanguage($)).toBe('ja')
})
})
describe('mobile-only product dropdown links', () => {
test('include Get started and admin, and emphasize the current product', async () => {
const $ = await getDOM(
'/en/get-started/importing-your-projects-to-github/importing-source-code-to-github/about-github-importer'
)
const getStarted = $(
'[data-testid=product-picker][data-current-product-path="/get-started"] summary'
)
expect(getStarted.length).toBe(1)
expect(getStarted.text().trim()).toBe('Get started')
const ghec = $(`[data-testid=product-picker] a[href="/en/enterprise-cloud@latest/admin"]`)
expect(ghec.length).toBe(1)
expect(ghec.text().trim()).toBe('Enterprise administrators')
})
test("point to homepages in the current page's language", async () => {
const $ = await getDOM('/ja/github/site-policy/github-terms-of-service')
const $breadcrumbRefs = $('[data-testid=breadcrumbs] a')
expect($breadcrumbRefs[0].attribs.href.startsWith('/ja')).toBe(true)
const $sidebarRefs = $('[data-testid=sidebar] a')
expect($sidebarRefs[0].attribs.href.startsWith('/ja')).toBe(true)
})
test('emphasizes the product that corresponds to the current page', async () => {
const $ = await getDOM(
`/en/enterprise-server@${oldestSupported}/get-started/importing-your-projects-to-github/importing-source-code-to-github/importing-a-git-repository-using-the-command-line`
)
expect($('[data-testid=product-picker] summary').text()).toBe('Get started')
})
})
})