From 6927af4ec3bc413f415882ff73ba44d184e97ed8 Mon Sep 17 00:00:00 2001 From: Michal Kinas <113341662+MichalKinas@users.noreply.github.com> Date: Mon, 26 Jan 2026 10:51:12 +0100 Subject: [PATCH] [ACS-10288] Aria label for user initials pipe (#11568) --- .../src/lib/pipes/user-initial.pipe.spec.ts | 38 +++++++++++++++---- lib/core/src/lib/pipes/user-initial.pipe.ts | 1 + 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/lib/core/src/lib/pipes/user-initial.pipe.spec.ts b/lib/core/src/lib/pipes/user-initial.pipe.spec.ts index 5c21ac2e8f..3ba3abcc68 100644 --- a/lib/core/src/lib/pipes/user-initial.pipe.spec.ts +++ b/lib/core/src/lib/pipes/user-initial.pipe.spec.ts @@ -62,28 +62,28 @@ describe('UserInitialPipe', () => { fakeUser.firstName = 'FAKE-NAME'; fakeUser.lastName = 'FAKE-SURNAME'; const result = pipe.transform(fakeUser); - expect(result).toBe('
FF
'); + expect(result).toBe('
FF
'); }); it('should apply the style class passed in input', () => { fakeUser.firstName = 'FAKE-NAME'; fakeUser.lastName = 'FAKE-SURNAME'; const result = pipe.transform(fakeUser, 'fake-class-to-check'); - expect(result).toBe('
FF
'); + expect(result).toBe('
FF
'); }); it('should return a single letter into div when lastName is undefined', () => { fakeUser.firstName = 'FAKE-NAME'; fakeUser.lastName = undefined; const result = pipe.transform(fakeUser); - expect(result).toBe('
F
'); + expect(result).toBe('
F
'); }); it('should return a single letter into div when firstname is null', () => { fakeUser.firstName = undefined; fakeUser.lastName = 'FAKE-SURNAME'; const result = pipe.transform(fakeUser); - expect(result).toBe('
F
'); + expect(result).toBe('
F
'); }); it('should return a single letter into div when only username is defined', () => { @@ -91,7 +91,7 @@ describe('UserInitialPipe', () => { fakeUser.lastName = undefined; fakeUser.username = 'USERNAME-FAKE'; const result = pipe.transform(fakeUser); - expect(result).toBe('
U
'); + expect(result).toBe('
U
'); }); it('should return a single letter into div of firstName when only firstName and username is defined', () => { @@ -99,7 +99,7 @@ describe('UserInitialPipe', () => { fakeUser.lastName = undefined; fakeUser.username = 'USERNAME-FAKE'; const result = pipe.transform(fakeUser); - expect(result).toBe('
F
'); + expect(result).toBe('
F
'); }); it('should return two letter into div of username and lastName when firstName is undefined', () => { @@ -107,7 +107,7 @@ describe('UserInitialPipe', () => { fakeUser.lastName = 'FAKE-SURNAME'; fakeUser.username = 'USERNAME-FAKE'; const result = pipe.transform(fakeUser); - expect(result).toBe('
UF
'); + expect(result).toBe('
UF
'); }); it('should return a div with the user initials when firstName, lastName and username is defined', () => { @@ -115,11 +115,33 @@ describe('UserInitialPipe', () => { fakeUser.lastName = 'FAKE-SURNAME'; fakeUser.username = 'USERNAME-FAKE'; const result = pipe.transform(fakeUser); - expect(result).toBe('
FF
'); + expect(result).toBe('
FF
'); }); it('should return an empty string when user is null', () => { const result = pipe.transform(null); expect(result).toBe(''); }); + + it('should add aria label with available user information', () => { + fakeUser.firstName = 'FAKE-NAME'; + fakeUser.lastName = 'FAKE-SURNAME'; + const result = pipe.transform(fakeUser); + expect(result).toContain('aria-label="FAKE-NAME FAKE-SURNAME"'); + + fakeUser.firstName = undefined; + fakeUser.lastName = undefined; + fakeUser.displayName = 'Fake Display Name'; + const result2 = pipe.transform(fakeUser); + expect(result2).toContain('aria-label="Fake Display Name"'); + + fakeUser.displayName = undefined; + fakeUser.username = 'fakeusername'; + const result3 = pipe.transform(fakeUser); + expect(result3).toContain('aria-label="fakeusername"'); + + fakeUser.username = undefined; + const result4 = pipe.transform(fakeUser); + expect(result4).toContain('aria-label=""'); + }); }); diff --git a/lib/core/src/lib/pipes/user-initial.pipe.ts b/lib/core/src/lib/pipes/user-initial.pipe.ts index d9d0237dcd..6adb4d3d0d 100644 --- a/lib/core/src/lib/pipes/user-initial.pipe.ts +++ b/lib/core/src/lib/pipes/user-initial.pipe.ts @@ -32,6 +32,7 @@ export class InitialUsernamePipe implements PipeTransform { const div = document.createElement('div'); div.textContent = initialResult; div.dataset.automationId = 'user-initials-image'; + div.ariaLabel = user.firstName && user.lastName ? `${user.firstName} ${user.lastName}` : user.displayName || user.username || ''; div.className = className; safeHtml = this.sanitized.bypassSecurityTrustHtml(div.outerHTML);