nx/packages/linter/src/generators/workspace-rules-project/workspace-rules-project.spec.ts

126 lines
4.0 KiB
TypeScript

import {
addProjectConfiguration,
NxJsonConfiguration,
readJson,
readProjectConfiguration,
Tree,
updateJson,
} from '@nrwl/devkit';
import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing';
import {
lintWorkspaceRulesProjectGenerator,
WORKSPACE_RULES_PROJECT_NAME,
} from './workspace-rules-project';
describe('@nrwl/linter:workspace-rules-project', () => {
let tree: Tree;
beforeEach(() => {
tree = createTreeWithEmptyWorkspace();
});
it('should add lint project files to lint inputs', async () => {
updateJson<NxJsonConfiguration>(tree, 'nx.json', (json) => {
json.targetDefaults = {
lint: {
inputs: ['default', '{workspaceRoot}/.eslintrc.json'],
},
};
return json;
});
await lintWorkspaceRulesProjectGenerator(tree);
expect(
readJson<NxJsonConfiguration>(tree, 'nx.json').targetDefaults.lint.inputs
).toContain('{workspaceRoot}/tools/eslint-rules/**/*');
});
it('should generate the required files', async () => {
await lintWorkspaceRulesProjectGenerator(tree);
expect(tree.read('tools/eslint-rules/index.ts', 'utf-8')).toMatchSnapshot();
expect(
tree.read('tools/eslint-rules/tsconfig.json', 'utf-8')
).toMatchSnapshot();
expect(
tree.read('tools/eslint-rules/tsconfig.lint.json', 'utf-8')
).toMatchSnapshot();
expect(
tree.read('tools/eslint-rules/tsconfig.spec.json', 'utf-8')
).toMatchSnapshot();
expect(
tree.read('tools/eslint-rules/jest.config.ts', 'utf-8')
).toMatchSnapshot();
});
it('should extend from root tsconfig.base.json', async () => {
await lintWorkspaceRulesProjectGenerator(tree);
const tsConfig = readJson(tree, 'tools/eslint-rules/tsconfig.json');
expect(tsConfig.extends).toBe('../../tsconfig.base.json');
});
it('should extend from root tsconfig.json when no tsconfig.base.json', async () => {
tree.rename('tsconfig.base.json', 'tsconfig.json');
await lintWorkspaceRulesProjectGenerator(tree);
const tsConfig = readJson(tree, 'tools/eslint-rules/tsconfig.json');
expect(tsConfig.extends).toBe('../../tsconfig.json');
});
it('should create a project with a test target', async () => {
await lintWorkspaceRulesProjectGenerator(tree);
expect(readProjectConfiguration(tree, WORKSPACE_RULES_PROJECT_NAME))
.toMatchInlineSnapshot(`
Object {
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"root": "tools/eslint-rules",
"sourceRoot": "tools/eslint-rules",
"targets": Object {
"test": Object {
"executor": "@nrwl/jest:jest",
"options": Object {
"jestConfig": "tools/eslint-rules/jest.config.ts",
"passWithNoTests": true,
},
"outputs": Array [
"coverage/tools/eslint-rules",
],
},
},
}
`);
});
it('should not update the required files if the project already exists', async () => {
addProjectConfiguration(tree, WORKSPACE_RULES_PROJECT_NAME, {
root: '',
});
const customIndexContents = `custom index contents`;
tree.write('tools/eslint-rules/index.ts', customIndexContents);
const customTsconfigContents = `custom tsconfig contents`;
tree.write('tools/eslint-rules/tsconfig.json', customTsconfigContents);
tree.write('tools/eslint-rules/tsconfig.lint.json', customTsconfigContents);
tree.write('tools/eslint-rules/tsconfig.spec.json', customTsconfigContents);
await lintWorkspaceRulesProjectGenerator(tree);
expect(tree.read('tools/eslint-rules/index.ts', 'utf-8')).toEqual(
customIndexContents
);
expect(tree.read('tools/eslint-rules/tsconfig.json', 'utf-8')).toEqual(
customTsconfigContents
);
expect(tree.read('tools/eslint-rules/tsconfig.lint.json', 'utf-8')).toEqual(
customTsconfigContents
);
expect(tree.read('tools/eslint-rules/tsconfig.spec.json', 'utf-8')).toEqual(
customTsconfigContents
);
});
});