Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions middleware/contextualizers/ghae-release-notes.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { merge } from 'lodash-es'

import { formatReleases, renderPatchNotes } from '../../lib/release-notes-utils.js'
import { getDeepDataByLanguage } from '../../lib/get-data.js'
import { allVersions } from '../../lib/all-versions.js'
Expand All @@ -10,10 +12,11 @@ export default async function ghaeReleaseNotesContext(req, res, next) {
)
return next()

let ghaeReleaseNotes = getDeepDataByLanguage('release-notes.github-ae', req.language)
if ((!ghaeReleaseNotes || Object.keys(ghaeReleaseNotes).length === 0) && req.language !== 'en') {
ghaeReleaseNotes = getDeepDataByLanguage('release-notes.github-ae', 'en')
}
const ghaeReleaseNotesEnglish = getDeepDataByLanguage('release-notes.github-ae', 'en')
const ghaeReleaseNotesTranslated = getDeepDataByLanguage('release-notes.github-ae', req.language)
const ghaeReleaseNotes = {}
merge(ghaeReleaseNotes, ghaeReleaseNotesEnglish)
merge(ghaeReleaseNotes, ghaeReleaseNotesTranslated)

// internalLatestRelease is set in lib/all-versions, e.g., '3.5' but UI still displays '@latest'.
let requestedRelease = req.context.currentVersionObj.internalLatestRelease
Expand Down
14 changes: 10 additions & 4 deletions middleware/contextualizers/ghes-release-notes.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { merge } from 'lodash-es'

import { formatReleases, renderPatchNotes } from '../../lib/release-notes-utils.js'
import { all } from '../../lib/enterprise-server-releases.js'
import { getDeepDataByLanguage } from '../../lib/get-data.js'
Expand All @@ -7,10 +9,14 @@ export default async function ghesReleaseNotesContext(req, res, next) {
const [requestedPlan, requestedRelease] = req.context.currentVersion.split('@')
if (requestedPlan !== 'enterprise-server') return next()

let ghesReleaseNotes = getDeepDataByLanguage('release-notes.enterprise-server', req.language)
if ((!ghesReleaseNotes || Object.keys(ghesReleaseNotes).length === 0) && req.language !== 'en') {
ghesReleaseNotes = getDeepDataByLanguage('release-notes.enterprise-server', 'en')
}
const ghesReleaseNotesEnglish = getDeepDataByLanguage('release-notes.enterprise-server', 'en')
const ghesReleaseNotesTranslated = getDeepDataByLanguage(
'release-notes.enterprise-server',
req.language
)
const ghesReleaseNotes = {}
merge(ghesReleaseNotes, ghesReleaseNotesEnglish)
merge(ghesReleaseNotes, ghesReleaseNotesTranslated)

// If the requested GHES release isn't found in data/release-notes/enterprise-server/*,
// and it IS a valid GHES release, try being helpful and redirecting to the old location.
Expand Down
50 changes: 50 additions & 0 deletions tests/rendering/release-notes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import { describe, jest } from '@jest/globals'

import enterpriseServerReleases from '../../lib/enterprise-server-releases.js'
import { get } from '../helpers/e2etest.js'
import languages from '../../lib/languages.js'
import Page from '../../lib/page.js'

describe('server', () => {
jest.setTimeout(60 * 1000)

test('basic redirecting', async () => {
const res = await get('/admin/release-notes')
expect(res.statusCode).toBe(302)
expect(res.headers.location).toBe(
// Note that English is the default fallback for redirects
`/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)
})

test('every version that has release-notes', async () => {
// The English content page's `versions:` frontmatter is the source
// of (convenient) truth about which versions of this page is available.
const page = await Page.init({
basePath: 'content',
relativePath: 'admin/release-notes.md',
languageCode: 'en',
})
const testLanguages = []
for (const [langCode, langObj] of Object.entries(languages)) {
if (!langObj.wip) {
testLanguages.push(langCode)
}
}
await Promise.all(
page.applicableVersions.map(async (version) => {
await Promise.all(
testLanguages.map(async (language) => {
const url = `/${language}/${version}/admin/release-notes`
const res = await get(url)
expect(res.statusCode).toBe(200)
})
)
})
)
})
})