diff --git a/alfa-client/apps/admin-e2e/docker-compose.yml b/alfa-client/apps/admin-e2e/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..2be8b11e32f65cf23ff1c7566028cf5d6f13ef8b --- /dev/null +++ b/alfa-client/apps/admin-e2e/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3' + +volumes: + mongodb: + +services: + mongodb: + image: mongo:7 + ports: + - 27017:27017 + volumes: + - mongodb:/data/db + healthcheck: + test: ["CMD", "mongosh", "--eval", "db.settings.find()"] + interval: 10s + timeout: 5s + retries: 5 + + administration: + image: docker.ozg-sh.de/administration:${ADMINISTRATION_DOCKER_IMAGE:-snapshot-latest} + environment: + - SPRING_PROFILES_ACTIVE=${SPRING_PROFILE:-local,remotekc} + - SPRING_DATA_MONGODB_URI=mongodb://mongodb:27017/config-db + ports: + - 8080:8080 + depends_on: + mongodb: + condition: service_healthy diff --git a/alfa-client/apps/admin-e2e/src/e2e/login/login-logout.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/login/login-logout.cy.ts new file mode 100644 index 0000000000000000000000000000000000000000..323222de657468487d7376c29de8aaa384524408 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/e2e/login/login-logout.cy.ts @@ -0,0 +1,49 @@ +import { App } from 'apps/admin-e2e/src/model/app'; +import { getApp } from 'apps/admin-e2e/src/support/app-util'; +import { getUserSabine } from 'apps/alfa-e2e/src/support/user-util'; +import { UserE2E } from '../../model/user'; +import { HeaderE2EComponent } from '../../page-objects/header.po'; +import { MainPage } from '../../page-objects/main.po'; + +describe('Login and Logout', () => { + const app: App = getApp(); + const user: UserE2E = getUserSabine(); + + const mainPage: MainPage = new MainPage(); + const header: HeaderE2EComponent = mainPage.getHeader(); + + before(() => { + //cy.logout(); + }); + + it('login as test user', () => { + cy.visit('') + .get('#kc-login') + .should('exist') + .get('#username') + .type(user.name) + .get('#password') + .type(user.password) + .get('#kc-login') + .click(); + }); + + /*it('should display Alfa logo', () => { + waitForSpinnerToDisappear(); + + exist(header.getLogo()); + }); + + it('should keep user logged in on reload page', () => { + reload(); + waitForSpinnerToDisappear(); + + exist(header.getLogo()); + }); + + it('should logout', () => { + header.getCurrentUserProfile().logout(); + + exist(cy.get('#kc-login')); + });*/ +}); diff --git a/alfa-client/apps/admin-e2e/src/e2e/navigation/navigation.cy.ts b/alfa-client/apps/admin-e2e/src/e2e/navigation/navigation.cy.ts new file mode 100644 index 0000000000000000000000000000000000000000..9268aee2937b2ccedf333a527abf8674f495de79 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/e2e/navigation/navigation.cy.ts @@ -0,0 +1,169 @@ +import { NavigationE2EComponent } from 'apps/alfa-e2e/src/components/navigation/navigation.e2e.component'; +import { VorgangListE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-list.e2e.component'; +import { VorgangSearchE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-search.e2e.component'; +import { VorgangViewsE2EComponent } from 'apps/alfa-e2e/src/components/vorgang/vorgang-views.e2e.component'; +import { UsermanagerUserE2E } from 'apps/alfa-e2e/src/model/usermanager'; +import { VorgangE2E } from 'apps/alfa-e2e/src/model/vorgang'; +import { HeaderE2EComponent } from 'apps/alfa-e2e/src/page-objects/header.po'; +import { MainPage, waitForSpinnerToDisappear } from 'apps/alfa-e2e/src/page-objects/main.po'; +import { dropCollections, dropSearchIndex } from 'apps/alfa-e2e/src/support/cypress-helper'; +import { enterWith, exist, haveText, notExist } from 'apps/alfa-e2e/src/support/cypress.util'; +import { + getUserManagerUserSabine, + getUserSabineId, + initUsermanagerUsers, + loginAsSabine, +} from 'apps/alfa-e2e/src/support/user-util'; +import { + buildVorgang, + createVorgang, + initSearchIndex, + initVorgaenge, + objectIds, +} from 'apps/alfa-e2e/src/support/vorgang-util'; + +describe('Navigation', () => { + const mainPage: MainPage = new MainPage(); + + const header: HeaderE2EComponent = mainPage.getHeader(); + const vorgangSearch: VorgangSearchE2EComponent = header.getVorgangSearch(); + + const vorgangList: VorgangListE2EComponent = mainPage.getVorgangList(); + + const navigation: NavigationE2EComponent = mainPage.getNavigation(); + + const views: VorgangViewsE2EComponent = mainPage.getViews(); + + const usermanagerUserSabine: UsermanagerUserE2E = getUserManagerUserSabine(); + + const vorgang: VorgangE2E = createVorgang(); + const vorgangNotBeFiltered: VorgangE2E = { + ...buildVorgang(objectIds[0], 'vorgangNotBeFiltered'), + }; + const vorgangAssigned: VorgangE2E = { + ...buildVorgang(objectIds[1], 'vorgangAssigned'), + assignedTo: getUserSabineId(), + }; + const vorgangAssignedNotBeFiltered: VorgangE2E = { + ...buildVorgang(objectIds[2], 'vorgangAssignedNotBeFiltered'), + assignedTo: getUserSabineId(), + }; + + const searchString: string = 'NotBeFiltered'; + + before(() => { + initVorgaenge([vorgang, vorgangNotBeFiltered, vorgangAssigned, vorgangAssignedNotBeFiltered]); + initSearchIndex([vorgang, vorgangNotBeFiltered, vorgangAssigned, vorgangAssignedNotBeFiltered]); + initUsermanagerUsers(); + + loginAsSabine(); + + waitForSpinnerToDisappear(); + exist(vorgangList.getRoot()); + navigation.getAlleFilter().click(); + waitForSpinnerToDisappear(); + exist(vorgangList.getRoot()); + }); + + after(() => { + dropCollections(); + dropSearchIndex(); + }); + + describe('navigation item myVorgaenge', () => { + it('should exists', () => { + exist(navigation.getMeineVorgaengeFilter()); + }); + }); + + describe('navigation item allVorgaenge', () => { + it('should exists', () => { + exist(navigation.getAlleFilter()); + }); + }); + + describe('click on my vorgaenge', () => { + it('should hide not to user assigned vorgaenge', () => { + navigation.getMeineVorgaengeFilter().click(); + waitForSpinnerToDisappear(); + + notExist(vorgangList.getListItem(vorgang.name).getRoot()); + notExist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); + exist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); + exist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); + }); + + it('should hide not matching vorgaenge after do search', () => { + doSearch(searchString); + waitForSpinnerToDisappear(); + + notExist(vorgangList.getListItem(vorgang.name).getRoot()); + notExist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); + notExist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); + exist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); + }); + }); + + describe('click on all vorgaenge', () => { + it('should show all vorgaenge', () => { + navigation.getAlleFilter().click(); + waitForSpinnerToDisappear(); + views.getVorgangList().getRoot().click(); + + waitForSpinnerToDisappear(); + + exist(vorgangList.getListItem(vorgang.name).getRoot()); + exist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); + exist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); + exist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); + }); + + it('should hide not matching vorgaenge after do search', () => { + doSearch(searchString); + waitForSpinnerToDisappear(); + + notExist(vorgangList.getListItem(vorgang.name).getRoot()); + exist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); + notExist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); + exist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); + }); + }); + + describe('click on Suche view', () => { + it('and alle filter should show empty list', () => { + vorgangSearch.getClearButton().click(); + + waitForSpinnerToDisappear(); + + views.getSuche().getRoot().click(); + + waitForSpinnerToDisappear(); + + notExist(vorgangList.getListItem(vorgang.name).getRoot()); + notExist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); + notExist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); + notExist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); + + //TODO sauber implementieren + haveText(cy.getTestElement('empty-list-text'), 'Bitte geben Sie einen Suchbegriff ein.'); + }); + + it('and meine filter should show empty list', () => { + navigation.getMeineVorgaengeFilter().click(); + + waitForSpinnerToDisappear(); + + notExist(vorgangList.getListItem(vorgang.name).getRoot()); + notExist(vorgangList.getListItem(vorgangNotBeFiltered.name).getRoot()); + notExist(vorgangList.getListItem(vorgangAssigned.name).getRoot()); + notExist(vorgangList.getListItem(vorgangAssignedNotBeFiltered.name).getRoot()); + + //TODO sauber implementieren + haveText(cy.getTestElement('empty-list-text'), 'Bitte geben Sie einen Suchbegriff ein.'); + }); + }); + + function doSearch(searchString: string): void { + enterWith(vorgangSearch.getInput(), searchString); + } +}); diff --git a/alfa-client/apps/admin-e2e/src/fixtures/main.json b/alfa-client/apps/admin-e2e/src/fixtures/main.json new file mode 100644 index 0000000000000000000000000000000000000000..1a9105d4281bb016cd9670da714fb1fcd894f688 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/fixtures/main.json @@ -0,0 +1,3 @@ +{ + "title": "Admin Alfa" +} diff --git a/alfa-client/apps/admin-e2e/src/model/app.ts b/alfa-client/apps/admin-e2e/src/model/app.ts new file mode 100644 index 0000000000000000000000000000000000000000..f1d3b803032cb4355e644612dc97e5ec538a7ec1 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/model/app.ts @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2022 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 App { + title: string; +} diff --git a/alfa-client/apps/admin-e2e/src/model/user.ts b/alfa-client/apps/admin-e2e/src/model/user.ts new file mode 100644 index 0000000000000000000000000000000000000000..63a64a6f8371e62e2ce152c9cac268449376276e --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/model/user.ts @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2022 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 interface UserE2E { + uuid: string; + id: string; + name: string; + password: string; + firstName: string; + lastName: string; + fullName: string; + initials: string; + dataTestId: string; +} diff --git a/alfa-client/apps/admin-e2e/src/page-objects/header.po.ts b/alfa-client/apps/admin-e2e/src/page-objects/header.po.ts new file mode 100644 index 0000000000000000000000000000000000000000..dd9051508d5c05c74c0e2628963dbf15c4af7e75 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/page-objects/header.po.ts @@ -0,0 +1,39 @@ +/*import { HelpMenuE2EComponent } from '../components/user-assistance/help-menu.component.e2e'; +import { CurrentUserProfileE2EComponent } from '../components/user-profile/current-user-profile.component.e2e'; +import { UserSettingsE2EComponent } from '../components/user-settings/user-settings.component.e2e'; +import { VorgangSearchE2EComponent } from '../components/vorgang/vorgang-search.e2e.component';*/ + +export class HeaderE2EComponent { + private readonly locatorLogo: string = 'alfa-logo'; + private readonly locatorRoot: string = 'header'; + + /*private readonly helpMenu: HelpMenuE2EComponent = new HelpMenuE2EComponent(); + private readonly userSettings: UserSettingsE2EComponent = new UserSettingsE2EComponent(); + private readonly currentUserProfile: CurrentUserProfileE2EComponent = + new CurrentUserProfileE2EComponent(); + private readonly vorgangSearch: VorgangSearchE2EComponent = new VorgangSearchE2EComponent(); + + public getRoot() { + return cy.getTestElement(this.locatorRoot); + } + + public getLogo() { + return cy.getTestElement(this.locatorLogo); + } + + public getVorgangSearch(): VorgangSearchE2EComponent { + return this.vorgangSearch; + } + + public getHelpMenu(): HelpMenuE2EComponent { + return this.helpMenu; + } + + public getUserSettings(): UserSettingsE2EComponent { + return this.userSettings; + } + + public getCurrentUserProfile(): CurrentUserProfileE2EComponent { + return this.currentUserProfile; + }*/ +} diff --git a/alfa-client/apps/admin-e2e/src/page-objects/main.po.ts b/alfa-client/apps/admin-e2e/src/page-objects/main.po.ts new file mode 100644 index 0000000000000000000000000000000000000000..4c4a6f1acc97d7cc9e893c758b094bbdf57dd6d9 --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/page-objects/main.po.ts @@ -0,0 +1,86 @@ +/*import { BasicDialogE2EComponent } from '../components/basic-dialog/basic-dialog.e2e.component'; +import { BuildInfoE2EComponent } from '../components/buildinfo/buildinfo.e2e.component'; +import { HintE2EComponent } from '../components/hint/hint.component.e2e'; +import { NavigationE2EComponent } from '../components/navigation/navigation.e2e.component'; +import { + ConnectionTimeoutRetryDialogE2EComponent, + ConnectionTimeoutRetryFailDialogE2EComponent, +} from '../components/ui/connection-timeout-retry-dialog.e2e.component'; +import { InternalServerErrorDialogE2EComponent } from '../components/ui/internal-server-error-diaog.e2e.component'; +import { SnackBarE2EComponent } from '../components/ui/snackbar.e2e.component'; +import { VorgangListE2EComponent } from '../components/vorgang/vorgang-list.e2e.component'; +import { VorgangViewsE2EComponent } from '../components/vorgang/vorgang-views.e2e.component';*/ + +import { HeaderE2EComponent } from './header.po'; + +export class MainPage { + private readonly header: HeaderE2EComponent = new HeaderE2EComponent(); + + public getHeader(): HeaderE2EComponent { + return this.header; + } + /*private readonly buildInfo: BuildInfoE2EComponent = new BuildInfoE2EComponent(); + + private readonly navigation: NavigationE2EComponent = new NavigationE2EComponent(); + private readonly views: VorgangViewsE2EComponent = new VorgangViewsE2EComponent(); + private readonly snackBar: SnackBarE2EComponent = new SnackBarE2EComponent(); + private readonly vorgangList: VorgangListE2EComponent = new VorgangListE2EComponent(); + private readonly internalServerErrorDialog: InternalServerErrorDialogE2EComponent = + new InternalServerErrorDialogE2EComponent(); + private readonly connectionTimeoutRetryDialog: ConnectionTimeoutRetryDialogE2EComponent = + new ConnectionTimeoutRetryDialogE2EComponent(); + private readonly connectionTimeoutRetryFailDialog: ConnectionTimeoutRetryFailDialogE2EComponent = + new ConnectionTimeoutRetryFailDialogE2EComponent(); + private readonly basicDialog: BasicDialogE2EComponent = new BasicDialogE2EComponent(); + private readonly hint: HintE2EComponent = new HintE2EComponent(); + + public getBuildInfo(): BuildInfoE2EComponent { + return this.buildInfo; + } + + + + public getNavigation(): NavigationE2EComponent { + return this.navigation; + } + + public getViews(): VorgangViewsE2EComponent { + return this.views; + } + + public getSnackBar(): SnackBarE2EComponent { + return this.snackBar; + } + + public getVorgangList(): VorgangListE2EComponent { + return this.vorgangList; + } + + public getInternalServerErrorDialog(): InternalServerErrorDialogE2EComponent { + return this.internalServerErrorDialog; + } + + public getConnectionTimeoutRetryDialog(): ConnectionTimeoutRetryDialogE2EComponent { + return this.connectionTimeoutRetryDialog; + } + + public getConnectionTimeoutRetryFailDialog(): ConnectionTimeoutRetryFailDialogE2EComponent { + return this.connectionTimeoutRetryFailDialog; + } + + public getBasicDialog(): BasicDialogE2EComponent { + return this.basicDialog; + } + + public getHint(): HintE2EComponent { + return this.hint; + }*/ +} + +/*export function waitForSpinnerToDisappear(): boolean { + return cy.getTestElementWithClass('spinner').should('not.exist'); +} + +export function waitforSpinnerToAppear(): void { + // exist(cy.getTestElementWithClass('spinner')); +}*/ diff --git a/alfa-client/apps/admin-e2e/src/support/app-util.ts b/alfa-client/apps/admin-e2e/src/support/app-util.ts new file mode 100644 index 0000000000000000000000000000000000000000..d5a480c1461cc95c689024f65cdbeacf9777a02c --- /dev/null +++ b/alfa-client/apps/admin-e2e/src/support/app-util.ts @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2022 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 { App } from '../model/app'; + +//TODO main.json in app.json umbenennen +const appFixture: App = require('../fixtures/main.json'); + +export function getApp(): App { + return appFixture; +} diff --git a/alfa-client/package-lock.json b/alfa-client/package-lock.json index 8945df22fc8c94eac9c02663aee4892aa033906a..a115c4a4f72581aaba5c368c309c7dcd27c3984d 100644 --- a/alfa-client/package-lock.json +++ b/alfa-client/package-lock.json @@ -12,7 +12,6 @@ "@angular/animations": "17.3.10", "@angular/cdk": "17.3.10", "@angular/common": "17.3.10", - "@angular/compiler": "17.3.10", "@angular/core": "17.3.10", "@angular/forms": "17.3.10", "@angular/material": "17.3.10", @@ -54,6 +53,7 @@ "@angular-eslint/eslint-plugin-template": "17.3.0", "@angular-eslint/template-parser": "17.3.0", "@angular/cli": "~17.3.8", + "@angular/compiler": "^17.3.10", "@angular/compiler-cli": "17.3.10", "@angular/language-service": "17.3.10", "@bahmutov/cypress-extends": "1.1.0", @@ -8741,12 +8741,12 @@ } }, "node_modules/@nx/angular/node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", - "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dependencies": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -8757,12 +8757,12 @@ } }, "node_modules/@nx/angular/node_modules/@typescript-eslint/type-utils": { - "version": "7.13.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", - "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dependencies": { - "@typescript-eslint/typescript-estree": "7.13.0", - "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -8783,9 +8783,9 @@ } }, "node_modules/@nx/angular/node_modules/@typescript-eslint/types": { - "version": "7.13.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/types/-/types-7.13.0.tgz", - "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -8795,12 +8795,12 @@ } }, "node_modules/@nx/angular/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", - "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dependencies": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -8822,9 +8822,9 @@ } }, "node_modules/@nx/angular/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8836,14 +8836,14 @@ } }, "node_modules/@nx/angular/node_modules/@typescript-eslint/utils": { - "version": "7.13.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/utils/-/utils-7.13.0.tgz", - "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/typescript-estree": "7.13.0" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -8857,11 +8857,11 @@ } }, "node_modules/@nx/angular/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", - "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", + "version": "7.18.0", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dependencies": { - "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -10058,9 +10058,9 @@ } }, "node_modules/@nx/webpack/node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "http://nexus.ozg-sh.de/repository/npm-proxy/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" diff --git a/alfa-client/package.json b/alfa-client/package.json index fe89e4b34f2d4a287e07754f0244462d4fec01e1..1a7380bbf4c7258f411837abd4b326fe5125fdec 100644 --- a/alfa-client/package.json +++ b/alfa-client/package.json @@ -43,6 +43,7 @@ "cypress:version": "npx cypress version", "cypress:install": "npx cypress install", "cypress:open": "npx cypress open --project apps/alfa-e2e", + "cypress:open-admin": "npx cypress open --project apps/admin-e2e", "workspace-generator": "nx workspace-generator", "storybook": "nx storybook design-system", "ci-storybook": "nx build-storybook design-system && nx container design-system" @@ -52,7 +53,6 @@ "@angular/animations": "17.3.10", "@angular/cdk": "17.3.10", "@angular/common": "17.3.10", - "@angular/compiler": "17.3.10", "@angular/core": "17.3.10", "@angular/forms": "17.3.10", "@angular/material": "17.3.10", @@ -94,6 +94,7 @@ "@angular-eslint/eslint-plugin-template": "17.3.0", "@angular-eslint/template-parser": "17.3.0", "@angular/cli": "~17.3.8", + "@angular/compiler": "^17.3.10", "@angular/compiler-cli": "17.3.10", "@angular/language-service": "17.3.10", "@bahmutov/cypress-extends": "1.1.0", @@ -162,4 +163,4 @@ "ts-node": "10.9.1", "typescript": "5.4.5" } -} \ No newline at end of file +}