diff --git a/src/name.ts b/src/name.ts index 4a242449a47..a7269b54c91 100644 --- a/src/name.ts +++ b/src/name.ts @@ -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); @@ -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); @@ -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; + } } diff --git a/test/name.spec.ts b/test/name.spec.ts index 2f466e2c270..901aad2d0d7 100644 --- a/test/name.spec.ts +++ b/test/name.spec.ts @@ -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()', () => {