Skip to content
Snippets Groups Projects
Commit 2a392275 authored by OZGCloud's avatar OZGCloud
Browse files

Merge branch 'master' into OZG-5167-fix-nachricht-update

parents 2bfa4181 6e68f488
No related branches found
No related tags found
No related merge requests found
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
unter der Lizenz sind dem Lizenztext zu entnehmen. unter der Lizenz sind dem Lizenztext zu entnehmen.
--> -->
<ng-container *ngIf="vorgang | hasLink: linkRel.ABSCHLIESSEN"> <ng-container *ngIf="isVisible">
<ozgcloud-stroked-button-with-spinner <ozgcloud-stroked-button-with-spinner
*ngIf="!showAsIconButton" *ngIf="!showAsIconButton"
data-test-id="abschliessen-button" data-test-id="abschliessen-button"
......
...@@ -22,22 +22,10 @@ ...@@ -22,22 +22,10 @@
* unter der Lizenz sind dem Lizenztext zu entnehmen. * unter der Lizenz sind dem Lizenztext zu entnehmen.
*/ */
import { CommandResource } from '@alfa-client/command-shared'; import { CommandResource } from '@alfa-client/command-shared';
import { import { createEmptyStateResource, createStateResource, HasLinkPipe, StateResource, } from '@alfa-client/tech-shared';
HasLinkPipe,
StateResource,
createEmptyStateResource,
createStateResource,
} from '@alfa-client/tech-shared';
import { mock } from '@alfa-client/test-utils'; import { mock } from '@alfa-client/test-utils';
import { import { IconButtonWithSpinnerComponent, OzgcloudStrokedButtonWithSpinnerComponent, } from '@alfa-client/ui';
IconButtonWithSpinnerComponent, import { VorgangCommandService, VorgangWithEingangLinkRel, VorgangWithEingangResource, } from '@alfa-client/vorgang-shared';
OzgcloudStrokedButtonWithSpinnerComponent,
} from '@alfa-client/ui';
import {
VorgangCommandService,
VorgangStatus,
VorgangWithEingangLinkRel,
} from '@alfa-client/vorgang-shared';
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing';
import { createCommandResource } from 'libs/command-shared/test/command'; import { createCommandResource } from 'libs/command-shared/test/command';
import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
...@@ -126,7 +114,7 @@ describe('AbschliessenButtonComponent', () => { ...@@ -126,7 +114,7 @@ describe('AbschliessenButtonComponent', () => {
}); });
it('should be hidden', () => { it('should be hidden', () => {
component.vorgang = createVorgangWithEingangResource(); component.isVisible = false;
fixture.detectChanges(); fixture.detectChanges();
const buttonElement = fixture.nativeElement.querySelector(abschliessenButton); const buttonElement = fixture.nativeElement.querySelector(abschliessenButton);
...@@ -135,9 +123,7 @@ describe('AbschliessenButtonComponent', () => { ...@@ -135,9 +123,7 @@ describe('AbschliessenButtonComponent', () => {
}); });
it('should be visible', () => { it('should be visible', () => {
component.vorgang = createVorgangWithEingangResource([ component.isVisible = true;
VorgangWithEingangLinkRel.ABSCHLIESSEN,
]);
fixture.detectChanges(); fixture.detectChanges();
const buttonElement = fixture.nativeElement.querySelector(abschliessenButton); const buttonElement = fixture.nativeElement.querySelector(abschliessenButton);
...@@ -153,7 +139,7 @@ describe('AbschliessenButtonComponent', () => { ...@@ -153,7 +139,7 @@ describe('AbschliessenButtonComponent', () => {
}); });
it('should be hidden', () => { it('should be hidden', () => {
component.vorgang = createVorgangWithEingangResource(); component.isVisible = false;
fixture.detectChanges(); fixture.detectChanges();
const buttonElement = fixture.nativeElement.querySelector(abschliessenIconButton); const buttonElement = fixture.nativeElement.querySelector(abschliessenIconButton);
...@@ -161,11 +147,8 @@ describe('AbschliessenButtonComponent', () => { ...@@ -161,11 +147,8 @@ describe('AbschliessenButtonComponent', () => {
expect(buttonElement).not.toBeInstanceOf(HTMLElement); expect(buttonElement).not.toBeInstanceOf(HTMLElement);
}); });
it('should be visible', () => { it('should be visible', () => {
component.vorgang = createVorgangWithEingangResource([ component.isVisible = true;
VorgangWithEingangLinkRel.ABSCHLIESSEN,
]);
fixture.detectChanges(); fixture.detectChanges();
const buttonElement = fixture.nativeElement.querySelector(abschliessenIconButton); const buttonElement = fixture.nativeElement.querySelector(abschliessenIconButton);
...@@ -173,4 +156,58 @@ describe('AbschliessenButtonComponent', () => { ...@@ -173,4 +156,58 @@ describe('AbschliessenButtonComponent', () => {
expect(buttonElement).toBeInstanceOf(HTMLElement); expect(buttonElement).toBeInstanceOf(HTMLElement);
}); });
}); });
describe('set vorgang', () => {
it('should set vorgang with eingang resource', () => {
const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource();
component.vorgang = vorgang;
expect(component.vorgangWithEingangResource).toBe(vorgang);
});
it('should set visible to true', () => {
const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource([
VorgangWithEingangLinkRel.ABSCHLIESSEN,
]);
component.vorgang = vorgang;
const isVisible: boolean = component.isVisible;
expect(isVisible).toBeTruthy();
});
it('should set visible to false', () => {
const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource();
component.vorgang = vorgang;
const isVisible: boolean = component.isVisible;
expect(isVisible).toBeFalsy();
});
it('should set visible to false if have createBescheidDraft link', () => {
const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource([
VorgangWithEingangLinkRel.ABSCHLIESSEN,
VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT,
]);
component.vorgang = vorgang;
const isVisible: boolean = component.isVisible;
expect(isVisible).toBeFalsy();
});
it('should set visible to false if have bescheidDraft link', () => {
const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource([
VorgangWithEingangLinkRel.ABSCHLIESSEN,
VorgangWithEingangLinkRel.BESCHEID_DRAFT,
]);
component.vorgang = vorgang;
const isVisible: boolean = component.isVisible;
expect(isVisible).toBeFalsy();
});
});
}); });
...@@ -22,13 +22,10 @@ ...@@ -22,13 +22,10 @@
* unter der Lizenz sind dem Lizenztext zu entnehmen. * unter der Lizenz sind dem Lizenztext zu entnehmen.
*/ */
import { CommandResource } from '@alfa-client/command-shared'; import { CommandResource } from '@alfa-client/command-shared';
import { StateResource, createEmptyStateResource } from '@alfa-client/tech-shared'; import { createEmptyStateResource, notHasLink, StateResource } from '@alfa-client/tech-shared';
import { import { VorgangCommandService, VorgangWithEingangLinkRel, VorgangWithEingangResource, } from '@alfa-client/vorgang-shared';
VorgangCommandService,
VorgangWithEingangLinkRel,
VorgangWithEingangResource,
} from '@alfa-client/vorgang-shared';
import { Component, Input, OnInit } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { hasLink } from '@ngxp/rest';
import { Observable, of } from 'rxjs'; import { Observable, of } from 'rxjs';
@Component({ @Component({
...@@ -37,9 +34,19 @@ import { Observable, of } from 'rxjs'; ...@@ -37,9 +34,19 @@ import { Observable, of } from 'rxjs';
styleUrls: ['./abschliessen-button.component.scss'], styleUrls: ['./abschliessen-button.component.scss'],
}) })
export class AbschliessenButtonComponent implements OnInit { export class AbschliessenButtonComponent implements OnInit {
@Input() vorgang: VorgangWithEingangResource; @Input() set vorgang(vorgang: VorgangWithEingangResource) {
this.vorgangWithEingangResource = vorgang;
this.isVisible =
hasLink(vorgang, VorgangWithEingangLinkRel.ABSCHLIESSEN) &&
notHasLink(vorgang, VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT) &&
notHasLink(vorgang, VorgangWithEingangLinkRel.BESCHEID_DRAFT);
}
@Input() showAsIconButton: boolean = false; @Input() showAsIconButton: boolean = false;
public isVisible: boolean = false;
vorgangWithEingangResource: VorgangWithEingangResource;
commandStateResource$: Observable<StateResource<CommandResource>> = of( commandStateResource$: Observable<StateResource<CommandResource>> = of(
createEmptyStateResource<CommandResource>(), createEmptyStateResource<CommandResource>(),
); );
...@@ -53,6 +60,8 @@ export class AbschliessenButtonComponent implements OnInit { ...@@ -53,6 +60,8 @@ export class AbschliessenButtonComponent implements OnInit {
} }
public abschliessen(): void { public abschliessen(): void {
this.commandStateResource$ = this.vorgangCommandService.abschliessen(this.vorgang); this.commandStateResource$ = this.vorgangCommandService.abschliessen(
this.vorgangWithEingangResource,
);
} }
} }
...@@ -15,6 +15,8 @@ import de.ozgcloud.alfa.bescheid.BescheidController.BescheidByVorgangController; ...@@ -15,6 +15,8 @@ import de.ozgcloud.alfa.bescheid.BescheidController.BescheidByVorgangController;
import de.ozgcloud.alfa.common.FeatureToggleProperties; import de.ozgcloud.alfa.common.FeatureToggleProperties;
import de.ozgcloud.alfa.common.ModelBuilder; import de.ozgcloud.alfa.common.ModelBuilder;
import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
import de.ozgcloud.alfa.common.user.CurrentUserService;
import de.ozgcloud.alfa.common.user.UserRole;
import de.ozgcloud.alfa.vorgang.Vorgang; import de.ozgcloud.alfa.vorgang.Vorgang;
import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -29,11 +31,12 @@ class BescheidVorgangProcessor implements RepresentationModelProcessor<EntityMod ...@@ -29,11 +31,12 @@ class BescheidVorgangProcessor implements RepresentationModelProcessor<EntityMod
private final BescheidService bescheidService; private final BescheidService bescheidService;
private final FeatureToggleProperties featureToggleProperties; private final FeatureToggleProperties featureToggleProperties;
private final CurrentUserService currentUserService;
@Override @Override
public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) {
var vorgang = model.getContent(); var vorgang = model.getContent();
if (Objects.isNull(vorgang)) { if (Objects.isNull(vorgang) || currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)) {
return model; return model;
} }
return ModelBuilder.fromModel(model) return ModelBuilder.fromModel(model)
......
...@@ -22,6 +22,8 @@ import org.springframework.hateoas.Link; ...@@ -22,6 +22,8 @@ import org.springframework.hateoas.Link;
import de.ozgcloud.alfa.common.FeatureToggleProperties; import de.ozgcloud.alfa.common.FeatureToggleProperties;
import de.ozgcloud.alfa.common.UserProfileUrlProvider; import de.ozgcloud.alfa.common.UserProfileUrlProvider;
import de.ozgcloud.alfa.common.user.CurrentUserService;
import de.ozgcloud.alfa.common.user.UserRole;
import de.ozgcloud.alfa.vorgang.Vorgang; import de.ozgcloud.alfa.vorgang.Vorgang;
import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
...@@ -35,8 +37,11 @@ class BescheidVorgangProcessorTest { ...@@ -35,8 +37,11 @@ class BescheidVorgangProcessorTest {
@Spy @Spy
@InjectMocks @InjectMocks
private BescheidVorgangProcessor processor; private BescheidVorgangProcessor processor;
@Mock @Mock
private BescheidService service; private BescheidService service;
@Mock
private CurrentUserService currentUserService;
@Mock @Mock
private FeatureToggleProperties featureToggleProperties; private FeatureToggleProperties featureToggleProperties;
...@@ -53,6 +58,16 @@ class BescheidVorgangProcessorTest { ...@@ -53,6 +58,16 @@ class BescheidVorgangProcessorTest {
assertThat(processedModel).isEqualTo(inputModel); assertThat(processedModel).isEqualTo(inputModel);
} }
@Test
void shouldReturnTheSameModelWhenUserIsEinheitlicherAnsprechpartner() {
var inputModel = EntityModel.of(VorgangWithEingangTestFactory.create());
when(currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true);
var processedModel = processor.process(inputModel);
assertThat(processedModel).isEqualTo(inputModel);
}
@Test @Test
void shouldCallExistsBescheid() { void shouldCallExistsBescheid() {
initUserProfileUrlProvider(new UserProfileUrlProvider()); initUserProfileUrlProvider(new UserProfileUrlProvider());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment