import { createNext } from 'e2e-utils' import { NextInstance } from 'test/lib/next-modes/base' import { fetchViaHTTP, renderViaHTTP } from 'next-test-utils' import path from 'path' import fs from 'fs-extra' const locales = ['', '/en', '/sv', '/nl'] describe('i18n-ignore-rewrite-source-locale with basepath', () => { let next: NextInstance beforeAll(async () => { next = await createNext({ files: { 'pages/api/hello.js': ` export default function handler(req, res) { res.send('hello from api') }`, 'public/file.txt': 'hello from file.txt', }, dependencies: {}, nextConfig: { basePath: '/basepath', i18n: { locales: ['en', 'sv', 'nl'], defaultLocale: 'en', }, async rewrites() { return { beforeFiles: [ { source: '/:locale/rewrite-files/:path*', destination: '/:path*', locale: false, }, { source: '/:locale/rewrite-api/:path*', destination: '/api/:path*', locale: false, }, ], afterFiles: [], fallback: [], } }, }, }) }) afterAll(() => next.destroy()) // NTL Fail test.skip.each(locales)('get public file by skipping locale in rewrite, locale: %s', async (locale) => { const res = await renderViaHTTP(next.url, `/basepath${locale}/rewrite-files/file.txt`) expect(res).toContain('hello from file.txt') }) test.each(locales)('call api by skipping locale in rewrite, locale: %s', async (locale) => { const res = await renderViaHTTP(next.url, `/basepath${locale}/rewrite-api/hello`) expect(res).toContain('hello from api') }) // build artifacts aren't available on deploy if (!(global as any).isNextDeploy) { test.each(locales)('get _next/static/ files by skipping locale in rewrite, locale: %s', async (locale) => { const chunks = (await fs.readdir(path.join(next.testDir, '.next', 'static', 'chunks'))).filter((f) => f.endsWith('.js'), ) await Promise.all( chunks.map(async (file) => { const res = await fetchViaHTTP(next.url, `/basepath${locale}/rewrite-files/_next/static/chunks/${file}`) expect(res.status).toBe(200) }), ) }) } })