Skip to content
Snippets Groups Projects
cypress-helper.ts 3.47 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * Copyright (C) 2024 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.
     */
    
    import { HttpMethod } from '@alfa-client/tech-shared';
    
    import { Interception, RouteHandler, RouteMatcher } from 'cypress/types/net-stubbing';
    
    import { OrganisationsEinheitE2E } from './organisationseinheit';
    
    enum CypressTasks {
      DROP_COLLECTIONS = 'dropCollections',
      INIT_ORGANISATIONS_EINHEIT_DATA = 'initOrganisationsEinheitData',
    }
    
    enum MongoCollections {
      ORGANISATIONS_EINHEIT = 'organisationsEinheit',
    
      AGGREGATION_MAPPING = 'aggregationMapping',
    
    
    const DOWNLOAD_FOLDER: string = 'cypress/downloads';
    
    export function visitUrl(url: string): void {
      cy.visit(url);
    }
    
    export function scrollToWindowBottom(): void {
      cy.window().scrollTo('bottom');
    }
    
    export function intercept(method: string, url: string): Cypress.Chainable<null> {
      return cy.intercept(method, url);
    }
    
    
    export function interceptWithResponse(method: HttpMethod, url: RouteMatcher, response: RouteHandler): Cypress.Chainable<null> {
    
      return cy.intercept(method, url, response);
    }
    
    export function waitOfInterceptor(interceptor: string): Cypress.Chainable<Interception> {
      return cy.wait('@' + interceptor);
    }
    
    export function getTestElement(value: string) {
      return cy.getTestElement(value);
    }
    
    export function getElement(value: string) {
      return cy.get(value);
    }
    
    export function urlShouldInclude(text: string) {
      return cy.url().should('include', text);
    }
    
    
    export function urlShouldEndsWith(route: string): Cypress.Chainable<any> {
    
      return cy.url().should('match', new RegExp(`/${route}$`));
    }
    
    
    //TODO: anders loesen -> bad practice
    export function wait(ms: number, reason = ''): void {
      cy.wait(ms);
      if (reason) {
        console.log(`Had to wait ${ms}ms because of: ${reason}`);
      }
    }
    
    //
    
    export function reload(): void {
      cy.reload();
    }
    
    export function readFileFromDownloads(fileName: string): Cypress.Chainable<any> {
      return cy.readFile(`${DOWNLOAD_FOLDER}/${fileName}`, { timeout: 5000 });
    }
    
    export function pressTab(): void {
      cy.realPress('Tab');
    }
    
    //Config
    export function getBaseUrl(): string {
    
      return Cypress.config().baseUrl as string;
    
    }
    
    //Env
    export function getCypressEnv(value: string) {
      return Cypress.env(value);
    }
    
    
    export function initOrganisationsEinheitenData(data: OrganisationsEinheitE2E[]): void {
      cy.task(CypressTasks.DROP_COLLECTIONS, [MongoCollections.ORGANISATIONS_EINHEIT]);
      cy.task(CypressTasks.INIT_ORGANISATIONS_EINHEIT_DATA, { collection: MongoCollections.ORGANISATIONS_EINHEIT, data });
    }
    
    export function dropCollections() {
    
      cy.task(CypressTasks.DROP_COLLECTIONS, [MongoCollections.ORGANISATIONS_EINHEIT, MongoCollections.AGGREGATION_MAPPING]);