Skip to content

Commit

Permalink
refactor(provider.factory): keep underscores in path and file name
Browse files Browse the repository at this point in the history
  • Loading branch information
Zlatin Stanimirov committed Mar 6, 2022
1 parent 86e1981 commit 4a87262
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 25 deletions.
89 changes: 66 additions & 23 deletions src/lib/provider/provider.factory.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@ describe('Provider Factory', () => {
name: 'foo',
skipImport: true,
};
const tree: UnitTestTree = await runner.runSchematicAsync('provider', options).toPromise();
const tree: UnitTestTree = await runner
.runSchematicAsync('provider', options)
.toPromise();
const files: string[] = tree.files;
expect(files.find(filename => filename === '/foo.ts')).toBeDefined();
expect(files.find(filename => filename === '/foo.spec.ts')).toBeDefined();
expect(files.find((filename) => filename === '/foo.ts')).toBeDefined();
expect(files.find((filename) => filename === '/foo.spec.ts')).toBeDefined();
expect(tree.readContent('/foo.ts')).toEqual(
"import { Injectable } from '@nestjs/common';\n" +
'\n' +
Expand All @@ -34,11 +36,13 @@ describe('Provider Factory', () => {
name: 'bar/foo',
skipImport: true,
};
const tree: UnitTestTree = await runner.runSchematicAsync('provider', options).toPromise();
const tree: UnitTestTree = await runner
.runSchematicAsync('provider', options)
.toPromise();
const files: string[] = tree.files;
expect(files.find(filename => filename === '/bar/foo.ts')).toBeDefined();
expect(files.find((filename) => filename === '/bar/foo.ts')).toBeDefined();
expect(
files.find(filename => filename === '/bar/foo.spec.ts'),
files.find((filename) => filename === '/bar/foo.spec.ts'),
).toBeDefined();
expect(tree.readContent('/bar/foo.ts')).toEqual(
"import { Injectable } from '@nestjs/common';\n" +
Expand All @@ -53,11 +57,13 @@ describe('Provider Factory', () => {
path: 'bar',
skipImport: true,
};
const tree: UnitTestTree = await runner.runSchematicAsync('provider', options).toPromise();
const tree: UnitTestTree = await runner
.runSchematicAsync('provider', options)
.toPromise();
const files: string[] = tree.files;
expect(files.find(filename => filename === '/bar/foo.ts')).toBeDefined();
expect(files.find((filename) => filename === '/bar/foo.ts')).toBeDefined();
expect(
files.find(filename => filename === '/bar/foo.spec.ts'),
files.find((filename) => filename === '/bar/foo.spec.ts'),
).toBeDefined();
expect(tree.readContent('/bar/foo.ts')).toEqual(
"import { Injectable } from '@nestjs/common';\n" +
Expand All @@ -66,16 +72,18 @@ describe('Provider Factory', () => {
'export class Foo {}\n',
);
});
it('should manage name to dasherize', async () => {
it('should manage name to normalize', async () => {
const options: ProviderOptions = {
name: 'bar-foo',
skipImport: true,
};
const tree: UnitTestTree = await runner.runSchematicAsync('provider', options).toPromise();
const tree: UnitTestTree = await runner
.runSchematicAsync('provider', options)
.toPromise();
const files: string[] = tree.files;
expect(files.find(filename => filename === '/bar-foo.ts')).toBeDefined();
expect(files.find((filename) => filename === '/bar-foo.ts')).toBeDefined();
expect(
files.find(filename => filename === '/bar-foo.spec.ts'),
files.find((filename) => filename === '/bar-foo.spec.ts'),
).toBeDefined();
expect(tree.readContent('/bar-foo.ts')).toEqual(
"import { Injectable } from '@nestjs/common';\n" +
Expand All @@ -84,16 +92,38 @@ describe('Provider Factory', () => {
'export class BarFoo {}\n',
);
});
it('should keep underscores in file name', async () => {
const options: ProviderOptions = {
name: '_bar',
skipImport: true,
};
const tree: UnitTestTree = await runner
.runSchematicAsync('provider', options)
.toPromise();
const files: string[] = tree.files;
expect(files.find((filename) => filename === '/_bar.ts')).toBeDefined();
expect(
files.find((filename) => filename === '/_bar.spec.ts'),
).toBeDefined();
expect(tree.readContent('/_bar.ts')).toEqual(
"import { Injectable } from '@nestjs/common';\n" +
'\n' +
'@Injectable()\n' +
'export class Bar {}\n',
);
});
it('should manage javascript file', async () => {
const options: ProviderOptions = {
name: 'foo',
skipImport: true,
language: 'js',
};
const tree: UnitTestTree = await runner.runSchematicAsync('provider', options).toPromise();
const tree: UnitTestTree = await runner
.runSchematicAsync('provider', options)
.toPromise();
const files: string[] = tree.files;
expect(files.find(filename => filename === '/foo.js')).toBeDefined();
expect(files.find(filename => filename === '/foo.spec.js')).toBeDefined();
expect(files.find((filename) => filename === '/foo.js')).toBeDefined();
expect(files.find((filename) => filename === '/foo.spec.js')).toBeDefined();
expect(tree.readContent('/foo.js')).toEqual(
"import { Injectable } from '@nestjs/common';\n" +
'\n' +
Expand All @@ -105,11 +135,15 @@ describe('Provider Factory', () => {
const app: ApplicationOptions = {
name: '',
};
let tree: UnitTestTree = await runner.runSchematicAsync('application', app).toPromise();
let tree: UnitTestTree = await runner
.runSchematicAsync('application', app)
.toPromise();
const options: ProviderOptions = {
name: 'foo',
};
tree = await runner.runSchematicAsync('provider', options, tree).toPromise();
tree = await runner
.runSchematicAsync('provider', options, tree)
.toPromise();
expect(tree.readContent(normalize('/src/app.module.ts'))).toEqual(
"import { Module } from '@nestjs/common';\n" +
"import { AppController } from './app.controller';\n" +
Expand All @@ -128,7 +162,9 @@ describe('Provider Factory', () => {
const app: ApplicationOptions = {
name: '',
};
let tree: UnitTestTree = await runner.runSchematicAsync('application', app).toPromise();
let tree: UnitTestTree = await runner
.runSchematicAsync('application', app)
.toPromise();
const module: ModuleOptions = {
name: 'foo',
};
Expand All @@ -137,7 +173,9 @@ describe('Provider Factory', () => {
name: 'foo',
path: 'foo',
};
tree = await runner.runSchematicAsync('provider', options, tree).toPromise();
tree = await runner
.runSchematicAsync('provider', options, tree)
.toPromise();
expect(tree.readContent(normalize('/src/foo/foo.module.ts'))).toEqual(
"import { Module } from '@nestjs/common';\n" +
"import { Foo } from './foo';\n" +
Expand All @@ -154,11 +192,16 @@ describe('Provider Factory', () => {
spec: true,
flat: true,
};
const tree: UnitTestTree = await runner.runSchematicAsync('provider', options).toPromise();
const tree: UnitTestTree = await runner
.runSchematicAsync('provider', options)
.toPromise();
const files: string[] = tree.files;

expect(files.find(filename => filename === '/foo.entity.ts')).not.toBeUndefined();
expect(tree.readContent('/foo.entity.ts')).toEqual(`import { Injectable } from '@nestjs/common';
expect(
files.find((filename) => filename === '/foo.entity.ts'),
).not.toBeUndefined();
expect(tree.readContent('/foo.entity.ts'))
.toEqual(`import { Injectable } from '@nestjs/common';
@Injectable()
export class FooEntity {}\n`);
Expand Down
5 changes: 3 additions & 2 deletions src/lib/provider/provider.factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
Tree,
url,
} from '@angular-devkit/schematics';
import { normalizeToKebabOrSnakeCase } from '../../utils/formatting';
import {
DeclarationOptions,
ModuleDeclarator,
Expand Down Expand Up @@ -44,14 +45,14 @@ function transform(options: ProviderOptions): ProviderOptions {
throw new SchematicsException('Option (name) is required.');
}
const location: Location = new NameParser().parse(target);
target.name = strings.dasherize(location.name);
target.name = normalizeToKebabOrSnakeCase(location.name);
if (target.name.includes('.')) {
target.className = strings.classify(target.name).replace('.', '');
} else {
target.className = strings.classify(target.name);
}

target.path = strings.dasherize(location.path);
target.path = normalizeToKebabOrSnakeCase(location.path);
target.language = target.language !== undefined ? target.language : 'ts';

target.path = target.flat
Expand Down

0 comments on commit 4a87262

Please sign in to comment.