| | import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest' |
| | import nock from 'nock' |
| |
|
| | import enterpriseServerReleases from '@/versions/lib/enterprise-server-releases' |
| | import { get, getDOM } from '@/tests/helpers/e2etest' |
| | import Page from '@/frame/lib/page' |
| |
|
| | |
| | |
| | const page = await Page.init({ |
| | basePath: 'content', |
| | relativePath: 'admin/release-notes.md', |
| | languageCode: 'en', |
| | }) |
| | if (!page) throw new Error('Page not found') |
| |
|
| | describe('server', () => { |
| | vi.setConfig({ testTimeout: 60 * 1000 }) |
| |
|
| | test('basic redirecting', async () => { |
| | const res = await get('/admin/release-notes') |
| | expect(res.statusCode).toBe(302) |
| | expect(res.headers.location).toBe( |
| | |
| | `/en/enterprise-server@${enterpriseServerReleases.latest}/admin/release-notes`, |
| | ) |
| | }) |
| | test('basic rendering', async () => { |
| | const res = await get('/admin/release-notes', { followAllRedirects: true }) |
| | expect(res.statusCode).toBe(200) |
| | }) |
| |
|
| | const applicableVersions = page.applicableVersions |
| |
|
| | test.each(applicableVersions)('version %s that has release-notes', async (version) => { |
| | const url = `/en/${version}/admin/release-notes` |
| | const res = await get(url) |
| | expect(res.statusCode).toBe(200) |
| | }) |
| | }) |
| |
|
| | describe('archived release notes', () => { |
| | vi.setConfig({ testTimeout: 60 * 1000 }) |
| |
|
| | beforeAll(async () => { |
| | |
| | |
| | |
| | await get('/') |
| |
|
| | nock('https://github.github.com') |
| | .get('/docs-ghes-2.19/en/enterprise-server@2.19/admin/release-notes') |
| | .reply(404) |
| | nock('https://github.github.com').get('/docs-ghes-2.19/redirects.json').reply(200, { |
| | emp: 'ty', |
| | }) |
| | }) |
| |
|
| | afterAll(() => nock.cleanAll()) |
| |
|
| | test('redirects to the release notes on enterprise.github.com if none are present for this version here', async () => { |
| | const res = await get('/en/enterprise-server@2.19/admin/release-notes') |
| | expect(res.statusCode).toBe(302) |
| | expect(res.headers.location).toBe('https://enterprise.github.com/releases/2.19.0/notes') |
| | }) |
| |
|
| | test("renders the release-notes layout if this version's release notes are in this repo", async () => { |
| | const oldestSupportedGhes = enterpriseServerReleases.oldestSupported |
| | const res = await get(`/en/enterprise-server@${oldestSupportedGhes}/admin/release-notes`) |
| | expect(res.statusCode).toBe(200) |
| | const $ = await getDOM(`/en/enterprise-server@${oldestSupportedGhes}/admin/release-notes`) |
| | expect($('h1').first().text()).toBe(`Enterprise Server ${oldestSupportedGhes} release notes`) |
| | expect( |
| | $('main h2').first().text().trim().startsWith(`Enterprise Server ${oldestSupportedGhes}`), |
| | ).toBe(true) |
| | }) |
| |
|
| | test('404 if a bogus version is requested', async () => { |
| | const res = await get('/en/enterprise-server@12345/admin/release-notes') |
| | expect(res.statusCode).toBe(404) |
| | }) |
| |
|
| | test('404 if the pathname only ends with /release-notes', async () => { |
| | const res = await get(`/en/enterprise-server@latest/ANY/release-notes`, { |
| | followAllRedirects: true, |
| | }) |
| | expect(res.statusCode).toBe(404) |
| | }) |
| |
|
| | test('404 if the pathname only ends with /admin', async () => { |
| | const res = await get(`/en/enterprise-server@latest/ANY/admin`, { |
| | followAllRedirects: true, |
| | }) |
| | expect(res.statusCode).toBe(404) |
| | }) |
| | }) |
| |
|