rsnext/test/e2e/app-dir/i18n-hybrid/i18n-hybrid.test.js

83 lines
1.9 KiB
JavaScript
Raw Normal View History

// @ts-check
// @ts-ignore
import { createNextDescribe } from 'e2e-utils'
import cheerio from 'cheerio'
const { i18n } = require('./next.config')
const urls = [
// Include the app page without a locale.
...(global.isNextDeploy
? []
: [
// TODO: enable for deploy mode when behavior is corrected
{
pathname: '/blog/first-post',
expected: {
pathname: '/blog/first-post',
page: '/app/blog/[slug]/page.js',
},
},
]),
// Include the app pages with locales (should not resolve).
...i18n.locales.map((locale) => ({
pathname: `/${locale}/blog/first-post`,
expected: null,
})),
// Include the pages page without a locale (should default to the default
// locale).
{
pathname: '/about',
expected: {
pathname: `/${i18n.defaultLocale}/about`,
page: '/pages/about.js',
},
},
// Include the locale prefixed urls for the pages page (should resolve).
...i18n.locales.map((locale) => ({
pathname: `/${locale}/about`,
expected: {
pathname: `/${locale}/about`,
page: '/pages/about.js',
},
})),
]
createNextDescribe(
'i18n-hybrid',
{
files: __dirname,
},
({ next }) => {
it.each(urls.filter((url) => !url.expected))(
'does not resolve $pathname',
async (url) => {
const res = await next.fetch(url.pathname, {
redirect: 'manual',
})
expect(res.status).toBe(404)
}
)
it.each(urls.filter((url) => url.expected))(
'does resolve $pathname',
async (url) => {
const res = await next.fetch(url.pathname, {
redirect: 'manual',
})
expect(res.status).toBe(200)
const $ = cheerio.load(await res.text())
const debug = JSON.parse($('#debug').text())
expect(debug).toEqual(url.expected)
}
)
}
)