Skip to content

Commit

Permalink
refactor: added helper method & enabled middleName testcase for 'uk' …
Browse files Browse the repository at this point in the history
…locale
  • Loading branch information
ganeshbudhathoki authored and Shinigami92 committed Mar 21, 2022
1 parent 90c509f commit 58e8168
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 27 deletions.
40 changes: 24 additions & 16 deletions src/name.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,7 @@ export class Name {
// some locale datasets ( like ru ) have first_name split by gender. since the name.first_name field does not exist in these datasets,
// we must randomly pick a name from either gender array so faker.name.firstName will return the correct locale data ( and not fallback )

if (typeof gender === 'string') {
if (gender.toLowerCase() === 'male') {
gender = 0;
} else if (gender.toLowerCase() === 'female') {
gender = 1;
}
}

gender = Name.determineGenderByStringParam(gender);
if (typeof gender !== 'number') {
if (typeof this.faker.definitions.name.first_name === 'undefined') {
gender = this.faker.datatype.number(1);
Expand Down Expand Up @@ -126,14 +119,7 @@ export class Name {
typeof this.faker.definitions.name.male_middle_name !== 'undefined' &&
typeof this.faker.definitions.name.female_middle_name !== 'undefined'
) {
if (typeof gender === 'string') {
if (gender.toLowerCase() === 'male') {
gender = 0;
} else if (gender.toLowerCase() === 'female') {
gender = 1;
}
}

gender = Name.determineGenderByStringParam(gender);
if (typeof gender !== 'number') {
if (typeof this.faker.definitions.name.middle_name === 'undefined') {
gender = this.faker.datatype.number(1);
Expand Down Expand Up @@ -346,4 +332,26 @@ export class Name {
this.faker.definitions.name.title.job
);
}

/**
*
* Determines gender in 0 or 1
*
* @param gender The optional gender to use.
*
* @returns 0 or 1 given a string param of 'male' or 'female' else returns default value
*
* @example Name.determineGenderByStringParam('male') // 0
*
*/
private static determineGenderByStringParam(gender: string | number) {
if (typeof gender === 'string') {
if (gender.toLowerCase() === 'male') {
gender = 0;
} else if (gender.toLowerCase() === 'female') {
gender = 1;
}
}
return gender;
}
}
18 changes: 7 additions & 11 deletions test/name.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -267,18 +267,14 @@ describe('name', () => {
expect(faker.definitions.name.female_middle_name).toContain(name);
});

// TODO @Shinigami92 2022-01-30: There is a bug: https://github.com/faker-js/faker/issues/373
it.todo(
'should return a gender-specific middle name when passed a string',
() => {
faker.locale = 'uk';
it('should return a gender-specific middle name when passed a string', () => {
faker.locale = 'uk';

let name = faker.name.middleName('male');
expect(faker.definitions.name.male_middle_name).toContain(name);
name = faker.name.middleName('female');
expect(faker.definitions.name.female_middle_name).toContain(name);
}
);
let name = faker.name.middleName('male');
expect(faker.definitions.name.male_middle_name).toContain(name);
name = faker.name.middleName('female');
expect(faker.definitions.name.female_middle_name).toContain(name);
});
});

describe('findName()', () => {
Expand Down

0 comments on commit 58e8168

Please sign in to comment.