| import { basename } from 'path' |
| import glob from 'glob' |
| import index from '@next/eslint-plugin-next' |
|
|
| const getRuleNameFromRulePath = (path) => basename(path, '.js') |
| const rulePaths = glob.sync('packages/eslint-plugin-next/dist/rules/*js', { |
| absolute: true, |
| }) |
|
|
| describe('@next/eslint-plugin-next index', () => { |
| it('should include all defined rules and no extra / undefined rules', () => { |
| const rules = rulePaths.map((rulePath) => getRuleNameFromRulePath(rulePath)) |
|
|
| expect(index.rules).toContainAllKeys(rules) |
| }) |
|
|
| it('should have meta information', () => { |
| expect(index.meta).toBeDefined() |
| expect(index.meta.name).toBe('@next/eslint-plugin-next') |
| }) |
|
|
| it('should have proper flat config structure for recommended', () => { |
| const config = index.configs.recommended |
| expect(config.name).toBe('next/recommended') |
| expect(config.rules).toBeDefined() |
| }) |
|
|
| it('should have proper flat config structure for core-web-vitals', () => { |
| const config = index.configs['core-web-vitals'] |
| expect(config.name).toBe('next/core-web-vitals') |
| expect(config.rules).toBeDefined() |
| }) |
|
|
| it('should have legacy recommended config', () => { |
| const config = index.configs['recommended-legacy'] |
| expect(config.plugins).toContain('@next/next') |
| expect(config.rules).toBeDefined() |
| }) |
|
|
| it('should have legacy core-web-vitals config', () => { |
| const config = index.configs['core-web-vitals-legacy'] |
| expect(config.plugins).toContain('@next/next') |
| expect(config.extends).toContain('plugin:@next/next/recommended-legacy') |
| expect(config.rules).toBeDefined() |
| }) |
|
|
| rulePaths.forEach((rulePath) => { |
| let rule = require(rulePath) |
| rule = rule.default ?? rule |
| const ruleName = getRuleNameFromRulePath(rulePath) |
| const { recommended = false } = rule.meta.docs |
|
|
| it(`${ruleName}: recommend should be \`${recommended}\``, () => { |
| expect(`@next/next/${ruleName}` in index.configs.recommended.rules).toBe( |
| recommended |
| ) |
| }) |
| }) |
| }) |
|
|