Skip to content

Commit f26aebd

Browse files
refactor: added helper method & enabled middleName testcase for 'uk' locale
1 parent 5dc664d commit f26aebd

File tree

2 files changed

+31
-27
lines changed

2 files changed

+31
-27
lines changed

src/name.ts

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,7 @@ export class Name {
3535
// some locale datasets ( like ru ) have first_name split by gender. since the name.first_name field does not exist in these datasets,
3636
// we must randomly pick a name from either gender array so faker.name.firstName will return the correct locale data ( and not fallback )
3737

38-
if (typeof gender === 'string') {
39-
if (gender.toLowerCase() === 'male') {
40-
gender = 0;
41-
} else if (gender.toLowerCase() === 'female') {
42-
gender = 1;
43-
}
44-
}
45-
38+
gender = Name.determineGenderByStringParam(gender);
4639
if (typeof gender !== 'number') {
4740
if (typeof this.faker.definitions.name.first_name === 'undefined') {
4841
gender = this.faker.datatype.number(1);
@@ -126,14 +119,7 @@ export class Name {
126119
typeof this.faker.definitions.name.male_middle_name !== 'undefined' &&
127120
typeof this.faker.definitions.name.female_middle_name !== 'undefined'
128121
) {
129-
if (typeof gender === 'string') {
130-
if (gender.toLowerCase() === 'male') {
131-
gender = 0;
132-
} else if (gender.toLowerCase() === 'female') {
133-
gender = 1;
134-
}
135-
}
136-
122+
gender = Name.determineGenderByStringParam(gender);
137123
if (typeof gender !== 'number') {
138124
if (typeof this.faker.definitions.name.middle_name === 'undefined') {
139125
gender = this.faker.datatype.number(1);
@@ -346,4 +332,26 @@ export class Name {
346332
this.faker.definitions.name.title.job
347333
);
348334
}
335+
336+
/**
337+
*
338+
* Determines gender in 0 or 1
339+
*
340+
* @param gender The optional gender to use.
341+
*
342+
* @returns 0 or 1 given a string param of 'male' or 'female' else returns default value
343+
*
344+
* @example Name.determineGenderByStringParam('male') // 0
345+
*
346+
*/
347+
private static determineGenderByStringParam(gender: string | number) {
348+
if (typeof gender === 'string') {
349+
if (gender.toLowerCase() === 'male') {
350+
gender = 0;
351+
} else if (gender.toLowerCase() === 'female') {
352+
gender = 1;
353+
}
354+
}
355+
return gender;
356+
}
349357
}

test/name.spec.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -265,18 +265,14 @@ describe('name', () => {
265265
expect(faker.definitions.name.female_middle_name).toContain(name);
266266
});
267267

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

274-
let name = faker.name.middleName('male');
275-
expect(faker.definitions.name.male_middle_name).toContain(name);
276-
name = faker.name.middleName('female');
277-
expect(faker.definitions.name.female_middle_name).toContain(name);
278-
}
279-
);
271+
let name = faker.name.middleName('male');
272+
expect(faker.definitions.name.male_middle_name).toContain(name);
273+
name = faker.name.middleName('female');
274+
expect(faker.definitions.name.female_middle_name).toContain(name);
275+
});
280276
});
281277

282278
describe('findName()', () => {

0 commit comments

Comments
 (0)