Skip to content
Snippets Groups Projects
Commit 581c8cee authored by Albert Bruns's avatar Albert Bruns
Browse files

Merge branch 'E2E-Updates' into 'main'

E2 e updates

See merge request !55
parents 1415fc53 3e1df5b0
Branches
Tags
1 merge request!55E2 e updates
Showing
with 49 additions and 195 deletions
......@@ -13,7 +13,7 @@ describe('Organisationseinheit zu Benutzer hinzufügen', () => {
const zustaendigeStelleSearchComponent: ZustaendigeStelleDialogE2EComponent = new ZustaendigeStelleDialogE2EComponent();
const organistationsEinheitOrdnungsamt: string = 'Ordnungsamt';
const organisationsEinheitDenkmalpflege: string = 'Denkmalpflege';
const organisationsEinheitWentorf: string = 'grundschule wentorf';
const organisationsEinheitLiegenschaften: string = 'Liegenschaften';
const organisationsEinheitNone: string = 'keine zuständige Stelle zugewiesen';
const vorname: string = 'Theo';
const nachname: string = 'Testuser';
......@@ -91,7 +91,7 @@ describe('Organisationseinheit zu Benutzer hinzufügen', () => {
it('should enable new Organisationseinheit for users after adding it', () => {
mainPage.clickOrganisationsEinheitenNavigationItem();
organisationsEinheitenComponent.clickHinzufuegen();
zustaendigeStelleSearchComponent.enterSearchTerm(organisationsEinheitWentorf);
zustaendigeStelleSearchComponent.enterSearchTerm(organisationsEinheitLiegenschaften);
zustaendigeStelleSearchComponent.getZustaendigeStelleTitle(0).then((title: string) => {
zustaendigeStelleSearchComponent.clickFoundItem(0);
});
......@@ -99,12 +99,12 @@ describe('Organisationseinheit zu Benutzer hinzufügen', () => {
mainPage.clickBenutzerNavigationItem();
benutzerPage.clickUserEntry(benutzername2);
exist(benutzerPage.getOrganisationsEinheitCheckbox(organisationsEinheitWentorf));
exist(benutzerPage.getOrganisationsEinheitCheckbox(organisationsEinheitLiegenschaften));
});
it('should add new Organisationseinheit to existing user', () => {
benutzerPage.clickOrganisationsEinheitCheckbox(organistationsEinheitOrdnungsamt);
benutzerPage.clickOrganisationsEinheitCheckbox(organisationsEinheitLiegenschaften);
benutzerPage.saveUser();
benutzerPage.stringExistsInUserEntry(organisationsEinheitWentorf, benutzername2);
benutzerPage.stringExistsInUserEntry(organisationsEinheitLiegenschaften, benutzername2);
});
});
......@@ -48,7 +48,7 @@ describe.skip('TODO: activate after fix for OZG-7391: show Organisationsheiten',
it('should show table of Organisationseinheiten', () => {
waitForSpinnerToDisappear();
mainPage.openOrganisationsEinheiten();
mainPage.clickOrganisationsEinheitenNavigationItem();
exist(organisationsEinheitenTab.getOrganisationsEinheitList());
});
......
/*
* Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
export class ButtonWithSpinnerE2EComponent {
private readonly locatorButton: string = 'icon-button';
public findButton(root) {
return root.findTestElementWithClass(this.locatorButton);
}
//TODO Methode aus der MeinPage verwenden
public waitToDisappear(root) {
root.should('not.have.descendants', '[data-test-class=spinner]');
}
}
......@@ -22,7 +22,6 @@
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
import { AttachmentContainerE2EComponent } from '../attachment/attachment.e2e.component';
import { ButtonWithSpinnerE2EComponent } from '../ui/button-with-spinner.e2e.component';
export class WiedervorlageE2EComponent {
private readonly locatorBetreffInput: string = 'Betreff-text-input';
......@@ -33,10 +32,7 @@ export class WiedervorlageE2EComponent {
private readonly locatorStatusDot: string = 'dot';
private readonly locatorSpeichernButton: string = 'speichern-button';
private readonly buttonWithSpinnerComponent: ButtonWithSpinnerE2EComponent =
new ButtonWithSpinnerE2EComponent();
private readonly attachmentContainer: AttachmentContainerE2EComponent =
new AttachmentContainerE2EComponent();
private readonly attachmentContainer: AttachmentContainerE2EComponent = new AttachmentContainerE2EComponent();
public getBetreff() {
return cy.getTestElement(this.locatorBetreffInput);
......@@ -63,9 +59,7 @@ export class WiedervorlageE2EComponent {
}
public getSpeichernButton() {
return this.buttonWithSpinnerComponent.findButton(
cy.getTestElement(this.locatorSpeichernButton),
);
return cy.getTestElement(this.locatorSpeichernButton);
}
public getAttachmentContainer(): AttachmentContainerE2EComponent {
......
......@@ -21,15 +21,10 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
import { ButtonWithSpinnerE2EComponent } from '../ui/button-with-spinner.e2e.component';
import { WiedervorlageInVorgangE2EComponent } from './wiedervorlage-in-vorgang.e2e.component';
export class WiedervorlagenInVorgangE2EComponent {
private readonly locatorCreateWiedervorlageButton: string = 'create-wiedervorlage';
private readonly buttonWithSpinnerComponent: ButtonWithSpinnerE2EComponent =
new ButtonWithSpinnerE2EComponent();
private readonly locatorRoot: string = 'wiedervorlagen-in-vorgang';
public getRoot() {
......
......@@ -39,6 +39,7 @@ import {
initVorgaenge,
objectIds,
} from '../../../support/vorgang-util';
import { VorgangSubnavigationE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-subnavigation';
registerLocaleData(localeDe, 'de', localeDeExtra);
......@@ -51,6 +52,7 @@ describe('Vorgang Detailansicht with formData', () => {
vorgangPage.getFormularDatenContainer();
const vorgangHeader: VorgangDetailHeaderE2EComponent = vorgangPage.getVorgangDetailHeader();
const vorgangSubnavigation: VorgangSubnavigationE2EComponent = new VorgangSubnavigationE2EComponent();
const ort: string = 'Ort';
const sh_strasse: string = 'Strasse';
......@@ -135,33 +137,12 @@ describe('Vorgang Detailansicht with formData', () => {
contains(vorgangDatenFormular.getRoot(), 'sh_strasse');
});
});
// SKIP: Metadaten sind aktuell aus
describe('click on "Metadaten" tab', () => {
it.skip('should show on click on tab', () => {
vorgangDatenFormular.getMetadatenTab().click();
exist(vorgangDatenFormular.getMetadaten());
});
it.skip('should show "emailadresse"', () => {
contains(vorgangDatenFormular.getRoot(), 'emailadresse');
});
it.skip('should show "postleitzahl"', () => {
contains(vorgangDatenFormular.getRoot(), 'postleitzahl');
});
it('should navigate back to Vorgang List', () => {
vorgangPage.getSubnavigation().getBackButton().click();
waitForSpinnerToDisappear();
});
});
});
describe('navigate to vorgang detail (with labels)', () => {
describe('click on vorgang in list', () => {
it('should show header', () => {
vorgangSubnavigation.back();
vorgangList.getListItem(vorgangWithLabels.name).getRoot().click();
waitForSpinnerToDisappear();
......@@ -193,20 +174,5 @@ describe('Vorgang Detailansicht with formData', () => {
});
});
describe.skip('click on "Metadaten" tab', () => {
it('should show on click on tab', () => {
vorgangDatenFormular.getMetadatenTab().click();
exist(vorgangDatenFormular.getMetadaten());
});
it('should show "E-Mail Adresse"', () => {
contains(vorgangDatenFormular.getRoot(), emailadresse);
});
it('should show "PLZ"', () => {
contains(vorgangDatenFormular.getRoot(), postleitzahl);
});
});
});
});
......@@ -107,19 +107,6 @@ describe('Vorgang Detailansicht', () => {
});
});
// SKIP: Metada sind aktuell disabled
describe.skip('metadaten in tab', () => {
it('should show on click on tab', () => {
vorgangDatenFormular.getMetadatenTab().click();
exist(vorgangDatenFormular.getMetadaten());
});
it('should show "empfangendestelle"', () => {
contains(vorgangDatenFormular.getRoot(), vorgang.eingangs[0].formData.empfangendestelle.emailadresse);
});
});
describe('antragdaten in tab', () => {
it('should show on click on tab', () => {
vorgangDatenFormular.getAntragdatenTab().click();
......
......@@ -115,40 +115,23 @@ describe.skip('Vorgang vorprüfen', () => {
});
it('should open "more menu"', () => {
//nur testweise
//kommentarContainer.getHinzufuegenButton().click();
//kommentarContainer.getTextInput().clear().type(kommentarText);
//kommentarContainer.getFormularSpeichernButton().click();
waitForSpinnerToDisappear();
//
vorgangMoreMenu.getButton().click();
exist(vorgangMoreMenu.getRoot());
});
it('should show Prüfung item', () => {
//exist(menuItem.getRoot());?
});
it('should show "Vorgang vorpüfen" button', () => {
exist(menuItem.getButton());
});
it('should have a positive comment after Prüfung', () => {
it.skip('AKTUELL FEHLER: should have a positive comment after Prüfung', () => {
menuItem.getButton().click();
//waitForSpinnerToDisappear();
exist(kommentarContainer.getKommentar(kommentarText).getRoot());
//check for positive comment
});
it('should close menu after Prüfung', () => {
//am Ende entfernen
vorgangMoreMenu.getButton().click();
//notExist(menuItem.getRoot());
vorgangPage.getSubnavigation().getBackButton().click();
});
});
......@@ -165,22 +148,10 @@ describe.skip('Vorgang vorprüfen', () => {
exist(vorgangPage.getVorgangDetailHeader().getRoot());
});
it('should have a negative comment after Prüfung', () => {
it.skip('AKTUELL FEHLER: should have a negative comment after Prüfung', () => {
vorgangMoreMenu.getButton().click();
menuItem.getButton().click();
//nur testweise
//kommentarContainer.getHinzufuegenButton().click();
//kommentarContainer.getTextInput().clear().type(kommentarText);
//kommentarContainer.getFormularSpeichernButton().click();
waitForSpinnerToDisappear();
//
waitForSpinnerToDisappear();
exist(kommentarContainer.getKommentar(kommentarText).getRoot());
//check for negative comment
});
it('should close menu after Prüfung', () => {
......@@ -190,20 +161,12 @@ describe.skip('Vorgang vorprüfen', () => {
});
});
describe('button not available on other Vorgänge', () => {
const menuItem: VorgangMoreMenuVorpruefenItemE2EComponent =
vorgangMoreMenu.getVorpruefenItem();
it('should open Vorgang-Detail-Page', () => {
describe('menu not available on other Vorgänge', () => {
it('should not show more menu on other Vorgänge', () => {
vorgangList.getListItem(vorgangOhnePruefung.name).getRoot().click();
waitForSpinnerToDisappear();
exist(vorgangPage.getVorgangDetailHeader().getRoot());
});
it('more menu should not contain Vorprüfen button', () => {
vorgangMoreMenu.getButton().click();
notExist(menuItem.getRoot());
notExist(vorgangMoreMenu.getRoot());
});
});
});
......
......@@ -153,8 +153,9 @@ describe('Vorgang wiedereroeffnen', () => {
contains(snackbar.getMessage(), VorgangMessagesE2E.WIEDEREROEFFNET);
});
it('should close snackbar on revoke', () => {
it('should click on snackbar revoke', () => {
snackbar.getRevokeButton().click();
wait(500);
waitForSpinnerToDisappear();
notExist(snackbar.getMessage());
......@@ -258,7 +259,7 @@ describe('Vorgang wiedereroeffnen', () => {
contains(snackbar.getMessage(), VorgangMessagesE2E.WIEDEREROEFFNET);
});
it('should close snackbar on revoke', () => {
it('should click snackbar revoke', () => {
snackbar.getRevokeButton().click();
wait(500);
waitForSpinnerToDisappear();
......
......@@ -21,13 +21,13 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
import { createStateResource, StateResource } from '@alfa-client/tech-shared';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { createCommandErrorStateResource, createCommandResource } from 'libs/command-shared/test/command';
import { createCommandErrorStateResource } from 'libs/command-shared/test/command';
import { createApiError } from 'libs/tech-shared/test/error';
import { createDummyResource } from '../../../../tech-shared/test/resource';
import { ButtonWithSpinnerComponent } from './button-with-spinner.component';
import * as ResourceUtils from 'libs/tech-shared/src/lib/resource/resource.util';
describe('ButtonWithSpinnerComponent', () => {
let component: ButtonWithSpinnerComponent;
let fixture: ComponentFixture<ButtonWithSpinnerComponent>;
......@@ -46,39 +46,25 @@ describe('ButtonWithSpinnerComponent', () => {
expect(component).toBeTruthy();
});
describe('onInit', () => {
it('should call getStateResource', () => {
component.getStateResource = jest.fn();
describe('set stateResource', () => {
it('should set stateResource', () => {
const stateResource: StateResource<unknown> = createStateResource(createDummyResource());
component.ngOnInit();
component.stateResource = stateResource;
expect(component.getStateResource).toHaveBeenCalled();
});
expect(component._stateResource).toBe(stateResource);
});
describe('getStateResource', () => {
it('should return stateResource', () => {
component.stateResource = ResourceUtils.createStateResource(createCommandResource());
component.getStateResource();
const valid: boolean = ResourceUtils.isValidStateResource(component.stateResource);
expect(valid).toBeTruthy();
});
it('should return empty stateResource', () => {
const spy = jest.spyOn(ResourceUtils, 'createEmptyStateResource');
it('should not set stateResource', () => {
component.stateResource = null;
component.getStateResource();
expect(spy).toHaveBeenCalled();
expect(component._stateResource).not.toBe(null);
});
});
describe('isLoading', () => {
it('should return false', () => {
component.stateResource.loading = component.stateResource.reload = false;
component._stateResource.loading = component._stateResource.reload = false;
const isLoading: boolean = component.isLoading;
......@@ -86,8 +72,8 @@ describe('ButtonWithSpinnerComponent', () => {
});
it('should return true if stateResource is loading', () => {
component.stateResource.loading = true;
component.stateResource.reload = false;
component._stateResource.loading = true;
component._stateResource.reload = false;
const isLoading: boolean = component.isLoading;
......@@ -95,8 +81,8 @@ describe('ButtonWithSpinnerComponent', () => {
});
it('should return true if stateResource is reloading', () => {
component.stateResource.loading = false;
component.stateResource.reload = true;
component._stateResource.loading = false;
component._stateResource.reload = true;
const isLoading: boolean = component.isLoading;
......@@ -106,7 +92,7 @@ describe('ButtonWithSpinnerComponent', () => {
describe('isError', () => {
it('should return false if error is not set', () => {
component.stateResource.error = null;
component._stateResource.error = null;
const isError: boolean = component.isError;
......@@ -114,7 +100,7 @@ describe('ButtonWithSpinnerComponent', () => {
});
it('should return false if error is set and error is ApiError', () => {
component.stateResource.error = createApiError();
component._stateResource.error = createApiError();
const isError: boolean = component.isError;
......@@ -122,7 +108,7 @@ describe('ButtonWithSpinnerComponent', () => {
});
it('should return true if error is set and error is not ApiError', () => {
component.stateResource = createCommandErrorStateResource();
component._stateResource = createCommandErrorStateResource();
const isError: boolean = component.isError;
......
......@@ -24,7 +24,7 @@
import { CommandResource, hasCommandError } from '@alfa-client/command-shared';
import { StateResource, createEmptyStateResource, isLoaded } from '@alfa-client/tech-shared';
import { CommonModule } from '@angular/common';
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { ButtonComponent, ErrorMessageComponent, buttonVariants } from '@ods/system';
import { VariantProps } from 'class-variance-authority';
import { isNil } from 'lodash-es';
......@@ -49,28 +49,24 @@ type ButtonVariants = VariantProps<typeof buttonVariants>;
<ng-content icon select="[icon]" />
</ods-button>`,
})
export class ButtonWithSpinnerComponent implements OnInit {
export class ButtonWithSpinnerComponent {
@Input() set stateResource(value: StateResource<unknown>) {
if (!isNil(value)) this._stateResource = value;
}
@Input() text: string = '';
@Input() dataTestId: string = '';
@Input() stateResource: StateResource<unknown>;
@Input() variant: ButtonVariants['variant'] = 'primary';
@Input() size: ButtonVariants['size'] = 'medium';
@Output() public clickEmitter: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();
ngOnInit(): void {
this.stateResource = this.getStateResource();
}
getStateResource(): StateResource<unknown> {
return isNil(this.stateResource) ? createEmptyStateResource() : this.stateResource;
}
_stateResource: StateResource<unknown> = createEmptyStateResource();
get isLoading(): boolean {
return this.stateResource.loading || this.stateResource.reload;
return this._stateResource.loading || this._stateResource.reload;
}
get isError(): boolean {
return isLoaded(this.stateResource) && hasCommandError(<CommandResource>this.stateResource.resource);
return isLoaded(this._stateResource) && hasCommandError(<CommandResource>this._stateResource.resource);
}
}
......@@ -26,20 +26,21 @@
@if (showAsIconButton) {
<ods-button-with-spinner
[stateResource]="submitInProgress$ | async"
(clickEmitter)="submit()"
tooltip="Wiedervorlage speichern"
variant="ghost"
size="fit"
(clickEmitter)="submit()"
dataTestId="speichern-icon-button"
>
<ods-save-icon icon class="fill-text" />
</ods-button-with-spinner>
} @else {
<ods-button-with-spinner
data-test-id="speichern-button"
[stateResource]="submitInProgress$ | async"
(clickEmitter)="submit()"
text="Speichern"
variant="outline"
(clickEmitter)="submit()"
dataTestId="speichern-button"
>
<ods-save-icon icon />
</ods-button-with-spinner>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment