Skip to content

Commit 316f61f

Browse files
refactor(name.findName): rename to fullName (#1127)
1 parent ea91fe6 commit 316f61f

3 files changed

Lines changed: 150 additions & 11 deletions

File tree

src/modules/name/index.ts

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { Faker } from '../..';
2+
import { deprecated } from '../../internal/deprecated';
23

34
export enum Gender {
45
female = 'female',
@@ -140,19 +141,55 @@ export class Name {
140141
* @param gender The optional gender to use.
141142
* Can be either `'female'` or `'male'`.
142143
*
144+
* @see faker.name.fullName()
145+
*
143146
* @example
144147
* faker.name.findName() // 'Allen Brown'
145148
* faker.name.findName('Joann') // 'Joann Osinski'
146149
* faker.name.findName('Marcella', '', 'female') // 'Mrs. Marcella Huels'
147150
* faker.name.findName(undefined, 'Beer') // 'Mr. Alfonso Beer'
148151
* faker.name.findName(undefined, undefined, 'male') // 'Fernando Schaefer'
152+
*
153+
* @deprecated Use faker.name.fullName() instead.
149154
*/
150155
findName(firstName?: string, lastName?: string, gender?: GenderType): string {
151-
const normalizedGender: GenderType =
152-
gender ?? this.faker.helpers.arrayElement(['female', 'male']);
156+
deprecated({
157+
deprecated: 'faker.name.findName()',
158+
proposed: 'faker.name.fullName()',
159+
since: '7.4',
160+
until: '8.0',
161+
});
162+
return this.fullName({ firstName, lastName, gender });
163+
}
153164

154-
firstName = firstName || this.firstName(normalizedGender);
155-
lastName = lastName || this.lastName(normalizedGender);
165+
/**
166+
* Generates a random full name.
167+
*
168+
* @param options An options object. Defaults to `{}`.
169+
* @param options.firstName The optional first name to use. If not specified a random one will be chosen.
170+
* @param options.lastName The optional last name to use. If not specified a random one will be chosen.
171+
* @param options.gender The optional gender to use.
172+
* Can be either `'female'` or `'male'`.
173+
*
174+
* @example
175+
* faker.name.fullName() // 'Allen Brown'
176+
* faker.name.fullName('Joann') // 'Joann Osinski'
177+
* faker.name.fullName('Marcella', '', 'female') // 'Mrs. Marcella Huels'
178+
* faker.name.fullName(undefined, 'Beer') // 'Mr. Alfonso Beer'
179+
* faker.name.fullName(undefined, undefined, 'male') // 'Fernando Schaefer'
180+
*/
181+
fullName(
182+
options: {
183+
firstName?: string;
184+
lastName?: string;
185+
gender?: GenderType;
186+
} = {}
187+
): string {
188+
const {
189+
gender = this.faker.helpers.arrayElement(['female', 'male']),
190+
firstName = this.firstName(gender),
191+
lastName = this.lastName(gender),
192+
} = options;
156193

157194
const nameParts: string[] = [];
158195
const prefix = this.faker.helpers.maybe(() => this.prefix(gender), {

test/__snapshots__/name.spec.ts.snap

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ exports[`name > seed: 42 > findName() 1`] = `"Sadie Wiegand"`;
44

55
exports[`name > seed: 42 > firstName() 1`] = `"Garnett"`;
66

7+
exports[`name > seed: 42 > fullName() 1`] = `"Sadie Wiegand"`;
8+
79
exports[`name > seed: 42 > gender() 1`] = `"Gender nonconforming"`;
810

911
exports[`name > seed: 42 > jobArea() 1`] = `"Identity"`;
@@ -26,6 +28,8 @@ exports[`name > seed: 1211 > findName() 1`] = `"Claude Trantow"`;
2628

2729
exports[`name > seed: 1211 > firstName() 1`] = `"Tito"`;
2830

31+
exports[`name > seed: 1211 > fullName() 1`] = `"Claude Trantow"`;
32+
2933
exports[`name > seed: 1211 > gender() 1`] = `"Trigender"`;
3034

3135
exports[`name > seed: 1211 > jobArea() 1`] = `"Factors"`;
@@ -48,6 +52,8 @@ exports[`name > seed: 1337 > findName() 1`] = `"Leona Cronin"`;
4852

4953
exports[`name > seed: 1337 > firstName() 1`] = `"Devyn"`;
5054

55+
exports[`name > seed: 1337 > fullName() 1`] = `"Leona Cronin"`;
56+
5157
exports[`name > seed: 1337 > gender() 1`] = `"Demigender"`;
5258

5359
exports[`name > seed: 1337 > jobArea() 1`] = `"Functionality"`;

test/name.spec.ts

Lines changed: 103 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
22
import { faker } from '../src';
3+
import type { Name } from '../src/modules/name';
34
import { seededRuns } from './support/seededRuns';
45

56
const NON_SEEDED_BASED_RUN = 5;
67

7-
const functionNames = [
8+
const functionNames: (keyof Name)[] = [
9+
'findName',
810
'firstName',
11+
'fullName',
12+
'gender',
13+
'jobArea',
14+
'jobDescriptor',
15+
'jobTitle',
16+
'jobType',
917
'lastName',
1018
'middleName',
11-
'findName',
12-
'jobTitle',
13-
'gender',
1419
'prefix',
1520
'suffix',
16-
'jobDescriptor',
17-
'jobArea',
18-
'jobType',
1921
];
2022

2123
describe('name', () => {
@@ -226,6 +228,100 @@ describe('name', () => {
226228
});
227229
});
228230

231+
describe('fullName()', () => {
232+
beforeEach(() => {
233+
faker.locale = 'en';
234+
faker.localeFallback = 'en';
235+
});
236+
237+
it('should return a name with firstName and lastName', () => {
238+
const fullName = faker.name.fullName();
239+
240+
expect(fullName).toBeTypeOf('string');
241+
expect(fullName).toContain(' ');
242+
});
243+
244+
it('should return a female gender-specific name without firstName and lastName', () => {
245+
faker.locale = 'mk';
246+
247+
const female_specific = [
248+
...faker.definitions.name.female_prefix,
249+
...faker.definitions.name.female_first_name,
250+
...faker.definitions.name.female_last_name,
251+
...faker.definitions.name.suffix,
252+
];
253+
254+
const fullName = faker.name.fullName({ gender: 'female' });
255+
256+
const parts = fullName.split(' ');
257+
for (const part of parts) {
258+
expect(female_specific).toContain(part);
259+
}
260+
});
261+
262+
it('should return a male gender-specific name without firstName and lastName', () => {
263+
faker.locale = 'mk';
264+
265+
const male_specific = [
266+
...faker.definitions.name.male_prefix,
267+
...faker.definitions.name.male_first_name,
268+
...faker.definitions.name.male_last_name,
269+
...faker.definitions.name.suffix,
270+
];
271+
272+
const fullName = faker.name.fullName({ gender: 'male' });
273+
274+
const parts = fullName.split(' ');
275+
for (const part of parts) {
276+
expect(male_specific).toContain(part);
277+
}
278+
});
279+
280+
it('should return a female gender-specific name with given firstName and lastName', () => {
281+
faker.locale = 'mk';
282+
283+
const male_specific = [
284+
...faker.definitions.name.female_prefix,
285+
'firstName',
286+
'lastName',
287+
...faker.definitions.name.suffix,
288+
];
289+
290+
const fullName = faker.name.fullName({
291+
firstName: 'firstName',
292+
lastName: 'lastName',
293+
gender: 'female',
294+
});
295+
296+
const parts = fullName.split(' ');
297+
for (const part of parts) {
298+
expect(male_specific).toContain(part);
299+
}
300+
});
301+
302+
it('should return a male gender-specific name with given firstName and lastName', () => {
303+
faker.locale = 'mk';
304+
305+
const male_specific = [
306+
...faker.definitions.name.male_prefix,
307+
'firstName',
308+
'lastName',
309+
...faker.definitions.name.suffix,
310+
];
311+
312+
const fullName = faker.name.fullName({
313+
firstName: 'firstName',
314+
lastName: 'lastName',
315+
gender: 'male',
316+
});
317+
318+
const parts = fullName.split(' ');
319+
for (const part of parts) {
320+
expect(male_specific).toContain(part);
321+
}
322+
});
323+
});
324+
229325
describe('gender()', () => {
230326
beforeEach(() => {
231327
faker.locale = 'en';

0 commit comments

Comments
 (0)