diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.spec.ts b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.spec.ts index 892fe541f8856a26fec7f3d77dad427eebb690b4..af5ace3e13868afb9179eee7219f0217da9ae8a7 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.spec.ts +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.spec.ts @@ -24,7 +24,7 @@ import { convertForDataTest, ConvertForDataTestPipe, - createEmptyStateResource, + createStateResource, EnumToLabelPipe, HasLinkPipe, ToResourceUriPipe, @@ -32,7 +32,7 @@ import { import { getElementFromFixture, mock } from '@alfa-client/test-utils'; import { PostfachIconComponent } from '@alfa-client/ui'; import { UserProfileInVorgangListItemContainerComponent } from '@alfa-client/user-profile'; -import { UserProfileService } from '@alfa-client/user-profile-shared'; +import { UserProfileResource, UserProfileService } from '@alfa-client/user-profile-shared'; import { VorgangHeaderLinkRel, VorgangStatus } from '@alfa-client/vorgang-shared'; import { AktenzeichenComponent, @@ -52,6 +52,7 @@ import { MatIconTestingModule } from '@angular/material/icon/testing'; import { MatTooltipModule } from '@angular/material/tooltip'; import { RouterTestingModule } from '@angular/router/testing'; import { getDataTestClassOf, getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { createUserProfileResource } from 'libs/user-profile-shared/test/user-profile'; import { createVorgangResource } from 'libs/vorgang-shared/test/vorgang'; import { MockComponent, MockModule } from 'ng-mocks'; import { of } from 'rxjs'; @@ -72,6 +73,8 @@ describe('VorgangListItemComponent', () => { const postfachStatus: string = getDataTestClassOf('postfach-icon'); const bescheidStatus: string = getDataTestIdOf('vorgang-list-item-bescheid-status'); + const userProfile: UserProfileResource = createUserProfileResource(); + beforeEach(async () => { await TestBed.configureTestingModule({ imports: [RouterTestingModule, MatIconTestingModule], @@ -114,35 +117,47 @@ describe('VorgangListItemComponent', () => { }); describe('ngOnInit', () => { - it('should build aria label', () => { - component.buildAriaLabel = jest.fn(); - - component.ngOnInit(); - - expect(component.buildAriaLabel).toHaveBeenCalled(); - }); - describe('user profile', () => { beforeEach(() => { + component.buildAriaLabel = jest.fn(); component.userProfileService.getAssignedUserProfile = jest .fn() - .mockReturnValue(of(createEmptyStateResource())); + .mockReturnValue(of(createStateResource(userProfile))); }); - it('should not get profile if vorgang has no "assigned to" link', () => { - component.vorgang = createVorgangResource(); + describe('vorgang has no "assigned to" link', () => { + beforeEach(() => { + component.vorgang = createVorgangResource(); + }); + it('should not get profile', () => { + component.ngOnInit(); + + expect(component.userProfileService.getAssignedUserProfile).not.toHaveBeenCalled(); + }); - component.ngOnInit(); + it('should build aria label without user profile resource', () => { + component.ngOnInit(); - expect(component.userProfileService.getAssignedUserProfile).not.toHaveBeenCalled(); + expect(component.buildAriaLabel).toHaveBeenCalledWith(); + }); }); - it('should get profile', () => { - component.vorgang = createVorgangResource([VorgangHeaderLinkRel.ASSIGNED_TO]); + describe('vorgang has "assigned to" link', () => { + beforeEach(() => { + component.vorgang = createVorgangResource([VorgangHeaderLinkRel.ASSIGNED_TO]); + }); + + it('should get profile', () => { + component.ngOnInit(); + + expect(component.userProfileService.getAssignedUserProfile).toHaveBeenCalled(); + }); - component.ngOnInit(); + it('should build aria label with user profile resource', () => { + component.ngOnInit(); - expect(component.userProfileService.getAssignedUserProfile).toHaveBeenCalled(); + expect(component.buildAriaLabel).toHaveBeenCalledWith(userProfile); + }); }); }); }); diff --git a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.ts b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.ts index a86e83410e370fdf599f5bc80c69b008e8ac9fbf..ba8aa599cdd47aa2460658ce5fba73d969253c1c 100644 --- a/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.ts +++ b/alfa-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.ts @@ -22,7 +22,6 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { - createEmptyStateResource, EnumToLabelPipe, formatFullDateWithTimeWithoutSeconds, formatToPrettyDate, @@ -53,7 +52,6 @@ export class VorgangListItemComponent implements OnInit { @Input() vorgang: VorgangResource; readonly vorgangLinkRel = VorgangHeaderLinkRel; - userProfile: StateResource<UserProfileResource> = createEmptyStateResource<UserProfileResource>(); public ariaLabel: string = ''; @@ -63,22 +61,25 @@ export class VorgangListItemComponent implements OnInit { if (hasLink(this.vorgang, VorgangHeaderLinkRel.ASSIGNED_TO)) { this.userProfileService .getAssignedUserProfile(this.vorgang, VorgangHeaderLinkRel.ASSIGNED_TO) - .pipe(first(isNotNull)) + .pipe( + first((userProfile: StateResource<UserProfileResource>) => + isNotNull(userProfile.resource), + ), + ) .subscribe((userProfileStateResource: StateResource<UserProfileResource>) => { - this.userProfile = userProfileStateResource; + this.buildAriaLabel(userProfileStateResource.resource); }); - } - this.buildAriaLabel(); + } else this.buildAriaLabel(); } - buildAriaLabel() { + buildAriaLabel(userProfileResource: UserProfileResource = undefined) { const name: string = this.vorgang.name; const aktenzeichen: string = getAktenzeichenText(this.vorgang); const nummer: string = this.vorgang.nummer; const approvalStatus: string = this.getApprovalText(); const createdAt: string = formatFullDateWithTimeWithoutSeconds(this.vorgang.createdAt); - this.ariaLabel = `Vorgang: ${name}, Aktenzeichen: ${aktenzeichen}, Nummer: ${nummer} Status: ${this.getStatus()} ${approvalStatus}, Eingang: ${createdAt}, Aktuell zugewiesener Nutzer: ${getUserName(this.userProfile.resource)}`; + this.ariaLabel = `Vorgang: ${name}, Aktenzeichen: ${aktenzeichen}, Nummer: ${nummer} Status: ${this.getStatus()} ${approvalStatus}, Eingang: ${createdAt}, Aktuell zugewiesener Nutzer: ${getUserName(userProfileResource)}`; if ( hasLink(this.vorgang, VorgangHeaderLinkRel.WIEDERVORLAGEN) &&