Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(helpers): allow empty string in fake #1679

Merged
merged 6 commits into from
Dec 25, 2022
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
12 changes: 2 additions & 10 deletions src/modules/helpers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ export class HelpersModule {
*
* It is also NOT possible to use any non-faker methods or plain javascript in such patterns.
*
* @param pattern The pattern string that will get interpolated. Must not be empty.
* @param pattern The pattern string that will get interpolated.
*
* @see faker.helpers.mustache() to use custom functions for resolution.
*
Expand Down Expand Up @@ -621,7 +621,7 @@ export class HelpersModule {
*
* It is also NOT possible to use any non-faker methods or plain javascript in such patterns.
*
* @param pattern The pattern string that will get interpolated. Must not be empty. If an array is passed, a random element will be picked and interpolated.
* @param pattern The pattern string that will get interpolated. If an array is passed, a random element will be picked and interpolated.
*
* @see faker.helpers.mustache() to use custom functions for resolution.
*
Expand All @@ -645,10 +645,6 @@ export class HelpersModule {
throw new FakerError('Array of pattern strings cannot be empty.');
}
}
// if incoming str parameter is not provided, return error message
if (pattern.length === 0) {
throw new FakerError('Pattern string cannot be empty.');
}

// find first matching {{ and }}
const start = pattern.search(/{{[a-z]/);
Expand Down Expand Up @@ -721,10 +717,6 @@ export class HelpersModule {
const res =
pattern.substring(0, start) + result + pattern.substring(end + 2);

if (res === '') {
return '';
}

// return the response recursively until we are done finding all tags
return this.fake(res);
}
Expand Down
6 changes: 6 additions & 0 deletions test/__snapshots__/helpers.spec.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ exports[`helpers > 42 > fake > with a dynamic template 1`] = `"my string: Cky2ei

exports[`helpers > 42 > fake > with a static template 1`] = `"my test string"`;

exports[`helpers > 42 > fake > with empty string 1`] = `""`;

exports[`helpers > 42 > fake > with multiple dynamic templates 1`] = `"Sandy"`;

exports[`helpers > 42 > fake > with multiple static templates 1`] = `"B"`;
Expand Down Expand Up @@ -216,6 +218,8 @@ exports[`helpers > 1211 > fake > with a dynamic template 1`] = `"my string: wKti

exports[`helpers > 1211 > fake > with a static template 1`] = `"my test string"`;

exports[`helpers > 1211 > fake > with empty string 1`] = `""`;

exports[`helpers > 1211 > fake > with multiple dynamic templates 1`] = `"La Crosse"`;

exports[`helpers > 1211 > fake > with multiple static templates 1`] = `"C"`;
Expand Down Expand Up @@ -395,6 +399,8 @@ exports[`helpers > 1337 > fake > with a dynamic template 1`] = `"my string: 9U/4

exports[`helpers > 1337 > fake > with a static template 1`] = `"my test string"`;

exports[`helpers > 1337 > fake > with empty string 1`] = `""`;

exports[`helpers > 1337 > fake > with multiple dynamic templates 1`] = `"U/4:SK$>6Q"`;

exports[`helpers > 1337 > fake > with multiple static templates 1`] = `"A"`;
Expand Down
14 changes: 7 additions & 7 deletions test/helpers.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,8 @@ describe('helpers', () => {
});

t.describe('fake', (t) => {
t.it('with a static template', 'my test string')
t.it('with empty string', '')
.it('with a static template', 'my test string')
.it('with a dynamic template', 'my string: {{string.sample}}')
.it('with multiple static templates', ['A', 'B', 'C'])
.it('with multiple dynamic templates', [
Expand Down Expand Up @@ -555,6 +556,11 @@ describe('helpers', () => {
});

describe('fake()', () => {
it('does allow empty string input', () => {
const actual = faker.helpers.fake('');
expect(actual).toBe('');
});

it('replaces a token with a random value for a method without parentheses', () => {
const actual = faker.helpers.fake('{{string.numeric}}');
expect(actual).toMatch(/^\d$/);
Expand Down Expand Up @@ -602,12 +608,6 @@ describe('helpers', () => {
expect(actual).toMatch(/^\d{5}$/);
});

it('does not allow empty string parameters', () => {
expect(() => faker.helpers.fake('')).toThrowError(
new FakerError('Pattern string cannot be empty.')
);
});

it('does not allow empty array parameters', () => {
expect(() => faker.helpers.fake([])).toThrowError(
new FakerError('Array of pattern strings cannot be empty.')
Expand Down