diff --git a/goofy-client/libs/user-profile/src/index.ts b/goofy-client/libs/user-profile/src/index.ts index 618038ce4d1631d1480a5a2c8401057cbbd5af88..53cc4bd8333eaba3b08c49b20bad85aca6fc933e 100644 --- a/goofy-client/libs/user-profile/src/index.ts +++ b/goofy-client/libs/user-profile/src/index.ts @@ -1,3 +1,4 @@ +export * from './lib/assign-user-profile-button-container/assign-user-profile-button-container.component'; export * from './lib/user-icon-container/user-icon-container.component'; export * from './lib/user-profile.module'; diff --git a/goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.html b/goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.html new file mode 100644 index 0000000000000000000000000000000000000000..dee44938f1cf45a00996673b8a50e502664a6212 --- /dev/null +++ b/goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.html @@ -0,0 +1,4 @@ +<goofy-client-icon-button-with-spinner *ngIf="vorgang | hasLink: linkRel.ASSIGN" data-test-id="assign-user-profile-button" + icon="assignment_ind" toolTip="Bearbeiter zuordnen" + (clickEmitter)="showUserProfileSearch()"> +</goofy-client-icon-button-with-spinner> \ No newline at end of file diff --git a/goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.scss b/goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.spec.ts b/goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..f407aede959e73e7bf34a944cc9761e10ab7079e --- /dev/null +++ b/goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.spec.ts @@ -0,0 +1,75 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { HasLinkPipe } from '@goofy-client/tech-shared'; +import { mock } from '@goofy-client/test-utils'; +import { IconButtonWithSpinnerComponent } from '@goofy-client/ui'; +import { UserProfileService } from '@goofy-client/user-profile-shared'; +import { VorgangHeaderLinkRel } from '@goofy-client/vorgang-shared'; +import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; +import { configureTestSuite } from 'ng-bullet'; +import { MockComponent } from 'ng-mocks'; +import { AssignUserProfileButtonContainerComponent } from './assign-user-profile-button-container.component'; + +describe('AssignUserProfileButtonContainerComponent', () => { + let component: AssignUserProfileButtonContainerComponent; + let fixture: ComponentFixture<AssignUserProfileButtonContainerComponent>; + + const assignUserProfileButton: string = '[data-test-id="assign-user-profile-button"]'; + + const userProfileService = mock(UserProfileService); + + configureTestSuite(() => { + TestBed.configureTestingModule({ + declarations: [ + AssignUserProfileButtonContainerComponent, + HasLinkPipe, + MockComponent(IconButtonWithSpinnerComponent) + ], + providers: [ + { + provide: UserProfileService, + useValue: userProfileService + } + ] + }) + }) + + beforeEach(() => { + fixture = TestBed.createComponent(AssignUserProfileButtonContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('button', () => { + + it('should be visible', () => { + component.vorgang = createVorgangWithEingangResource([VorgangHeaderLinkRel.ASSIGN]); + fixture.detectChanges(); + + const button = fixture.nativeElement.querySelector(assignUserProfileButton); + + expect(button).toBeInstanceOf(HTMLElement); + }) + + it('should be hidden', () => { + component.vorgang = createVorgangWithEingangResource(); + fixture.detectChanges(); + + const button = fixture.nativeElement.querySelector(assignUserProfileButton); + + expect(button).not.toBeInstanceOf(HTMLElement); + }) + }) + + describe('showUserProfileSearch', () => { + + it('should call service', () => { + component.showUserProfileSearch(); + + expect(userProfileService.showUserProfileSearch).toHaveBeenCalled(); + }) + }) +}); \ No newline at end of file diff --git a/goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.ts b/goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..97f61310c124d803e7f6012e4ed2904d65f30119 --- /dev/null +++ b/goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.ts @@ -0,0 +1,21 @@ +import { Component, Input } from '@angular/core'; +import { UserProfileService } from '@goofy-client/user-profile-shared'; +import { VorgangHeaderLinkRel, VorgangWithEingangResource } from '@goofy-client/vorgang-shared'; + +@Component({ + selector: 'goofy-client-assign-user-profile-button-container', + templateUrl: './assign-user-profile-button-container.component.html', + styleUrls: ['./assign-user-profile-button-container.component.scss'] +}) +export class AssignUserProfileButtonContainerComponent { + + @Input() vorgang: VorgangWithEingangResource; + + readonly linkRel = VorgangHeaderLinkRel; + + constructor(private userProfileService: UserProfileService) { } + + showUserProfileSearch(): void { + this.userProfileService.showUserProfileSearch(); + } +} \ No newline at end of file diff --git a/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.html b/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.html index 85aae807998792e8ccc1fae96b413083f5268e61..09de62ce38097d18be24b43cb05975cb1228ced2 100644 --- a/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.html +++ b/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.html @@ -1,21 +1,15 @@ -<div - *ngIf="apiRoot$ | async as apiRoot" - (mouseenter)="showUserProfileSearch()" - (focusin)="showUserProfileSearch()" - (focusout)="hideUserProfileSearch()" - tabindex="0"> +<div *ngIf="apiRoot$ | async as apiRoot" + (mouseenter)="showUserProfileSearch()" + tabindex="0"> - <goofy-client-user-icon data-test-id="user-profile-icon" - [userProfileStateResource]="userProfile$ | async" + <goofy-client-user-icon [userProfileStateResource]="userProfile$ | async" data-test-id="user-profile-icon" [disableTooltip]="disableTooltip" [scaleFactor]="scaleFactor" [transformOrigin]="transformOrigin"> </goofy-client-user-icon> - <goofy-client-user-profile-search-container - *ngIf="(apiRoot.resource | hasLink: apiRootLinkRel.SEARCH_USER_PROFILES) && allowAssigning" - [apiRoot]="apiRoot" - data-test-id="user-profile-search-container"> + <goofy-client-user-profile-search-container *ngIf="(apiRoot.resource | hasLink: apiRootLinkRel.SEARCH_USER_PROFILES) && allowAssigning" data-test-id="user-profile-search-container" + [apiRoot]="apiRoot"> </goofy-client-user-profile-search-container> </div> \ No newline at end of file diff --git a/goofy-client/libs/user-profile/src/lib/user-profile.module.ts b/goofy-client/libs/user-profile/src/lib/user-profile.module.ts index 99049fefc514c44f879fc08de0f5a80f44dc823f..466e853e41534fcf8f9af9aff088fee76b49ada3 100644 --- a/goofy-client/libs/user-profile/src/lib/user-profile.module.ts +++ b/goofy-client/libs/user-profile/src/lib/user-profile.module.ts @@ -3,6 +3,7 @@ import { NgModule } from '@angular/core'; import { TechSharedModule } from '@goofy-client/tech-shared'; import { UiModule } from '@goofy-client/ui'; import { UserProfileSharedModule } from '@goofy-client/user-profile-shared'; +import { AssignUserProfileButtonContainerComponent } from './assign-user-profile-button-container/assign-user-profile-button-container.component'; import { UserIconContainerComponent } from './user-icon-container/user-icon-container.component'; import { UserIconComponent } from './user-icon/user-icon.component'; import { UserProfileSearchContainerComponent } from './user-profile-search-container/user-profile-search-container.component'; @@ -19,10 +20,12 @@ import { UserProfileSearchComponent } from './user-profile-search-container/user UserIconComponent, UserIconContainerComponent, UserProfileSearchComponent, - UserProfileSearchContainerComponent + UserProfileSearchContainerComponent, + AssignUserProfileButtonContainerComponent ], exports: [ - UserIconContainerComponent + UserIconContainerComponent, + AssignUserProfileButtonContainerComponent ] }) export class UserProfileModule { } \ No newline at end of file diff --git a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-action-buttons/vorgang-detail-action-buttons.component.html b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-action-buttons/vorgang-detail-action-buttons.component.html index 3dabe3fcb8d040f64f743f616607679d724b787e..a7a15ba9118b4de2a347a1ebc36f2a8f68122fc1 100644 --- a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-action-buttons/vorgang-detail-action-buttons.component.html +++ b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-action-buttons/vorgang-detail-action-buttons.component.html @@ -16,4 +16,5 @@ </a> <goofy-client-verwerfen-button [showButton]="showButton" [vorgang]="vorgangWithEingang.resource"></goofy-client-verwerfen-button> -<goofy-client-wiedereroeffnen-button [showButton]="showButton" [vorgang]="vorgangWithEingang.resource"></goofy-client-wiedereroeffnen-button> \ No newline at end of file +<goofy-client-wiedereroeffnen-button [showButton]="showButton" [vorgang]="vorgangWithEingang.resource"></goofy-client-wiedereroeffnen-button> +<goofy-client-assign-user-profile-button-container [vorgang]="vorgangWithEingang.resource"></goofy-client-assign-user-profile-button-container> \ No newline at end of file diff --git a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-action-buttons/vorgang-detail-action-buttons.component.spec.ts b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-action-buttons/vorgang-detail-action-buttons.component.spec.ts index eeecd85105962f1aa726798beb4b02b4f7cdfea6..c14543ff858b5145590782df179f3e1355427e1a 100644 --- a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-action-buttons/vorgang-detail-action-buttons.component.spec.ts +++ b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-action-buttons/vorgang-detail-action-buttons.component.spec.ts @@ -3,6 +3,7 @@ import { MatIcon } from '@angular/material/icon'; import { RouterTestingModule } from '@angular/router/testing'; import { createStateResource } from '@goofy-client/tech-shared'; import { IconButtonWithSpinnerComponent } from '@goofy-client/ui'; +import { AssignUserProfileButtonContainerComponent } from '@goofy-client/user-profile'; import { VorgangWithEingangLinkRel } from '@goofy-client/vorgang-shared'; import { WiedervorlageListLinkRel } from '@goofy-client/wiedervorlage-shared'; import { HasLinkPipe } from 'libs/tech-shared/src/lib/pipes/has-link.pipe'; @@ -39,7 +40,8 @@ describe('VorgangDetailActionButtonsComponent', () => { MockComponent(BescheidenButtonComponent), MockComponent(AbschliessenButtonComponent), MockComponent(ZurueckstellenButtonComponent), - MockComponent(WiedereroeffnenButtonComponent) + MockComponent(WiedereroeffnenButtonComponent), + MockComponent(AssignUserProfileButtonContainerComponent) ], imports: [ RouterTestingModule