2022-11-23 15:45:13 -05:00

184 lines
5.4 KiB
TypeScript

import { Tree, readJson, readProjectConfiguration } from '@nrwl/devkit';
import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing';
import { executorGenerator } from './executor';
import { pluginGenerator } from '../plugin/plugin';
import { libraryGenerator } from '@nrwl/js';
describe('NxPlugin Executor Generator', () => {
let tree: Tree;
let projectName: string;
beforeEach(async () => {
projectName = 'my-plugin';
tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
await pluginGenerator(tree, {
name: projectName,
} as any);
});
it('should generate files', async () => {
await executorGenerator(tree, {
project: projectName,
name: 'my-executor',
unitTestRunner: 'jest',
includeHasher: false,
});
expect(
tree.exists('libs/my-plugin/src/executors/my-executor/schema.d.ts')
).toBeTruthy();
expect(
tree.exists('libs/my-plugin/src/executors/my-executor/schema.json')
).toBeTruthy();
expect(
tree.exists('libs/my-plugin/src/executors/my-executor/executor.ts')
).toBeTruthy();
expect(
tree.exists('libs/my-plugin/src/executors/my-executor/executor.spec.ts')
).toBeTruthy();
});
it('should update executors.json', async () => {
await executorGenerator(tree, {
project: projectName,
name: 'my-executor',
description: 'my-executor description',
unitTestRunner: 'jest',
includeHasher: false,
});
const executorJson = readJson(tree, 'libs/my-plugin/executors.json');
expect(executorJson.executors['my-executor'].implementation).toEqual(
'./src/executors/my-executor/executor'
);
expect(executorJson.executors['my-executor'].schema).toEqual(
'./src/executors/my-executor/schema.json'
);
expect(executorJson.executors['my-executor'].description).toEqual(
'my-executor description'
);
});
it('should generate default description', async () => {
await executorGenerator(tree, {
project: projectName,
name: 'my-executor',
unitTestRunner: 'jest',
includeHasher: false,
});
const executorsJson = readJson(tree, 'libs/my-plugin/executors.json');
expect(executorsJson.executors['my-executor'].description).toEqual(
'my-executor executor'
);
});
it('should generate custom description', async () => {
await executorGenerator(tree, {
project: projectName,
name: 'my-executor',
description: 'my-executor custom description',
unitTestRunner: 'jest',
includeHasher: false,
});
const executorsJson = readJson(tree, 'libs/my-plugin/executors.json');
expect(executorsJson.executors['my-executor'].description).toEqual(
'my-executor custom description'
);
});
it('should create executors.json if it is not present', async () => {
await libraryGenerator(tree, {
name: 'test-js-lib',
buildable: true,
});
const libConfig = readProjectConfiguration(tree, 'test-js-lib');
await executorGenerator(tree, {
project: 'test-js-lib',
includeHasher: false,
name: 'test-executor',
unitTestRunner: 'jest',
});
expect(() => tree.exists(`${libConfig.root}/executors.json`)).not.toThrow();
expect(readJson(tree, `${libConfig.root}/package.json`).executors).toBe(
'executors.json'
);
});
describe('--unitTestRunner', () => {
describe('none', () => {
it('should not generate unit test files', async () => {
await executorGenerator(tree, {
project: projectName,
name: 'my-executor',
description: 'my-executor description',
unitTestRunner: 'none',
includeHasher: true,
});
expect(
tree.exists(
'libs/my-plugin/src/executors/my-executor/executor.spec.ts'
)
).toBeFalsy();
expect(
tree.exists('libs/my-plugin/src/executors/my-executor/hasher.spec.ts')
).toBeFalsy();
});
});
});
describe('--includeHasher', () => {
it('should generate hasher files', async () => {
await executorGenerator(tree, {
project: projectName,
name: 'my-executor',
includeHasher: true,
unitTestRunner: 'jest',
});
expect(
tree.exists('libs/my-plugin/src/executors/my-executor/hasher.spec.ts')
).toBeTruthy();
expect(
tree
.read('libs/my-plugin/src/executors/my-executor/hasher.ts')
.toString()
).toMatchInlineSnapshot(`
"import { CustomHasher } from '@nrwl/devkit';
/**
* This is a boilerplate custom hasher that matches
* the default Nx hasher. If you need to extend the behavior,
* you can consume workspace details from the context.
*/
export const myExecutorHasher: CustomHasher = async (task, context) => {
return context.hasher.hashTask(task)
};
export default myExecutorHasher;
"
`);
});
it('should update executors.json', async () => {
await executorGenerator(tree, {
project: projectName,
name: 'my-executor',
includeHasher: true,
unitTestRunner: 'jest',
});
const executorsJson = readJson(tree, 'libs/my-plugin/executors.json');
expect(executorsJson.executors['my-executor'].hasher).toEqual(
'./src/executors/my-executor/hasher'
);
});
});
});