Skip to content

Commit

Permalink
test: check most possible combination of CNA flags
Browse files Browse the repository at this point in the history
  • Loading branch information
lubieowoce authored and ztanner committed Sep 6, 2024
1 parent 2bd06a1 commit 6bb620e
Showing 1 changed file with 79 additions and 0 deletions.
79 changes: 79 additions & 0 deletions test/integration/create-next-app/templates/matrix.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { run, tryNextDev, useTempDir } from '../utils'

describe.each(['app', 'pages'] as const)(
'CNA options matrix - %s',
(pagesOrApp) => {
let nextTgzFilename: string

beforeAll(() => {
if (!process.env.NEXT_TEST_PKG_PATHS) {
throw new Error('This test needs to be run with `node run-tests.js`.')
}

const pkgPaths = new Map<string, string>(
JSON.parse(process.env.NEXT_TEST_PKG_PATHS)
)

nextTgzFilename = pkgPaths.get('next')!
})

const isApp = pagesOrApp === 'app'

const allFlagValues = {
app: [isApp ? '--app' : '--no-app'],
turbo: [process.env.TURBOPACK ? '--turbo' : '--no-turbo'],

ts: ['--js', '--ts'],
importAlias: [
'--import-alias=@acme/*',
'--import-alias=@/*',
'--no-import-alias',
],
// doesn't affect if the app builds or not
// eslint: ['--eslint', '--no-eslint'],
eslint: ['--eslint'],

srcDir: ['--src-dir', '--no-src-dir'],
tailwind: ['--tailwind', '--no-tailwind'],

// shouldn't affect if the app builds or not
// packageManager: ['--use-npm', '--use-pnpm', '--use-yarn', '--use-bun'],
}

const getPermutations = <T>(items: T[][]): T[][] => {
if (!items.length) return [[]]
const [first, ...rest] = items
const children = getPermutations(rest)
return first.flatMap((value) =>
children.map((child) => [value, ...child])
)
}

const flagPermutations = getPermutations(Object.values(allFlagValues))
const testCases = flagPermutations.map((flags) => ({
name: flags.join(' '),
flags,
}))

let id = 0
it.each(testCases)('$name', async ({ flags }) => {
await useTempDir(async (cwd) => {
const projectName = `cna-matrix-${pagesOrApp}-${id++}`
const { exitCode } = await run(
[projectName, ...flags],
nextTgzFilename,
{
cwd,
}
)
expect(exitCode).toBe(0)

await tryNextDev({
cwd,
projectName,
isApp,
})
})
})
}
)

0 comments on commit 6bb620e

Please sign in to comment.