1
0
mirror of synced 2025-12-31 15:04:15 -05:00
Files
docs/tests/unit/get-redirect.js
Kevin Heis 303d5190db Create a translations test suite (#30000)
* Scaffold files for migration

* Move user-agent into unit suite

* Nothing to move from browser suite

* Migrate tests to translations/content

* Migrate existing translation test to meta

* No graphql tests to migrate

* Migrate lint-translation-reporter

* Migrate lint-translation-reporter

* Remove languages-schema, unused

* Restore languages-schema

* Restore languages-schema

* Migrate rendering

* Migrate routing

* Migrate most of unit

* Remove dead files, comment out tests that aren't expected to work yet

* Migrate from get-redirect

* Migrate page and pages

* Migrate linting code

* Fix lint issues

* Found a few more

* Run prettier

* Move crowdin-config test and helper

* Update crowdin-config.js

* Remove translation linting, crowdin config lint, reduce file count

* Remove test that's been skipped for a year

* Restore linting with note to remove later

* Update lint-translation-reporter.js

* Clean up rendering suite

* Update rendering.js

* Remove excessive describe blocks

* Redirect tests

* Clean up unit

* Remove test that's never called

* Don't compare early access

* Rename test suites

* Update "content" tests

* Update files.js

* Update search.js

* Update files.js

* Update files.js
2022-08-25 12:38:03 -07:00

151 lines
5.4 KiB
JavaScript

import { describe, expect } from '@jest/globals'
import getRedirect from '../../lib/get-redirect.js'
import { latest } from '../../lib/enterprise-server-releases.js'
describe('getRedirect basics', () => {
it('should sometimes not correct the version prefix', () => {
// This essentially tests legacy entries that come from the
// `developer.json` file. Normally, we would have first
// rewritten `/enterprise/3.0` to `/enterprise-server@3.0`
// and then, from there, worried about the remaining `/foo/bar`
// part.
// But some redirects from `developer.json` as old and static.
const uri = '/enterprise/3.0/foo/bar'
const ctx = {
pages: {},
redirects: {
'/enterprise/3.0/foo/bar': '/something/else',
},
}
expect(getRedirect(uri, ctx)).toBe('/en/something/else')
})
it('should return undefined if nothing could be found', () => {
const ctx = {
pages: {},
redirects: {},
}
expect(getRedirect('/foo/pizza', ctx)).toBeUndefined()
})
it('should just inject language on version "home pages"', () => {
const ctx = {
pages: {},
redirects: {},
}
expect(getRedirect('/github-ae@latest', ctx)).toBe('/en/github-ae@latest')
expect(getRedirect('/enterprise-cloud@latest', ctx)).toBe('/en/enterprise-cloud@latest')
expect(getRedirect('/enterprise-server@3.3', ctx)).toBe('/en/enterprise-server@3.3')
expect(getRedirect('/enterprise-server@latest', ctx)).toBe(`/en/enterprise-server@${latest}`)
expect(getRedirect('/enterprise-server', ctx)).toBe(`/en/enterprise-server@${latest}`)
})
it('should always "remove" the free-pro-team prefix', () => {
const ctx = {
pages: {},
redirects: {
'/foo': '/bar',
},
}
expect(getRedirect('/free-pro-team@latest', ctx)).toBe('/en')
// Language is fine, but the version needs to be "removed"
expect(getRedirect('/en/free-pro-team@latest', ctx)).toBe('/en')
expect(getRedirect('/free-pro-team@latest/pizza', ctx)).toBe('/en/pizza')
expect(getRedirect('/free-pro-team@latest/foo', ctx)).toBe('/en/bar')
expect(getRedirect('/free-pro-team@latest/github', ctx)).toBe('/en/github')
})
it('should handle some odd exceptions', () => {
const ctx = {
pages: {},
redirects: {},
}
expect(getRedirect('/desktop/guides/foo/bar', ctx)).toBe('/en/desktop/foo/bar')
expect(getRedirect('/admin/guides/foo/bar', ctx)).toBe(
`/en/enterprise-server@${latest}/admin/foo/bar`
)
expect(getRedirect('/admin/something/else', ctx)).toBe(
`/en/enterprise-server@${latest}/admin/something/else`
)
expect(getRedirect('/insights/stuff', ctx)).toBe(
`/en/enterprise-server@${latest}/insights/stuff`
)
})
it('should figure out redirect based on presence of pages in certain cases', () => {
const ctx = {
pages: {
'/en/enterprise-server@3.2/foo/bar': null,
'/en/enterprise-server@3.2/admin/github-management': null,
},
redirects: {},
}
// Replacing `/user` with `` worked because there exits a page of such name.
expect(getRedirect('/enterprise-server@3.2/user/foo/bar', ctx)).toBe(
'/en/enterprise-server@3.2/foo/bar'
)
expect(getRedirect('/enterprise-server@3.2/admin/guides/user-management', ctx)).toBe(
'/en/enterprise-server@3.2/admin/github-management'
)
})
it('should always correct the old enterprise prefix', () => {
const ctx = {
pages: {},
redirects: {
'/enterprise-server@3.3/foo': '/enterprise-server@3.3/bar',
},
}
expect(getRedirect('/enterprise', ctx)).toBe(`/en/enterprise-server@${latest}`)
expect(getRedirect('/enterprise/3.3', ctx)).toBe('/en/enterprise-server@3.3')
expect(getRedirect('/enterprise/3.3/something', ctx)).toBe(
'/en/enterprise-server@3.3/something'
)
// but also respect redirects if there are some
expect(getRedirect('/enterprise/3.3/foo', ctx)).toBe('/en/enterprise-server@3.3/bar')
// Unique snowflake pattern
expect(getRedirect('/enterprise/github/admin/foo', ctx)).toBe(
`/en/enterprise-server@${latest}/github/admin/foo`
)
})
it('should not do anything on some prefixes', () => {
const ctx = {
pages: {},
redirects: {},
}
// Nothing's needed here because it's not /admin/guides and
// it already has the enterprise-server prefix.
expect(getRedirect(`/en/enterprise-server@${latest}/admin/something/else`, ctx)).toBeUndefined()
expect(getRedirect(`/en/enterprise-cloud@latest/user/foo`, ctx)).toBeUndefined()
})
it('should redirect both the prefix and the path needs to change', () => {
const ctx = {
pages: {},
redirects: {
[`/enterprise-server@${latest}/foo`]: `/enterprise-server@${latest}/bar`,
},
}
// Nothing's needed here because it's not /admin/guides and
// it already has the enterprise-server prefix.
expect(getRedirect('/enterprise-server/foo', ctx)).toBe(`/en/enterprise-server@${latest}/bar`)
})
it('should work for some deprecated enterprise-server URLs too', () => {
// Starting with enterprise-server 3.0, we have made redirects become
// a *function* rather than a lookup on a massive object.
const ctx = {
pages: {},
redirects: {},
}
expect(getRedirect('/enterprise/3.0', ctx)).toBe('/en/enterprise-server@3.0')
expect(getRedirect('/enterprise/3.0/foo', ctx)).toBe('/en/enterprise-server@3.0/foo')
})
})