From f8a778f993cd78fb711e7268740bfec852db71a2 Mon Sep 17 00:00:00 2001 From: Pablo Martinez Garcia Date: Fri, 11 Aug 2023 08:55:20 +0200 Subject: [PATCH] [AAE-15836] Address review comments --- lib/core/src/lib/pipes/full-name.pipe.spec.ts | 223 +++++++++++++----- lib/core/src/lib/pipes/full-name.pipe.ts | 2 +- 2 files changed, 159 insertions(+), 66 deletions(-) diff --git a/lib/core/src/lib/pipes/full-name.pipe.spec.ts b/lib/core/src/lib/pipes/full-name.pipe.spec.ts index cf5878f234..adde2b28e9 100644 --- a/lib/core/src/lib/pipes/full-name.pipe.spec.ts +++ b/lib/core/src/lib/pipes/full-name.pipe.spec.ts @@ -17,80 +17,173 @@ import { FullNamePipe } from './full-name.pipe'; import { UserLike } from './user-like.interface'; -import { cloneDeep } from 'lodash'; - -interface TestCase { - title: string; - user: UserLike; - result: string; -}; describe('FullNamePipe', () => { let pipe: FullNamePipe; - const emptyUserTestCase: TestCase = { - title: 'should return empty string when there is no name', - user: {}, - result: '' - }; + let user: UserLike; - const onlyUserEmailTestCase: TestCase = { - title: 'should return user email when firstName, lastName and username are not available', - user: { email: 'abcXyz@gmail.com' }, - result: 'abcXyz@gmail.com' - }; + describe('Email address inclusion not requested', () => { - const baseTestCases: TestCase[] = [ - { - title: 'should return only firstName as fullName when there is no lastName', - user: { firstName: 'Abc', lastName: '', username: '' }, - result: 'Abc' - }, - { - title: 'should return only lastName as fullName when there is no firstName', - user: { firstName: '', lastName: 'Xyz', username: '' }, - result: 'Xyz' - }, - { - title: 'should return fullName when firstName and lastName are available', - user: { firstName: 'Abc', lastName: 'Xyz', username: '' }, - result: 'Abc Xyz' - }, - { - title: 'should return username when firstName and lastName are not available', - user: { firstName: '', lastName: '', username: 'username' }, - result: 'username' - } - ]; + beforeAll(() => { + pipe = new FullNamePipe(); + }); - [undefined, false, true].forEach(injectionToken => { - [undefined, false, true].forEach(pipeParameter => { - [undefined, '', 'abcXyz@gmail.com'].forEach(emailAddress => { - const testCases: TestCase[] = getTestCases(baseTestCases, emailAddress, pipeParameter, injectionToken, emptyUserTestCase, onlyUserEmailTestCase); + it('should return empty string when there is no name', () => { + user = {}; - testCases.forEach(testCase => { - it(`${testCase.title} and injection token is ${injectionToken} and pipe parameter is ${pipeParameter} and email address is ${emailAddress}`, () => { - pipe = new FullNamePipe(injectionToken); - expect(pipe.transform(testCase.user, pipeParameter)).toBe(testCase.result); - }); - }); - }); + expect(pipe.transform(user)).toBe(''); + }); + + it('should return only firstName as fullName when there is no lastName', () => { + user = { firstName: 'Abc' }; + + expect(pipe.transform(user)).toBe('Abc'); + }); + + it('should return only lastName as fullName when there is no firstName', () => { + user = { lastName: 'Xyz' }; + + expect(pipe.transform(user)).toBe('Xyz'); + }); + + it('should return fullName when firstName and lastName are available', () => { + user = { firstName: 'Abc', lastName: 'Xyz' }; + + expect(pipe.transform(user)).toBe('Abc Xyz'); + }); + + it('should return username when firstName and lastName are not available', () => { + user = { username: 'username' }; + + expect(pipe.transform(user)).toBe('username'); + }); + + it('should return user email when firstName, lastName and username are not available', () => { + user = { email: 'abcXyz@gmail.com' }; + + expect(pipe.transform(user)).toBe('abcXyz@gmail.com'); }); }); + + describe('Email address inclusion requested via injection token', () => { + + beforeEach(() => { + pipe = new FullNamePipe(true); + user = { email: 'abcXyz@gmail.com' }; + }); + + it('should return empty string when there is no name', () => { + user = {}; + + expect(pipe.transform(user)).toBe(''); + }); + + it('should return only firstName and email address as fullName when there is no lastName', () => { + user.firstName = 'Abc'; + + expect(pipe.transform(user)).toBe('Abc '); + }); + + it('should return only lastName and email address as fullName when there is no firstName', () => { + user.lastName = 'Xyz'; + + expect(pipe.transform(user)).toBe('Xyz '); + }); + + it('should return fullName and email address when firstName and lastName are available', () => { + user.firstName = 'Abc'; + user.lastName = 'Xyz'; + + expect(pipe.transform(user)).toBe('Abc Xyz '); + }); + + it('should return username and email address when firstName and lastName are not available', () => { + user.username = 'username'; + + expect(pipe.transform(user)).toBe('username '); + }); + + it('should return user email when firstName, lastName and username are not available', () => { + user = { email: 'abcXyz@gmail.com' }; + + expect(pipe.transform(user)).toBe('abcXyz@gmail.com'); + }); + + it('should not include email address when email address is not available', () => { + user = { firstName: 'Abc', lastName: 'Xyz' }; + + expect(pipe.transform(user)).toBe('Abc Xyz'); + }); + }); + + describe('Email address inclusion requested via pipe parameter', () => { + + beforeEach(() => { + pipe = new FullNamePipe(); + user = { email: 'abcXyz@gmail.com' }; + }); + + it('should return empty string when there is no name', () => { + user = {}; + + expect(pipe.transform(user, true)).toBe(''); + }); + + it('should return only firstName and email address as fullName when there is no lastName', () => { + user.firstName = 'Abc'; + + expect(pipe.transform(user, true)).toBe('Abc '); + }); + + it('should return only lastName and email address as fullName when there is no firstName', () => { + user.lastName = 'Xyz'; + + expect(pipe.transform(user, true)).toBe('Xyz '); + }); + + it('should return fullName and email address when firstName and lastName are available', () => { + user.firstName = 'Abc'; + user.lastName = 'Xyz'; + + expect(pipe.transform(user, true)).toBe('Abc Xyz '); + }); + + it('should return username and email address when firstName and lastName are not available', () => { + user.username = 'username'; + + expect(pipe.transform(user, true)).toBe('username '); + }); + + it('should return user email when firstName, lastName and username are not available', () => { + user = { email: 'abcXyz@gmail.com' }; + + expect(pipe.transform(user, true)).toBe('abcXyz@gmail.com'); + }); + + it('should not include email address when email address is not available', () => { + user = { firstName: 'Abc', lastName: 'Xyz' }; + + expect(pipe.transform(user, true)).toBe('Abc Xyz'); + }); + }); + + describe('Pipe parameter prevalence over token', () => { + + it('should include email when injection token is false and pipe parameter is true', () => { + user = { firstName: 'Abc', lastName: 'Xyz', email: 'abcXyz@gmail.com' }; + pipe = new FullNamePipe(false); + + expect(pipe.transform(user, true)).toBe('Abc Xyz '); + }); + + it('should not include email when injection token is true and pipe parameter is false', () => { + user = { firstName: 'Abc', lastName: 'Xyz' }; + pipe = new FullNamePipe(true); + + expect(pipe.transform(user, false)).toBe('Abc Xyz'); + }); + }); + }); - -function getTestCases(baseTestCases: TestCase[], emailAddress: string | undefined, pipeParameter: boolean | undefined, injectionToken: boolean | undefined, emptyUserTestCase: TestCase, onlyUserEmailTestCase: TestCase) { - let testCases: TestCase[] = cloneDeep(baseTestCases).map(testCase => ({ ...testCase, user: { ...testCase.user, email: emailAddress } })); - - const patchEmailInResult = !!(pipeParameter === undefined ? injectionToken : pipeParameter) && emailAddress?.length; - if (patchEmailInResult) { - testCases = testCases.map(testCase => ({ ...testCase, result: testCase.result.concat(' ') })); - } - - testCases.push(emptyUserTestCase); - testCases.push(onlyUserEmailTestCase); - - return testCases; -} - diff --git a/lib/core/src/lib/pipes/full-name.pipe.ts b/lib/core/src/lib/pipes/full-name.pipe.ts index 0a1fd63cec..2053fea84b 100644 --- a/lib/core/src/lib/pipes/full-name.pipe.ts +++ b/lib/core/src/lib/pipes/full-name.pipe.ts @@ -25,7 +25,7 @@ export class FullNamePipe implements PipeTransform { constructor(@Optional() @Inject(ADF_FULL_NAME_PIPE_INCLUDE_EMAIL) private includeEmail = false) { } - transform(user: UserLike, includeEmail: boolean | undefined): string { + transform(user: UserLike, includeEmail?: boolean): string { return this.buildFullName(user, includeEmail) ? this.buildFullName(user, includeEmail) : this.buildFromUsernameOrEmail(user, includeEmail); }