129 lines
3.6 KiB
TypeScript

import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
import {
Tree,
readProjectConfiguration,
readJson,
updateJson,
joinPathFragments,
writeJson,
} from '@nx/devkit';
import type { Linter as ESLint } from 'eslint';
import { Linter } from '@nx/eslint';
import generator from './generator';
import pluginGenerator from '../plugin/plugin';
import generatorGenerator from '../generator/generator';
import executorGenerator from '../executor/executor';
import { PackageJson } from 'nx/src/utils/package-json';
describe('lint-checks generator', () => {
let tree: Tree;
beforeEach(async () => {
tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
await pluginGenerator(tree, {
name: 'plugin',
importPath: '@acme/plugin',
compiler: 'tsc',
linter: Linter.EsLint,
skipFormat: false,
skipTsConfig: false,
skipLintChecks: true, // we manually call it s.t. we can update config files first
unitTestRunner: 'jest',
});
await generatorGenerator(tree, {
name: 'my-generator',
project: 'plugin',
unitTestRunner: 'jest',
skipLintChecks: true,
});
await executorGenerator(tree, {
name: 'my-executor',
project: 'plugin',
unitTestRunner: 'jest',
includeHasher: false,
skipLintChecks: true,
});
});
it('should update configuration files for default plugin', async () => {
await generator(tree, { projectName: 'plugin' });
const projectConfig = readProjectConfiguration(tree, 'plugin');
const eslintConfig: ESLint.Config = readJson(
tree,
`${projectConfig.root}/.eslintrc.json`
);
expect(eslintConfig.overrides).toContainEqual(
expect.objectContaining({
files: expect.arrayContaining([
'./executors.json',
'./package.json',
'./generators.json',
]),
rules: {
'@nx/nx-plugin-checks': 'error',
},
})
);
});
it('should not duplicate configuration', async () => {
await generator(tree, { projectName: 'plugin' });
await generator(tree, { projectName: 'plugin' });
const projectConfig = readProjectConfiguration(tree, 'plugin');
const eslintConfig: ESLint.Config = readJson(
tree,
`${projectConfig.root}/.eslintrc.json`
);
expect(
eslintConfig.overrides.filter((x) => '@nx/nx-plugin-checks' in x.rules)
).toHaveLength(1);
});
it('should update configuration files for angular-style plugin', async () => {
const startingProjectConfig = readProjectConfiguration(tree, 'plugin');
updateJson(
tree,
joinPathFragments(startingProjectConfig.root, 'package.json'),
(json: PackageJson) => {
json.schematics = './collection.json';
delete json.generators;
json.builders = './builders.json';
delete json.executors;
json['ng-update'] = './migrations.json';
return json;
}
);
writeJson(
tree,
joinPathFragments(startingProjectConfig.root, 'migrations.json'),
{}
);
await generator(tree, { projectName: 'plugin' });
const projectConfig = readProjectConfiguration(tree, 'plugin');
const eslintConfig: ESLint.Config = readJson(
tree,
`${projectConfig.root}/.eslintrc.json`
);
expect(eslintConfig.overrides).toContainEqual(
expect.objectContaining({
files: expect.arrayContaining([
'./collection.json',
'./package.json',
'./builders.json',
'./migrations.json',
]),
rules: {
'@nx/nx-plugin-checks': 'error',
},
})
);
});
});