Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions src/MockGenerateHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
DataTypes,
EnumProps,
EnumSchema,
GetAdditionalPropertiesProps,
GetArrayOfItemsMockProps,
GetArrayOfOneOfMockProps,
GetDictionaryMockProps,
Expand Down Expand Up @@ -257,6 +258,47 @@ export class MockGenerateHelper {
return { propertyName, value: `" // TODO: Wrong dictionary value",` };
}

getAdditionalPropertiesMock({ propertyName, additionalProperties }: GetAdditionalPropertiesProps): MockArrayProps {
let hasError: boolean;
let mockValue: string | Function | undefined = undefined;

switch (additionalProperties.type) {
case DataTypes.Integer:
hasError = false;
mockValue = () => casual.integer(0, 100);
break;
case DataTypes.Number:
hasError = false;
mockValue = () => casual.double(0, 100);
break;
case DataTypes.String:
hasError = false;
mockValue = () => `'${casual.string}'`;
break;
case DataTypes.Boolean:
hasError = false;
mockValue = 'true';
break;
case DataTypes.Array:
hasError = false;
mockValue = '[]';
break;
default: {
hasError = true;
mockValue = ` /** Error: Invalid additionalProperties.type ${propertyName} */`;
break;
}
}

const result = typeof mockValue === 'function' ? mockValue() : mockValue;
const value = hasError ? `{\n\t ${result} \n}` : `{\n\t ${casual.word}: ${result}, \n}`;

return {
propertyName,
value,
};
}

getAnyMock({ propertyName }: { propertyName: string }): MockArrayProps {
return {
propertyName,
Expand Down
9 changes: 9 additions & 0 deletions src/mockConverter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,15 @@ export const parseSchema = ({ schema, name, DTOs, overrideSchemas }: ParseSchema
);
}

if (!xDictionaryKey && additionalProperties) {
mocks.push(
mockGenerator.getAdditionalPropertiesMock({
propertyName,
additionalProperties,
}),
);
}

if (!type && !$ref && !oneOf) {
mocks.push(mockGenerator.getAnyMock({ propertyName }));
}
Expand Down
5 changes: 5 additions & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,11 @@ export interface GetDictionaryMockProps extends PropertyNameProp {
overrideSchemas?: Array<EnumSchema>;
}

export interface GetAdditionalPropertiesProps extends PropertyNameProp {
propertyName: string;
additionalProperties: { type: string };
}

export interface GetRefTypeMockProps extends PropertyNameProp {
$ref: string;
DTOs: any;
Expand Down
102 changes: 102 additions & 0 deletions tests/__snapshots__/mockConverter.test.ts.snap
Original file line number Diff line number Diff line change
@@ -1,5 +1,107 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Additional properties without dictionary should generate mocks for a type array 1`] = `
"/* eslint-disable @typescript-eslint/no-use-before-define */
/* eslint-disable @typescript-eslint/no-unused-vars */
import {FilterCounters} from './pathToTypes';

export const aFilterCountersAPI = (overrides?: Partial<FilterCounters>): FilterCounters => {
return {
instrumentFilters: {
est: [],
},
...overrides,
};
};

"
`;

exports[`Additional properties without dictionary should generate mocks for a type boolean 1`] = `
"/* eslint-disable @typescript-eslint/no-use-before-define */
/* eslint-disable @typescript-eslint/no-unused-vars */
import {FilterCounters} from './pathToTypes';

export const aFilterCountersAPI = (overrides?: Partial<FilterCounters>): FilterCounters => {
return {
instrumentFilters: {
est: true,
},
...overrides,
};
};

"
`;

exports[`Additional properties without dictionary should generate mocks for a type integer 1`] = `
"/* eslint-disable @typescript-eslint/no-use-before-define */
/* eslint-disable @typescript-eslint/no-unused-vars */
import {FilterCounters} from './pathToTypes';

export const aFilterCountersAPI = (overrides?: Partial<FilterCounters>): FilterCounters => {
return {
instrumentFilters: {
reiciendis: 65,
},
...overrides,
};
};

"
`;

exports[`Additional properties without dictionary should generate mocks for a type invalid 1`] = `
"/* eslint-disable @typescript-eslint/no-use-before-define */
/* eslint-disable @typescript-eslint/no-unused-vars */
import {FilterCounters} from './pathToTypes';

export const aFilterCountersAPI = (overrides?: Partial<FilterCounters>): FilterCounters => {
return {
instrumentFilters: {
/** Error: Invalid additionalProperties.type instrumentFilters */
},
...overrides,
};
};

"
`;

exports[`Additional properties without dictionary should generate mocks for a type number 1`] = `
"/* eslint-disable @typescript-eslint/no-use-before-define */
/* eslint-disable @typescript-eslint/no-unused-vars */
import {FilterCounters} from './pathToTypes';

export const aFilterCountersAPI = (overrides?: Partial<FilterCounters>): FilterCounters => {
return {
instrumentFilters: {
reiciendis: 64.8914810270071,
},
...overrides,
};
};

"
`;

exports[`Additional properties without dictionary should generate mocks for a type string 1`] = `
"/* eslint-disable @typescript-eslint/no-use-before-define */
/* eslint-disable @typescript-eslint/no-unused-vars */
import {FilterCounters} from './pathToTypes';

export const aFilterCountersAPI = (overrides?: Partial<FilterCounters>): FilterCounters => {
return {
instrumentFilters: {
et: 'est reiciendis dolorum neque voluptatibus quo non',
},
...overrides,
};
};

"
`;

exports[`Dictionary type should generate mocks for a "dictionary" type array 1`] = `
"/* eslint-disable @typescript-eslint/no-use-before-define */
/* eslint-disable @typescript-eslint/no-unused-vars */
Expand Down
Loading