From d67708387eff4e6509fdddf6cf64cf78ec6b5ebb Mon Sep 17 00:00:00 2001
From: Alexander Reifschneider <alexander.reifschneider@mgm-tp.com>
Date: Tue, 29 Apr 2025 14:55:00 +0200
Subject: [PATCH] OZG-7774 move statistik menu to menu container

---
 .../apps/admin/src/app/app.component.html     |  3 -
 .../apps/admin/src/app/app.component.spec.ts  |  2 +-
 .../apps/admin/src/app/app.component.ts       |  3 +-
 .../src/lib/configuration.linkrel.ts          |  2 +
 .../libs/admin/configuration/src/index.ts     |  1 -
 .../menu-container.component.html             |  3 +-
 .../menu-container.component.spec.ts          |  9 +-
 .../menu-container.component.ts               |  3 +-
 .../statistik-menu.component.html             | 26 +++++
 .../statistik-menu.component.spec.ts          | 94 +++++++++++++++++++
 .../statistik-menu.component.ts               |  4 +-
 .../statistik-menu-container.component.html   |  1 -
 ...statistik-menu-container.component.spec.ts | 55 -----------
 .../statistik-menu-container.component.ts     | 22 -----
 .../statistik-menu.component.html             | 18 ----
 .../statistik-menu.component.spec.ts          | 53 -----------
 .../libs/admin/shared/src/lib/routes.ts       |  4 +-
 alfa-client/libs/tech-shared/src/index.ts     |  1 +
 18 files changed, 141 insertions(+), 163 deletions(-)
 create mode 100644 alfa-client/libs/admin/configuration/src/lib/menu-container/statistik-menu/statistik-menu.component.html
 create mode 100644 alfa-client/libs/admin/configuration/src/lib/menu-container/statistik-menu/statistik-menu.component.spec.ts
 rename alfa-client/libs/admin/configuration/src/lib/{statistik-menu-container => menu-container}/statistik-menu/statistik-menu.component.ts (84%)
 delete mode 100644 alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.html
 delete mode 100644 alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.spec.ts
 delete mode 100644 alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.ts
 delete mode 100644 alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu/statistik-menu.component.html
 delete mode 100644 alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu/statistik-menu.component.spec.ts

diff --git a/alfa-client/apps/admin/src/app/app.component.html b/alfa-client/apps/admin/src/app/app.component.html
index 561a68601f..e3f678a098 100644
--- a/alfa-client/apps/admin/src/app/app.component.html
+++ b/alfa-client/apps/admin/src/app/app.component.html
@@ -61,9 +61,6 @@
       @if (apiRoot | hasLink: apiRootLinkRel.CONFIGURATION) {
         <admin-menu-container data-test-id="menu-container"></admin-menu-container>
       }
-      @if (apiRoot | hasLink: apiRootLinkRel.CONFIGURATION) {
-        <admin-statistik-menu-container data-test-id="menu-container" />
-      }
     </ods-navbar>
     <main class="flex-1 overflow-y-auto bg-white px-6 py-4">
       <router-outlet
diff --git a/alfa-client/apps/admin/src/app/app.component.spec.ts b/alfa-client/apps/admin/src/app/app.component.spec.ts
index 6be45ca955..ef7bf3c2d2 100644
--- a/alfa-client/apps/admin/src/app/app.component.spec.ts
+++ b/alfa-client/apps/admin/src/app/app.component.spec.ts
@@ -300,7 +300,7 @@ describe('AppComponent', () => {
       it('should navigate to statistik if aggregation mapping link exists', () => {
         component._navigateByConfiguration(createConfigurationResource([ConfigurationLinkRel.AGGREGATION_MAPPINGS]));
 
-        expect(router.navigate).toHaveBeenCalledWith(['/auswertungen']);
+        expect(router.navigate).toHaveBeenCalledWith(['/statistik/auswertungen']);
       });
 
       it('should navigate to unavailable page if no link exists', () => {
diff --git a/alfa-client/apps/admin/src/app/app.component.ts b/alfa-client/apps/admin/src/app/app.component.ts
index 8aee55efef..8cc01f4def 100644
--- a/alfa-client/apps/admin/src/app/app.component.ts
+++ b/alfa-client/apps/admin/src/app/app.component.ts
@@ -21,7 +21,7 @@
  * Die sprachspezifischen Genehmigungen und Beschränkungen
  * unter der Lizenz sind dem Lizenztext zu entnehmen.
  */
-import { MenuContainerComponent, StatistikMenuContainerComponent } from '@admin-client/configuration';
+import { MenuContainerComponent } from '@admin-client/configuration';
 import { ConfigurationLinkRel, ConfigurationResource, ConfigurationService } from '@admin-client/configuration-shared';
 import { ROUTES } from '@admin-client/shared';
 import { KeycloakTokenService } from '@admin/keycloak-shared';
@@ -53,7 +53,6 @@ import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/
     UnavailablePageComponent,
     BuildInfoComponent,
     MenuContainerComponent,
-    StatistikMenuContainerComponent,
     RouterLink,
     HasLinkPipe,
   ],
diff --git a/alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts
index f388033515..a49d99231e 100644
--- a/alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts
+++ b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts
@@ -24,4 +24,6 @@
 export enum ConfigurationLinkRel {
   SETTING = 'settings',
   AGGREGATION_MAPPINGS = 'aggregationMappings',
+  DATENFREIGABE = 'datenfreigabes',
+  DATENANFRAGE = 'datenanfrages',
 }
diff --git a/alfa-client/libs/admin/configuration/src/index.ts b/alfa-client/libs/admin/configuration/src/index.ts
index 63bd38c1b3..221b8b7376 100644
--- a/alfa-client/libs/admin/configuration/src/index.ts
+++ b/alfa-client/libs/admin/configuration/src/index.ts
@@ -1,2 +1 @@
 export * from './lib/menu-container/menu-container.component';
-export * from './lib/statistik-menu-container/statistik-menu-container.component';
diff --git a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.html b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.html
index fd97589d60..b7e703fc1d 100644
--- a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.html
+++ b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.html
@@ -1 +1,2 @@
-<admin-menu [configurationStateResource]="configurationStateResource$ | async"></admin-menu>
\ No newline at end of file
+<admin-menu [configurationStateResource]="configurationStateResource$ | async" />
+<admin-statistik-menu [configurationStateResource]="configurationStateResource$ | async" />
diff --git a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.spec.ts b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.spec.ts
index 69d8eb3bd3..b6354f4641 100644
--- a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.spec.ts
+++ b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.spec.ts
@@ -7,6 +7,7 @@ import { of } from 'rxjs';
 import { createConfigurationResource } from '../../../../configuration-shared/test/configuration';
 import { MenuContainerComponent } from './menu-container.component';
 import { MenuComponent } from './menu/menu.component';
+import { StatistikMenuComponent } from './statistik-menu/statistik-menu.component';
 
 describe('MenuContainerComponent', () => {
   let component: MenuContainerComponent;
@@ -21,7 +22,7 @@ describe('MenuContainerComponent', () => {
 
     await TestBed.configureTestingModule({
       imports: [MenuContainerComponent],
-      declarations: [MockComponent(MenuComponent)],
+      declarations: [MockComponent(MenuComponent), MockComponent(StatistikMenuComponent)],
       providers: [
         {
           provide: ConfigurationService,
@@ -52,4 +53,10 @@ describe('MenuContainerComponent', () => {
 
     expect(menu.configurationStateResource).toBe(configurationStateResource);
   });
+
+  it('should call statistic menu', () => {
+    const statisticMenu: StatistikMenuComponent = getMockComponent(fixture, StatistikMenuComponent);
+
+    expect(statisticMenu.configurationStateResource).toBe(configurationStateResource);
+  });
 });
diff --git a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.ts b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.ts
index 7cb838c535..50be1f39d5 100644
--- a/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.ts
+++ b/alfa-client/libs/admin/configuration/src/lib/menu-container/menu-container.component.ts
@@ -4,11 +4,12 @@ import { CommonModule } from '@angular/common';
 import { Component, inject, OnInit } from '@angular/core';
 import { Observable } from 'rxjs';
 import { MenuComponent } from './menu/menu.component';
+import { StatistikMenuComponent } from './statistik-menu/statistik-menu.component';
 
 @Component({
   selector: 'admin-menu-container',
   standalone: true,
-  imports: [CommonModule, MenuComponent],
+  imports: [CommonModule, MenuComponent, StatistikMenuComponent],
   templateUrl: './menu-container.component.html',
 })
 export class MenuContainerComponent implements OnInit {
diff --git a/alfa-client/libs/admin/configuration/src/lib/menu-container/statistik-menu/statistik-menu.component.html b/alfa-client/libs/admin/configuration/src/lib/menu-container/statistik-menu/statistik-menu.component.html
new file mode 100644
index 0000000000..2fb7553377
--- /dev/null
+++ b/alfa-client/libs/admin/configuration/src/lib/menu-container/statistik-menu/statistik-menu.component.html
@@ -0,0 +1,26 @@
+@if (
+  configurationStateResource.resource
+    | hasAnyLink
+      : configurationLinkRel.AGGREGATION_MAPPINGS
+      : configurationLinkRel.DATENFREIGABE
+      : configurationLinkRel.DATENANFRAGE
+) {
+  <ods-nav-headline label="Statistik" />
+  <div class="flex flex-col gap-2">
+    @if (configurationStateResource.resource | hasLink: configurationLinkRel.AGGREGATION_MAPPINGS) {
+      <ods-nav-item data-test-id="auswertung-navigation" caption="Auswertungen" [path]="'/' + ROUTES.AGGREGATION_MAPPING">
+        <ods-icon icon name="statistic" fill="text" />
+      </ods-nav-item>
+    }
+    @if (configurationStateResource.resource | hasLink: configurationLinkRel.DATENFREIGABE) {
+      <ods-nav-item data-test-id="datenfreigaben-navigation" caption="Datenfreigaben" [path]="'/' + ROUTES.DATENFREIGABEN">
+        <ods-icon icon name="bar-chart-arrow" fill="text" />
+      </ods-nav-item>
+    }
+    @if (configurationStateResource.resource | hasLink: configurationLinkRel.DATENANFRAGE) {
+      <ods-nav-item data-test-id="datenanfragen-navigation" caption="Datenanfragen" [path]="'/' + ROUTES.DATENANFRAGEN">
+        <ods-icon icon name="bubble-question-mark" fill="text" />
+      </ods-nav-item>
+    }
+  </div>
+}
diff --git a/alfa-client/libs/admin/configuration/src/lib/menu-container/statistik-menu/statistik-menu.component.spec.ts b/alfa-client/libs/admin/configuration/src/lib/menu-container/statistik-menu/statistik-menu.component.spec.ts
new file mode 100644
index 0000000000..ca2aacff02
--- /dev/null
+++ b/alfa-client/libs/admin/configuration/src/lib/menu-container/statistik-menu/statistik-menu.component.spec.ts
@@ -0,0 +1,94 @@
+import { ConfigurationLinkRel } from '@admin-client/configuration-shared';
+import { createEmptyStateResource, createStateResource, HasLinkPipe } from '@alfa-client/tech-shared';
+import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { IconComponent, NavItemComponent } from '@ods/system';
+import { createConfigurationResource } from 'libs/admin/configuration-shared/test/configuration';
+import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
+import { MockComponent } from 'ng-mocks';
+import { StatistikMenuComponent } from './statistik-menu.component';
+
+describe('StatistikMenuComponent', () => {
+  let component: StatistikMenuComponent;
+  let fixture: ComponentFixture<StatistikMenuComponent>;
+
+  const auswertungNavigationSelector: string = getDataTestIdOf('auswertung-navigation');
+  const datenfreigabenNavigationSelector: string = getDataTestIdOf('datenfreigaben-navigation');
+  const datenanfragenNavigationSelector: string = getDataTestIdOf('datenanfragen-navigation');
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [StatistikMenuComponent, HasLinkPipe],
+      declarations: [MockComponent(NavItemComponent), MockComponent(IconComponent)],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(StatistikMenuComponent);
+    component = fixture.componentInstance;
+    component.configurationStateResource = createEmptyStateResource();
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  describe('statistic navigation', () => {
+    describe('auswertung', () => {
+      it('should show if agregation mapping link is present', () => {
+        component.configurationStateResource = createStateResource(
+          createConfigurationResource([ConfigurationLinkRel.AGGREGATION_MAPPINGS]),
+        );
+
+        fixture.detectChanges();
+
+        existsAsHtmlElement(fixture, auswertungNavigationSelector);
+      });
+
+      it('should hide if agregation mapping link is missing', () => {
+        component.configurationStateResource = createStateResource(createConfigurationResource());
+
+        fixture.detectChanges();
+
+        notExistsAsHtmlElement(fixture, auswertungNavigationSelector);
+      });
+    });
+    describe('datenfreigaben', () => {
+      it('should show if datenfreigabe link is present', () => {
+        component.configurationStateResource = createStateResource(
+          createConfigurationResource([ConfigurationLinkRel.DATENFREIGABE]),
+        );
+
+        fixture.detectChanges();
+
+        existsAsHtmlElement(fixture, datenfreigabenNavigationSelector);
+      });
+
+      it('should hide if datenfreigabe link is missing', () => {
+        component.configurationStateResource = createStateResource(createConfigurationResource());
+
+        fixture.detectChanges();
+
+        notExistsAsHtmlElement(fixture, datenfreigabenNavigationSelector);
+      });
+    });
+    describe('datenanfragen', () => {
+      it('should show if datenanfrage link is present', () => {
+        component.configurationStateResource = createStateResource(
+          createConfigurationResource([ConfigurationLinkRel.DATENANFRAGE]),
+        );
+
+        fixture.detectChanges();
+
+        existsAsHtmlElement(fixture, datenanfragenNavigationSelector);
+      });
+
+      it('should hide if datenanfrage link is missing', () => {
+        component.configurationStateResource = createStateResource(createConfigurationResource());
+
+        fixture.detectChanges();
+
+        notExistsAsHtmlElement(fixture, datenanfragenNavigationSelector);
+      });
+    });
+  });
+});
diff --git a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu/statistik-menu.component.ts b/alfa-client/libs/admin/configuration/src/lib/menu-container/statistik-menu/statistik-menu.component.ts
similarity index 84%
rename from alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu/statistik-menu.component.ts
rename to alfa-client/libs/admin/configuration/src/lib/menu-container/statistik-menu/statistik-menu.component.ts
index 75a8bab295..40b40d14a7 100644
--- a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu/statistik-menu.component.ts
+++ b/alfa-client/libs/admin/configuration/src/lib/menu-container/statistik-menu/statistik-menu.component.ts
@@ -1,6 +1,6 @@
 import { ConfigurationLinkRel, ConfigurationResource } from '@admin-client/configuration-shared';
 import { ROUTES } from '@admin-client/shared';
-import { HasLinkPipe, StateResource } from '@alfa-client/tech-shared';
+import { HasAnyLinkPipe, HasLinkPipe, StateResource } from '@alfa-client/tech-shared';
 import { CommonModule } from '@angular/common';
 import { Component, Input } from '@angular/core';
 import { IconComponent, NavHeadlineComponent, NavItemComponent } from '@ods/system';
@@ -8,7 +8,7 @@ import { IconComponent, NavHeadlineComponent, NavItemComponent } from '@ods/syst
 @Component({
   selector: 'admin-statistik-menu',
   standalone: true,
-  imports: [CommonModule, NavItemComponent, IconComponent, HasLinkPipe, NavHeadlineComponent],
+  imports: [CommonModule, NavItemComponent, IconComponent, HasLinkPipe, HasAnyLinkPipe, NavHeadlineComponent],
   templateUrl: './statistik-menu.component.html',
 })
 export class StatistikMenuComponent {
diff --git a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.html b/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.html
deleted file mode 100644
index 5392d99854..0000000000
--- a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.html
+++ /dev/null
@@ -1 +0,0 @@
-<admin-statistik-menu [configurationStateResource]="configurationStateResource$ | async" />
diff --git a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.spec.ts b/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.spec.ts
deleted file mode 100644
index 8b521c1b5e..0000000000
--- a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.spec.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import { ConfigurationResource, ConfigurationService } from '@admin-client/configuration-shared';
-import { createStateResource, StateResource } from '@alfa-client/tech-shared';
-import { getMockComponent, mock, Mock } from '@alfa-client/test-utils';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { MockComponent } from 'ng-mocks';
-import { of } from 'rxjs';
-import { createConfigurationResource } from '../../../../configuration-shared/test/configuration';
-import { StatistikMenuContainerComponent } from './statistik-menu-container.component';
-import { StatistikMenuComponent } from './statistik-menu/statistik-menu.component';
-
-describe('StatistikMenuContainerComponent', () => {
-  let component: StatistikMenuContainerComponent;
-  let fixture: ComponentFixture<StatistikMenuContainerComponent>;
-
-  let configurationService: Mock<ConfigurationService>;
-
-  const configurationStateResource: StateResource<ConfigurationResource> = createStateResource(createConfigurationResource());
-
-  beforeEach(async () => {
-    configurationService = { ...mock(ConfigurationService), get: jest.fn().mockReturnValue(of(configurationStateResource)) };
-
-    await TestBed.configureTestingModule({
-      imports: [StatistikMenuContainerComponent],
-      declarations: [MockComponent(StatistikMenuComponent)],
-      providers: [
-        {
-          provide: ConfigurationService,
-          useValue: configurationService,
-        },
-      ],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(StatistikMenuContainerComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('ngOnInit', () => {
-    it('should call service', () => {
-      component.ngOnInit();
-
-      expect(configurationService.get).toHaveBeenCalled();
-    });
-  });
-
-  it('should call menu', () => {
-    const menu: StatistikMenuComponent = getMockComponent(fixture, StatistikMenuComponent);
-
-    expect(menu.configurationStateResource).toBe(configurationStateResource);
-  });
-});
diff --git a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.ts b/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.ts
deleted file mode 100644
index 3084cd0801..0000000000
--- a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu-container.component.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { ConfigurationResource, ConfigurationService } from '@admin-client/configuration-shared';
-import { StateResource } from '@alfa-client/tech-shared';
-import { CommonModule } from '@angular/common';
-import { Component, inject, OnInit } from '@angular/core';
-import { Observable } from 'rxjs';
-import { StatistikMenuComponent } from './statistik-menu/statistik-menu.component';
-
-@Component({
-  selector: 'admin-statistik-menu-container',
-  standalone: true,
-  imports: [CommonModule, StatistikMenuComponent],
-  templateUrl: './statistik-menu-container.component.html',
-})
-export class StatistikMenuContainerComponent implements OnInit {
-  private readonly configurationService = inject(ConfigurationService);
-
-  public configurationStateResource$: Observable<StateResource<ConfigurationResource>>;
-
-  ngOnInit(): void {
-    this.configurationStateResource$ = this.configurationService.get();
-  }
-}
diff --git a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu/statistik-menu.component.html b/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu/statistik-menu.component.html
deleted file mode 100644
index 6c6794fa9d..0000000000
--- a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu/statistik-menu.component.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<ods-nav-headline label="Statistik" />
-<div class="flex flex-col gap-2">
-  @if (configurationStateResource.resource | hasLink: configurationLinkRel.AGGREGATION_MAPPINGS) {
-    <ods-nav-item data-test-id="statistik-navigation" caption="Auswertungen" [path]="'/' + ROUTES.AGGREGATION_MAPPING">
-      <ods-icon icon name="statistic" fill="text" />
-    </ods-nav-item>
-  }
-  <!-- @if (configurationStateResource.resource | hasLink: configurationLinkRel.**datenanfragen**) { -->
-  <ods-nav-item data-test-id="release-data-navigation" caption="Datenfreigaben" [path]="'/' + ROUTES.RELEASE_DATA">
-    <ods-icon icon name="bar-chart-arrow" fill="text" />
-  </ods-nav-item>
-  <!-- } -->
-  <!-- @if (configurationStateResource.resource | hasLink: configurationLinkRel.**datenfreigaben**) { -->
-  <ods-nav-item data-test-id="request-data-navigation" caption="Datenanfragen" [path]="'/' + ROUTES.REQUEST_DATA">
-    <ods-icon icon name="bubble-question-mark" fill="text" />
-  </ods-nav-item>
-  <!-- } -->
-</div>
diff --git a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu/statistik-menu.component.spec.ts b/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu/statistik-menu.component.spec.ts
deleted file mode 100644
index 805ffa7faf..0000000000
--- a/alfa-client/libs/admin/configuration/src/lib/statistik-menu-container/statistik-menu/statistik-menu.component.spec.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import { ConfigurationLinkRel } from '@admin-client/configuration-shared';
-import { createEmptyStateResource, createStateResource, HasLinkPipe } from '@alfa-client/tech-shared';
-import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils';
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { IconComponent, NavItemComponent } from '@ods/system';
-import { createConfigurationResource } from 'libs/admin/configuration-shared/test/configuration';
-import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
-import { MockComponent } from 'ng-mocks';
-import { StatistikMenuComponent } from './statistik-menu.component';
-
-describe('StatistikMenuComponent', () => {
-  let component: StatistikMenuComponent;
-  let fixture: ComponentFixture<StatistikMenuComponent>;
-
-  const postfachNavigation: string = getDataTestIdOf('postfach-navigation');
-  const statistikNavigationSelector: string = getDataTestIdOf('statistik-navigation');
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      imports: [StatistikMenuComponent, HasLinkPipe],
-      declarations: [MockComponent(NavItemComponent), MockComponent(IconComponent)],
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(StatistikMenuComponent);
-    component = fixture.componentInstance;
-    component.configurationStateResource = createEmptyStateResource();
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('statistic navigation', () => {
-    it('should show if agregation mapping link is present', () => {
-      component.configurationStateResource = createStateResource(
-        createConfigurationResource([ConfigurationLinkRel.AGGREGATION_MAPPINGS]),
-      );
-
-      fixture.detectChanges();
-
-      existsAsHtmlElement(fixture, statistikNavigationSelector);
-    });
-
-    it('should hide if agregation mapping link is missing', () => {
-      component.configurationStateResource = createStateResource(createConfigurationResource());
-
-      fixture.detectChanges();
-
-      notExistsAsHtmlElement(fixture, statistikNavigationSelector);
-    });
-  });
-});
diff --git a/alfa-client/libs/admin/shared/src/lib/routes.ts b/alfa-client/libs/admin/shared/src/lib/routes.ts
index 11338ba98f..4fcb7a1f57 100644
--- a/alfa-client/libs/admin/shared/src/lib/routes.ts
+++ b/alfa-client/libs/admin/shared/src/lib/routes.ts
@@ -31,6 +31,6 @@ export enum ROUTES {
   AGGREGATION_MAPPING = 'statistik/auswertungen',
   AGGREGATION_MAPPING_NEU = 'statistik/auswertungen/neu',
   AGGREGATION_MAPPING_ID = 'statistik/auswertungen/:aggregationMappingId',
-  RELEASE_DATA = 'statistik/datenfreigaben',
-  REQUEST_DATA = 'statistik/datenanfragen',
+  DATENFREIGABEN = 'statistik/datenfreigaben',
+  DATENANFRAGEN = 'statistik/datenanfragen',
 }
diff --git a/alfa-client/libs/tech-shared/src/index.ts b/alfa-client/libs/tech-shared/src/index.ts
index 9220218eb9..31672f5bbb 100644
--- a/alfa-client/libs/tech-shared/src/index.ts
+++ b/alfa-client/libs/tech-shared/src/index.ts
@@ -43,6 +43,7 @@ export * from './lib/pipe/format-date-with-time.pipe';
 export * from './lib/pipe/format-date-without-year-with-time.pipe';
 export * from './lib/pipe/format-to-pretty-date.pipe';
 export * from './lib/pipe/get-url.pipe';
+export * from './lib/pipe/has-any-link.pipe';
 export * from './lib/pipe/has-link.pipe';
 export * from './lib/pipe/not-has-link.pipe';
 export * from './lib/pipe/to-embedded-resource.pipe';
-- 
GitLab