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

fix more broken E2E tests cause of button changes

parent e74f3c30
No related branches found
No related tags found
1 merge request!55E2 e updates
/*
* 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() {
......
......@@ -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