From f26aebd79aeee5cfd737b5e1f62921b6a1844b01 Mon Sep 17 00:00:00 2001 From: ganesh Date: Sun, 6 Feb 2022 13:23:23 -0500 Subject: [PATCH] refactor: added helper method & enabled middleName testcase for 'uk' locale --- src/name.ts | 40 ++++++++++++++++++++++++---------------- test/name.spec.ts | 18 +++++++----------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/name.ts b/src/name.ts index 02791e96bf9..e7b32e36644 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 e421e2a8bb6..193fb5fe8ac 100644 --- a/test/name.spec.ts +++ b/test/name.spec.ts @@ -265,18 +265,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()', () => {