From 64dd17be1294f737620484648fb1924aaec192e6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?C=C3=A9dric=20Exbrayat?= Date: Thu, 10 Oct 2024 09:59:39 +0200 Subject: [PATCH] test: re-add eslint unit tests (#575) --- __test__/renderEslint.spec.ts | 101 ++++++++++++++++++++++++++++++++++ utils/renderEslint.ts | 5 +- 2 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 __test__/renderEslint.spec.ts diff --git a/__test__/renderEslint.spec.ts b/__test__/renderEslint.spec.ts new file mode 100644 index 00000000..a36fafd5 --- /dev/null +++ b/__test__/renderEslint.spec.ts @@ -0,0 +1,101 @@ +import { it, describe, expect } from 'vitest' +import { getAdditionalConfigs } from '../utils/renderEslint' + +describe('renderEslint', () => { + it('should get additional dependencies and config with no test flags', () => { + const additionalConfigs = getAdditionalConfigs({ + needsVitest: false, + needsCypress: false, + needsCypressCT: false, + needsPlaywright: false + }) + expect(additionalConfigs).toStrictEqual([]) + }) + + it('should get additional dependencies and config with for vitest', () => { + const additionalConfigs = getAdditionalConfigs({ + needsVitest: true, + needsCypress: false, + needsCypressCT: false, + needsPlaywright: false + }) + expect(additionalConfigs).toHaveLength(1) + const [additionalVitestConfig] = additionalConfigs + expect(additionalVitestConfig.devDependencies['@vitest/eslint-plugin']).not.toBeUndefined() + expect(additionalVitestConfig.afterVuePlugin).toHaveLength(1) + const [additionalVitestPlugin] = additionalVitestConfig.afterVuePlugin! + expect(additionalVitestPlugin.importer).toBe(`import pluginVitest from '@vitest/eslint-plugin'`) + expect(additionalVitestPlugin.content).toContain('...pluginVitest.configs.recommended') + expect(additionalVitestPlugin.content).toContain("files: ['src/**/__tests__/*']") + }) + + it('should get additional dependencies and config with for cypress', () => { + const additionalConfigs = getAdditionalConfigs({ + needsVitest: false, + needsCypress: true, + needsCypressCT: false, + needsPlaywright: false + }) + expect(additionalConfigs).toHaveLength(1) + const [additionalCypressConfig] = additionalConfigs + expect(additionalCypressConfig.devDependencies['eslint-plugin-cypress']).not.toBeUndefined() + expect(additionalCypressConfig.afterVuePlugin).toHaveLength(1) + const [additionalCypressPlugin] = additionalCypressConfig.afterVuePlugin! + expect(additionalCypressPlugin.importer).toBe( + "import pluginCypress from 'eslint-plugin-cypress/flat'" + ) + expect(additionalCypressPlugin.content).toContain('...pluginCypress.configs.recommended') + expect(additionalCypressPlugin.content).toContain( + "'cypress/e2e/**/*.{cy,spec}.{js,ts,jsx,tsx}'" + ) + expect(additionalCypressPlugin.content).toContain("'cypress/support/**/*.{js,ts,jsx,tsx}'") + }) + + it('should get additional dependencies and config with for cypress with component testing', () => { + const additionalConfigs = getAdditionalConfigs({ + needsVitest: false, + needsCypress: true, + needsCypressCT: true, + needsPlaywright: false + }) + expect(additionalConfigs).toHaveLength(1) + const [additionalCypressConfig] = additionalConfigs + expect(additionalCypressConfig.devDependencies['eslint-plugin-cypress']).not.toBeUndefined() + expect(additionalCypressConfig.afterVuePlugin).toHaveLength(1) + const [additionalCypressPlugin] = additionalCypressConfig.afterVuePlugin! + expect(additionalCypressPlugin.importer).toBe( + "import pluginCypress from 'eslint-plugin-cypress/flat'" + ) + expect(additionalCypressPlugin.content).toContain('...pluginCypress.configs.recommended') + expect(additionalCypressPlugin.content).toContain("'**/__tests__/*.{cy,spec}.{js,ts,jsx,tsx}'") + expect(additionalCypressPlugin.content).toContain( + "'cypress/e2e/**/*.{cy,spec}.{js,ts,jsx,tsx}'" + ) + expect(additionalCypressPlugin.content).toContain("'cypress/support/**/*.{js,ts,jsx,tsx}'") + }) + + it('should get additional dependencies and config with for playwright', () => { + const additionalConfigs = getAdditionalConfigs({ + needsVitest: false, + needsCypress: false, + needsCypressCT: false, + needsPlaywright: true + }) + expect(additionalConfigs).toHaveLength(1) + const [additionalPlaywrightConfig] = additionalConfigs + expect( + additionalPlaywrightConfig.devDependencies['eslint-plugin-playwright'] + ).not.toBeUndefined() + expect(additionalPlaywrightConfig.afterVuePlugin).toHaveLength(1) + const [additionalPlaywrightPlugin] = additionalPlaywrightConfig.afterVuePlugin! + expect(additionalPlaywrightPlugin.importer).toBe( + "import pluginPlaywright from 'eslint-plugin-playwright'" + ) + expect(additionalPlaywrightPlugin.content).toContain( + "...pluginPlaywright.configs['flat/recommended']" + ) + expect(additionalPlaywrightPlugin.content).toContain( + "files: ['e2e/**/*.{test,spec}.{js,ts,jsx,tsx}']" + ) + }) +}) diff --git a/utils/renderEslint.ts b/utils/renderEslint.ts index 3a7dc801..ee4d6ae4 100644 --- a/utils/renderEslint.ts +++ b/utils/renderEslint.ts @@ -83,7 +83,7 @@ export function getAdditionalConfigs({ importer: `import pluginVitest from '@vitest/eslint-plugin'`, content: ` { - ...pluginVitest.configs['recommended'], + ...pluginVitest.configs.recommended, files: ['src/**/__tests__/*'], },` } @@ -107,7 +107,8 @@ export function getAdditionalConfigs({ 'cypress/support/**/*.{js,ts,jsx,tsx}' ] .map(JSON.stringify.bind(JSON)) - .join(',\n ')} + .join(',\n ') + .replace(/"/g, "'")} // use single quotes as in the other configs ], },` } -- 2.39.5