From bf837409f9148922ba4e3271831faa7033781305 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Mon, 7 Jun 2021 16:28:54 +0200 Subject: [PATCH] OZG-400 subnavigation button --- goofy-client/libs/user-profile/src/index.ts | 1 + ...er-profile-button-container.component.html | 4 + ...er-profile-button-container.component.scss | 0 ...profile-button-container.component.spec.ts | 75 +++++++++++++++++++ ...user-profile-button-container.component.ts | 21 ++++++ .../user-icon-container.component.html | 18 ++--- .../src/lib/user-profile.module.ts | 7 +- ...rgang-detail-action-buttons.component.html | 3 +- ...ng-detail-action-buttons.component.spec.ts | 4 +- 9 files changed, 117 insertions(+), 16 deletions(-) create mode 100644 goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.html create mode 100644 goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.scss create mode 100644 goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.spec.ts create mode 100644 goofy-client/libs/user-profile/src/lib/assign-user-profile-button-container/assign-user-profile-button-container.component.ts diff --git a/goofy-client/libs/user-profile/src/index.ts b/goofy-client/libs/user-profile/src/index.ts index 618038ce4d..53cc4bd833 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 0000000000..dee44938f1 --- /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 0000000000..e69de29bb2 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 0000000000..f407aede95 --- /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 0000000000..97f61310c1 --- /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 85aae80799..09de62ce38 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 99049fefc5..466e853e41 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 3dabe3fcb8..a7a15ba911 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 eeecd85105..c14543ff85 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 -- GitLab