nx/packages/devkit/src/generators/artifact-name-and-directory-utils.spec.ts

876 lines
28 KiB
TypeScript

import * as enquirer from 'enquirer';
import { addProjectConfiguration } from 'nx/src/devkit-exports';
import { createTreeWithEmptyWorkspace } from 'nx/src/generators/testing-utils/create-tree-with-empty-workspace';
import type { Tree } from 'nx/src/generators/tree';
import {
determineArtifactNameAndDirectoryOptions,
setCwd,
} from './artifact-name-and-directory-utils';
describe('determineArtifactNameAndDirectoryOptions', () => {
let tree: Tree;
let originalInteractiveValue;
let originalCIValue;
let originalIsTTYValue;
let originalInitCwd;
function ensureInteractiveMode() {
process.env.NX_INTERACTIVE = 'true';
process.env.CI = 'false';
process.stdout.isTTY = true;
}
function restoreOriginalInteractiveMode() {
process.env.NX_INTERACTIVE = originalInteractiveValue;
process.env.CI = originalCIValue;
process.stdout.isTTY = originalIsTTYValue;
}
function restoreCwd() {
if (originalInitCwd === undefined) {
delete process.env.INIT_CWD;
} else {
process.env.INIT_CWD = originalInitCwd;
}
}
beforeEach(() => {
tree = createTreeWithEmptyWorkspace();
setCwd('');
jest.clearAllMocks();
originalInteractiveValue = process.env.NX_INTERACTIVE;
originalCIValue = process.env.CI;
originalIsTTYValue = process.stdout.isTTY;
originalInitCwd = process.env.INIT_CWD;
});
it('should accept a derivedDirectory which is relative to the project source root', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
sourceRoot: 'apps/app1/src',
projectType: 'application',
});
const res = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
directory: 'components',
derivedDirectory: 'components',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
expect(res.filePath).toEqual(
'apps/app1/src/components/my-component/my-component.ts'
);
});
it('should accept a derivedDirectory which is relative to the project root', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const res = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
directory: 'components',
derivedDirectory: 'components',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
expect(res.filePath).toEqual(
'apps/app1/components/my-component/my-component.ts'
);
});
it('should throw an error when the resolver directory is not under any project root', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
setCwd('some/path');
await expect(
determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
})
).rejects.toThrowErrorMatchingInlineSnapshot(
`"The current working directory "some/path" does not exist under any project root. Please make sure to navigate to a location or provide a directory that exists under a project root."`
);
restoreCwd();
});
it('should throw an error when the provided project does not exist', async () => {
await expect(
determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
project: 'app1',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
})
).rejects.toThrowErrorMatchingInlineSnapshot(
`"The provided project "app1" does not exist! Please provide an existing project name."`
);
});
it('should throw when receiving a path as the name and a directory', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
await expect(
determineArtifactNameAndDirectoryOptions(tree, {
name: 'apps/app1/foo/bar/myComponent',
directory: 'foo/bar',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
})
).rejects.toThrowErrorMatchingInlineSnapshot(
`"You can't specify both a directory (foo/bar) and a name with a directory path (apps/app1/foo/bar/myComponent). Please specify either a directory or a name with a directory path."`
);
});
describe('as-provided', () => {
it('should return options as provided when there is a project at the cwd', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
setCwd('apps/app1');
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
nameAndDirectoryFormat: 'as-provided',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1',
fileName: 'myComponent',
filePath: 'apps/app1/myComponent.ts',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
restoreCwd();
});
it('should not duplicate the cwd when the provided directory starts with the cwd and format is "as-provided"', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
setCwd('apps/app1');
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
directory: 'apps/app1',
nameAndDirectoryFormat: 'as-provided',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1',
fileName: 'myComponent',
filePath: 'apps/app1/myComponent.ts',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
restoreCwd();
});
it('should return the options as provided when directory is provided', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
directory: 'apps/app1',
nameAndDirectoryFormat: 'as-provided',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1',
fileName: 'myComponent',
filePath: 'apps/app1/myComponent.ts',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
});
it(`should handle window's style paths correctly`, async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
directory: 'apps\\app1',
nameAndDirectoryFormat: 'as-provided',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1',
fileName: 'myComponent',
filePath: 'apps/app1/myComponent.ts',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
});
it('should ignore the project and use the provided directory', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
addProjectConfiguration(tree, 'app2', {
root: 'apps/app2',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
project: 'app2',
directory: 'apps/app1/foo/bar',
nameAndDirectoryFormat: 'as-provided',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/foo/bar',
fileName: 'myComponent',
filePath: 'apps/app1/foo/bar/myComponent.ts',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
});
it('should support receiving a path as the name', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'apps/app1/foo/bar/myComponent',
nameAndDirectoryFormat: 'as-provided',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/foo/bar',
fileName: 'myComponent',
filePath: 'apps/app1/foo/bar/myComponent.ts',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
});
it('should support receiving a suffix', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
suffix: 'component',
directory: 'apps/app1',
nameAndDirectoryFormat: 'as-provided',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1',
fileName: 'myComponent.component',
filePath: 'apps/app1/myComponent.component.ts',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
});
it('should support receiving a fileName', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
fileName: 'myComponent.component',
directory: 'apps/app1',
nameAndDirectoryFormat: 'as-provided',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1',
fileName: 'myComponent.component',
filePath: 'apps/app1/myComponent.component.ts',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
});
it('should ignore "--pascalCaseFile"', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
pascalCaseFile: true,
directory: 'apps/app1',
nameAndDirectoryFormat: 'as-provided',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1',
fileName: 'myComponent',
filePath: 'apps/app1/myComponent.ts',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
});
it('should ignore "--pascalCaseDirectory"', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
pascalCaseDirectory: true,
directory: 'apps/app1',
nameAndDirectoryFormat: 'as-provided',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1',
fileName: 'myComponent',
filePath: 'apps/app1/myComponent.ts',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
});
it('should support receiving a different file extension', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
fileExtension: 'tsx',
directory: 'apps/app1',
nameAndDirectoryFormat: 'as-provided',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1',
fileName: 'myComponent',
filePath: 'apps/app1/myComponent.tsx',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
});
});
describe('derived', () => {
it('should infer project and return options when project is not provided and there is a project at the cwd', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
setCwd('apps/app1');
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/src/app/my-component',
fileName: 'my-component',
filePath: 'apps/app1/src/app/my-component/my-component.ts',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
restoreCwd();
});
it('should support receiving a directory correctly under the inferred project root', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
directory: 'apps/app1',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/my-component',
fileName: 'my-component',
filePath: 'apps/app1/my-component/my-component.ts',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
});
it(`should handle window's style paths correctly`, async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
directory: 'apps\\app1',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/my-component',
fileName: 'my-component',
filePath: 'apps/app1/my-component/my-component.ts',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
});
it('should support receiving a project', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
project: 'app1',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/src/app/my-component',
fileName: 'my-component',
filePath: 'apps/app1/src/app/my-component/my-component.ts',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
});
it('should throw when the provided directory is not under the provided project root', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
await expect(
determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
project: 'app1',
directory: 'foo/bar',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
})
).rejects.toThrowErrorMatchingInlineSnapshot(
`"The provided directory "foo/bar" is not under the provided project root "apps/app1". Please provide a directory that is under the provided project root or use the "as-provided" format and only provide the directory."`
);
});
it('should support receiving a path as the name', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'foo/bar/myComponent',
project: 'app1',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/src/app/foo/bar/my-component',
fileName: 'my-component',
filePath: 'apps/app1/src/app/foo/bar/my-component/my-component.ts',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
});
it('should throw when `--disallowPathInNameForDerived` and receiving a path as the name', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
await expect(
determineArtifactNameAndDirectoryOptions(tree, {
name: 'apps/app1/foo/bar/myComponent',
disallowPathInNameForDerived: true,
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
})
).rejects.toThrowErrorMatchingInlineSnapshot(
`"The provided name "apps/app1/foo/bar/myComponent" contains a path and this is not supported by the "@my-org/my-plugin:component" when using the "derived" format. Please provide a name without a path or use the "as-provided" format."`
);
});
it('should support "--flat"', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
flat: true,
project: 'app1',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/src/app',
fileName: 'my-component',
filePath: 'apps/app1/src/app/my-component.ts',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
});
it('should support receiving a suffix', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
suffix: 'component',
project: 'app1',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/src/app/my-component',
fileName: 'my-component.component',
filePath: 'apps/app1/src/app/my-component/my-component.component.ts',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
});
it('should support receiving a fileName', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
fileName: 'myComponent.component',
project: 'app1',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/src/app/my-component',
fileName: 'myComponent.component',
filePath: 'apps/app1/src/app/my-component/myComponent.component.ts',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
});
it('should support "--pascalCaseFile"', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
pascalCaseFile: true,
project: 'app1',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/src/app/my-component',
fileName: 'MyComponent',
filePath: 'apps/app1/src/app/my-component/MyComponent.ts',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
});
it('should support "--pascalCaseDirectory"', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
pascalCaseDirectory: true,
project: 'app1',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/src/app/MyComponent',
fileName: 'my-component',
filePath: 'apps/app1/src/app/MyComponent/my-component.ts',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
});
it('should support receiving a different file extension', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
fileExtension: 'tsx',
project: 'app1',
nameAndDirectoryFormat: 'derived',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(result).toStrictEqual({
artifactName: 'myComponent',
directory: 'apps/app1/src/app/my-component',
fileName: 'my-component',
filePath: 'apps/app1/src/app/my-component/my-component.tsx',
project: 'app1',
nameAndDirectoryFormat: 'derived',
});
});
});
describe('no format', () => {
it('should prompt for the format to use', async () => {
// simulate interactive mode
ensureInteractiveMode();
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const promptSpy = jest
.spyOn(enquirer, 'prompt')
.mockImplementation(() => Promise.resolve({ format: 'as-provided' }));
await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
project: 'app1',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(promptSpy).toHaveBeenCalled();
const promptCallOptions = promptSpy.mock.calls[0][0] as any;
expect(promptCallOptions.choices).toStrictEqual([
{
message: 'As provided: myComponent.ts',
// as-provided ignores the project and uses cwd + directory
// in this case, both are empty
name: 'myComponent.ts',
},
{
message:
'Derived: apps/app1/src/app/my-component/my-component.ts',
name: 'apps/app1/src/app/my-component/my-component.ts',
},
]);
// restore original interactive mode
restoreOriginalInteractiveMode();
});
it('should not prompt and default to "derived" format when running in a non-interactive env', async () => {
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const promptSpy = jest.spyOn(enquirer, 'prompt');
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
project: 'app1',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(promptSpy).not.toHaveBeenCalled();
expect(result.nameAndDirectoryFormat).toBe('derived');
});
it('should not prompt and default to "as-provided" format when providing a directory in the name is disallowed', async () => {
// simulate interactive mode
ensureInteractiveMode();
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
const promptSpy = jest.spyOn(enquirer, 'prompt');
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'apps/app1/myComponent',
project: 'app1',
disallowPathInNameForDerived: true,
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(promptSpy).not.toHaveBeenCalled();
expect(result.nameAndDirectoryFormat).toBe('as-provided');
// restore original interactive mode
restoreOriginalInteractiveMode();
});
it('should not prompt and default to "as-provided" format when the directory is not under the provided project root', async () => {
// simulate interactive mode
ensureInteractiveMode();
addProjectConfiguration(tree, 'app1', {
root: 'apps/app1',
projectType: 'application',
});
addProjectConfiguration(tree, 'app2', {
root: 'apps/app2',
projectType: 'application',
});
const promptSpy = jest.spyOn(enquirer, 'prompt');
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'myComponent',
project: 'app1',
directory: 'apps/app2',
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(promptSpy).not.toHaveBeenCalled();
expect(result.nameAndDirectoryFormat).toBe('as-provided');
// restore original interactive mode
restoreOriginalInteractiveMode();
});
it('should not prompt when the resulting name and directory are the same for both formats', async () => {
// simulate interactive mode
ensureInteractiveMode();
addProjectConfiguration(tree, 'app1', {
root: '.',
projectType: 'application',
});
const promptSpy = jest.spyOn(enquirer, 'prompt');
const result = await determineArtifactNameAndDirectoryOptions(tree, {
name: 'my-component',
directory: 'src/app',
flat: true,
artifactType: 'component',
callingGenerator: '@my-org/my-plugin:component',
});
expect(promptSpy).not.toHaveBeenCalled();
expect(result).toStrictEqual({
artifactName: 'my-component',
directory: 'src/app',
fileName: 'my-component',
filePath: 'src/app/my-component.ts',
project: 'app1',
nameAndDirectoryFormat: 'as-provided',
});
// restore original interactive mode
restoreOriginalInteractiveMode();
});
});
});