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