Skip to content

Commit

Permalink
feat: treat unique values on mock (#322)
Browse files Browse the repository at this point in the history
* feat: treat unique values on mock

* fix: fix index.ts nestjs-models-rest

* fix: generating mock function always return an array of object

* fix: update import wording

* fix: finish merge (forgot some merge)

* fix: update test after bad merge

Co-authored-by: Killian Challeau <killian@tractr.net>
Co-authored-by: floross <floross@users.noreply.github.com>
  • Loading branch information
3 people committed Dec 7, 2021
1 parent 078c93a commit 8437c86
Show file tree
Hide file tree
Showing 16 changed files with 384 additions and 104 deletions.
5 changes: 5 additions & 0 deletions libs/generated/hapify.json
Original file line number Diff line number Diff line change
Expand Up @@ -557,6 +557,11 @@
"engine": "hpf",
"input": "one"
},
{
"path": "generated/models/models/{kebab}.dto.ts",
"engine": "hpf",
"input": "one"
},
{
"path": "generated/models/mock/index.ts",
"engine": "hpf",
Expand Down
5 changes: 5 additions & 0 deletions libs/hapify/templates/models/.hapifyrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ module.exports = {
engine: 'hpf',
input: 'one',
},
{
path: 'generated/models/models/{kebab}.dto.ts',
engine: 'hpf',
input: 'one',
},
{
path: 'generated/models/mock/index.ts',
engine: 'hpf',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ import {
<<endif>>

} from 'faker';


<<if Fields unique>>
import { <<Model pascal>>UniqueValues } from './../models';
<<endif>>



<<for Fields field>>
<<if field not entity>>
Expand Down Expand Up @@ -70,6 +77,60 @@ export function mock<<Model pascal>>Factory(override: Partial< <<Model pascal>>
};
}


export function mock<<Model pascal>>sFactory(override: Partial< <<Model pascal>> > = {}, quantity: number = 1): <<Model pascal>>[] {
<<if Fields unique>>
const uniqueValues: <<Model pascal>>UniqueValues = {
<<for Fields unique field>>
<<if field not entity>>
<<field camel>>:[],
<<else>>
<<field camel>>Id: [],
<<endif>>
<<endfor>>
};
return [...Array(quantity)].map(() => {
let tmp<<Model pascal>> = mock<<Model pascal>>Factory(override);
while (
<<<root.f.unique.forEach((unique,index) => {>>>
(
<<<if(unique.type === 'entity'){>>>
tmp<<Model pascal>>.<<unique camel>>Id && uniqueValues.<<unique camel>>Id.includes(tmp<<Model pascal>>.<<unique camel>>Id))
<<<}else{>>>
uniqueValues.<<unique camel>>.includes(tmp<<Model pascal>>.<<unique camel>>))
<<<}>>>
<<<if(index < root.f.unique.length - 1){>>>
||
<<<}>>>
<<<})>>>
) {
<<for Fields unique field>>
<<if field not entity>>
if(override.<<field camel>>) {
override.<<field camel>> = mock<<Model pascal>><<field pascal>>Factory();
}
<<else>>
if(override.<<field camel>>Id) {
override.<<field camel>>Id = mock<<Model pascal>><<field pascal>>IdFactory();
}
<<endif>>
<<endfor>>
tmp<<Model pascal>> = mock<<Model pascal>>Factory(override);
}
<<for Fields unique field>>
<<if field not entity>>
uniqueValues.<<field camel>>.push(tmp<<Model pascal>>.<<field camel>>);
<<else>>
if(tmp<<Model pascal>>.<<field camel>>Id) uniqueValues.<<field camel>>Id.push(tmp<<Model pascal>>.<<field camel>>Id);
<<endif>>
<<endfor>>
return tmp<<Model pascal>>;
});
<<else>>
return [...Array(quantity)].map(() => mock<<Model pascal>>Factory(override));
<<endif>>
}

<<<
function getBaseFaker(f) {
if (f.primary && f.type === 'string') return 'datatype.uuid()';
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<<if Fields unique>>
export type <<Model pascal>>UniqueValues = {
<<for Fields unique field>>
<<if field not entity>>
<<field camel>>: <<=getType(field)>>[],
<<else>>
<<field camel>>Id: string[];
<<endif>>
<<endfor>>
};
<<endif>>
<<<
function getType(f) {
return f.type;
}
>>>
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
<<for Models model>>
export * from './<<model kebab>>';
<<if model.properties.hasUnique>>
export * from './<<model kebab>>.dto';
<<endif>>
<<endfor>>
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
} from '../../mock';

import {
mock<<Model pascal>>Factory,
mock<<Model pascal>>sFactory,
} from '../../../models/mock';
import {
<<Model constant>>_DATABASE_SERVICE,
Expand Down Expand Up @@ -45,7 +45,7 @@ describe('<<Model pascal>>DatabaseService', () => {
describe('findUnique', () => {
it('should map to DatabaseService.findUnique', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>FindUniqueArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mockedDatabaseService.<<Model camel>>.findUnique as jest.Mock).mockReturnValueOnce(
<<Model camel>>
);
Expand All @@ -59,7 +59,7 @@ describe('<<Model pascal>>DatabaseService', () => {
describe('findFirst', () => {
it('should map to DatabaseService.findFirst', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>FindFirstArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mockedDatabaseService.<<Model camel>>.findFirst as jest.Mock).mockReturnValueOnce(
<<Model camel>>
);
Expand All @@ -73,7 +73,7 @@ describe('<<Model pascal>>DatabaseService', () => {
describe('findMany', () => {
it('should map to DatabaseService.findMany', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>FindManyArgs;
const <<Model camel>> = [...Array(3)].map(() => mock<<Model pascal>>Factory());
const <<Model camel>> = mock<<Model pascal>>sFactory({},3);
(mockedDatabaseService.<<Model camel>>.findMany as jest.Mock).mockReturnValueOnce(
<<Model camel>>
);
Expand All @@ -87,7 +87,7 @@ describe('<<Model pascal>>DatabaseService', () => {
describe('create', () => {
it('should map to DatabaseService.create', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>CreateArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mockedDatabaseService.<<Model camel>>.create as jest.Mock).mockReturnValueOnce(
<<Model camel>>
);
Expand All @@ -101,7 +101,7 @@ describe('<<Model pascal>>DatabaseService', () => {
describe('update', () => {
it('should map to DatabaseService.update', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>UpdateArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mockedDatabaseService.<<Model camel>>.update as jest.Mock).mockReturnValueOnce(
<<Model camel>>
);
Expand All @@ -115,7 +115,7 @@ describe('<<Model pascal>>DatabaseService', () => {
describe('updateMany', () => {
it('should map to DatabaseService.updateMany', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>UpdateManyArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mockedDatabaseService.<<Model camel>>.updateMany as jest.Mock).mockReturnValueOnce(
<<Model camel>>
);
Expand All @@ -129,7 +129,7 @@ describe('<<Model pascal>>DatabaseService', () => {
describe('upsert', () => {
it('should map to DatabaseService.upsert', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>UpsertArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mockedDatabaseService.<<Model camel>>.upsert as jest.Mock).mockReturnValueOnce(
<<Model camel>>
);
Expand All @@ -143,7 +143,7 @@ describe('<<Model pascal>>DatabaseService', () => {
describe('delete', () => {
it('should map to DatabaseService.delete', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>DeleteArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mockedDatabaseService.<<Model camel>>.delete as jest.Mock).mockReturnValueOnce(
<<Model camel>>
);
Expand All @@ -157,7 +157,7 @@ describe('<<Model pascal>>DatabaseService', () => {
describe('deleteMany', () => {
it('should map to DatabaseService.deleteMany', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>DeleteManyArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mockedDatabaseService.<<Model camel>>.deleteMany as jest.Mock).mockReturnValueOnce(
<<Model camel>>
);
Expand All @@ -171,7 +171,7 @@ describe('<<Model pascal>>DatabaseService', () => {
describe('count', () => {
it('should map to DatabaseService.count', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>CountArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mockedDatabaseService.<<Model camel>>.count as jest.Mock).mockReturnValueOnce(
<<Model camel>>
);
Expand All @@ -185,7 +185,7 @@ describe('<<Model pascal>>DatabaseService', () => {
describe('aggregate', () => {
it('should map to DatabaseService.aggregate', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>AggregateArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mockedDatabaseService.<<Model camel>>.aggregate as jest.Mock).mockReturnValueOnce(
<<Model camel>>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {
mock<<Model pascal>>DatabaseServiceFactory,
} from '../../mock';
import {
mock<<Model pascal>>Factory,
mock<<Model pascal>>sFactory,
} from '../../../models/mock';
import {
<<Model constant>>_DATABASE_SERVICE,
Expand Down Expand Up @@ -37,7 +37,7 @@ describe('<<Model pascal>>Service', () => {
describe('create', () => {
it('should map to <<Model pascal>>DatabaseService.create', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>CreateArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mocked<<Model pascal>>DatabaseService.create as jest.Mock).mockReturnValueOnce(<<Model camel>>);
const result = await <<Model camel>>Service.create(args);
expect(result).toEqual(<<Model camel>>);
Expand All @@ -49,7 +49,7 @@ describe('<<Model pascal>>Service', () => {
describe('findUnique', () => {
it('should map to <<Model pascal>>DatabaseService.findUnique', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>FindUniqueArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mocked<<Model pascal>>DatabaseService.findUnique as jest.Mock).mockReturnValueOnce(<<Model camel>>);
const result = await <<Model camel>>Service.findUnique(args);
expect(result).toEqual(<<Model camel>>);
Expand All @@ -61,7 +61,7 @@ describe('<<Model pascal>>Service', () => {
describe('findMany', () => {
it('should map to <<Model pascal>>DatabaseService.findMany', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>FindManyArgs;
const <<Model camel>> = [...Array(3)].map(() => mock<<Model pascal>>Factory());
const <<Model camel>> = mock<<Model pascal>>sFactory({},3);
(mocked<<Model pascal>>DatabaseService.findMany as jest.Mock).mockReturnValueOnce(<<Model camel>>);
const result = await <<Model camel>>Service.findMany(args);
expect(result).toEqual(<<Model camel>>);
Expand All @@ -85,7 +85,7 @@ describe('<<Model pascal>>Service', () => {
describe('update', () => {
it('should map to <<Model pascal>>DatabaseService.update', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>UpdateArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mocked<<Model pascal>>DatabaseService.update as jest.Mock).mockReturnValueOnce(<<Model camel>>);
const result = await <<Model camel>>Service.update(args);
expect(result).toEqual(<<Model camel>>);
Expand All @@ -97,7 +97,7 @@ describe('<<Model pascal>>Service', () => {
describe('upsert', () => {
it('should map to <<Model pascal>>DatabaseService.upsert', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>UpsertArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mocked<<Model pascal>>DatabaseService.upsert as jest.Mock).mockReturnValueOnce(<<Model camel>>);
const result = await <<Model camel>>Service.upsert(args);
expect(result).toEqual(<<Model camel>>);
Expand All @@ -109,7 +109,7 @@ describe('<<Model pascal>>Service', () => {
describe('delete', () => {
it('should map to <<Model pascal>>DatabaseService.delete', async () => {
const args = ('args' as unknown) as Prisma.<<Model pascal>>DeleteArgs;
const <<Model camel>> = mock<<Model pascal>>Factory();
const <<Model camel>> = mock<<Model pascal>>sFactory();
(mocked<<Model pascal>>DatabaseService.delete as jest.Mock).mockReturnValueOnce(<<Model camel>>);
const result = await <<Model camel>>Service.delete(args);
expect(result).toEqual(<<Model camel>>);
Expand Down
Loading

0 comments on commit 8437c86

Please sign in to comment.