Skip to content
Snippets Groups Projects
Commit e6db8c37 authored by Alexander Reifschneider's avatar Alexander Reifschneider
Browse files

OZG-6986 Add unit tests for apiRoot link "aggregationMapping"

- add license header
parent 908e838a
Branches
Tags
1 merge request!15OZG-6986 Add statistic page
Showing
with 196 additions and 47 deletions
...@@ -62,11 +62,11 @@ ...@@ -62,11 +62,11 @@
</ods-nav-item> </ods-nav-item>
</ng-container> </ng-container>
<hr /> <hr />
<!-- <ng-container *ngIf="environment.features.statistik"> --> <ng-container *ngIf="apiRoot | hasLink: apiRootLinkRel.AGGREGATION_MAPPING">
<ods-nav-item data-test-id="statistik-navigation" caption="Statistik" path="/statistik"> <ods-nav-item data-test-id="statistik-navigation" caption="Statistik" path="/statistik">
<ods-statistic-icon icon /> <ods-statistic-icon icon />
</ods-nav-item> </ods-nav-item>
<!-- </ng-container> --> </ng-container>
</ng-container> </ng-container>
</ods-navbar> </ods-navbar>
<main class="flex-1 overflow-y-auto bg-white px-6 py-4"> <main class="flex-1 overflow-y-auto bg-white px-6 py-4">
......
...@@ -254,20 +254,6 @@ describe('AppComponent', () => { ...@@ -254,20 +254,6 @@ describe('AppComponent', () => {
notExistsAsHtmlElement(fixture, postfachNavigationSelector); notExistsAsHtmlElement(fixture, postfachNavigationSelector);
}); });
// it('should show statistik link if statistik feature toggle is true', () => {
// component.environment.features.statistik = true;
// fixture.detectChanges();
// existsAsHtmlElement(fixture, statistikNavigationSelector);
// });
// it('should not show statistik link if statistik feature toggle is false', () => {
// component.environment.features.statistik = false;
// fixture.detectChanges();
// notExistsAsHtmlElement(fixture, statistikNavigationSelector);
// });
it('should show benutzer & rollen if benutzerRollen feature toggle is true', () => { it('should show benutzer & rollen if benutzerRollen feature toggle is true', () => {
component.environment.features.benutzerRollen = true; component.environment.features.benutzerRollen = true;
fixture.detectChanges(); fixture.detectChanges();
...@@ -296,6 +282,21 @@ describe('AppComponent', () => { ...@@ -296,6 +282,21 @@ describe('AppComponent', () => {
notExistsAsHtmlElement(fixture, organisationsEinheitenNavigationSelector); notExistsAsHtmlElement(fixture, organisationsEinheitenNavigationSelector);
}); });
it('should show statistik if link in apiRoot exists', () => {
component.apiRootStateResource$ = of(
createStateResource(createApiRootResource([ApiRootLinkRel.AGGREGATION_MAPPING, ApiRootLinkRel.CONFIGURATION])),
);
fixture.detectChanges();
existsAsHtmlElement(fixture, statistikNavigationSelector);
});
it('should not show statistik if link in apiRoot does not exists', () => {
fixture.detectChanges();
notExistsAsHtmlElement(fixture, statistikNavigationSelector);
});
}); });
describe('build version', () => { describe('build version', () => {
......
<!-- @if (environment.features.statistik) { --> <!--
Copyright (C) 2025 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.
-->
<ng-container *ngIf="(apiRootStateResource$ | async)?.resource as apiRoot">
@if (apiRoot | hasLink: apiRootLinkRel.AGGREGATION_MAPPING) {
<admin-statistik-container data-test-id="statistik-container" /> <admin-statistik-container data-test-id="statistik-container" />
<!-- } --> }
</ng-container>
import { getEnvironmentFactory } from '@alfa-client/environment-shared'; /*
* Copyright (C) 2025 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 { StatistikContainerComponent } from '@admin-client/statistik';
import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared';
import { createStateResource, StateResource, TechSharedModule } from '@alfa-client/tech-shared';
import { existsAsHtmlElement, mock, Mock, notExistsAsHtmlElement } from '@alfa-client/test-utils';
import { CommonModule } from '@angular/common';
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing';
import { createEnvironment } from 'libs/environment-shared/test/environment'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root';
import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
import { singleColdCompleted } from 'libs/tech-shared/test/marbles';
import { MockComponent } from 'ng-mocks';
import { Observable, of } from 'rxjs';
import { StatistikPageComponent } from './statistik-page.component'; import { StatistikPageComponent } from './statistik-page.component';
describe('StatistikPageComponent', () => { describe('StatistikPageComponent', () => {
...@@ -10,16 +40,22 @@ describe('StatistikPageComponent', () => { ...@@ -10,16 +40,22 @@ describe('StatistikPageComponent', () => {
const statistikContainerSelector: string = getDataTestIdOf('statistik-container'); const statistikContainerSelector: string = getDataTestIdOf('statistik-container');
const environment = createEnvironment(); let apiRootService: Mock<ApiRootService>;
(getEnvironmentFactory as jest.Mock).mockReturnValue(environment);
beforeEach(async () => { beforeEach(async () => {
apiRootService = mock(ApiRootService);
await TestBed.configureTestingModule({ await TestBed.configureTestingModule({
imports: [StatistikPageComponent], imports: [CommonModule, TechSharedModule],
declarations: [StatistikPageComponent, MockComponent(StatistikContainerComponent)],
providers: [{ provide: ApiRootService, useValue: apiRootService }],
}).compileComponents(); }).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(StatistikPageComponent); fixture = TestBed.createComponent(StatistikPageComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
...@@ -27,21 +63,44 @@ describe('StatistikPageComponent', () => { ...@@ -27,21 +63,44 @@ describe('StatistikPageComponent', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
// describe('template', () => { describe('component', () => {
// describe('admin-statistik-container', () => { describe('ngOnInit', () => {
// it('should be rendered if feature toggle statistik is true', () => { const apiRootStateResource: StateResource<ApiRootResource> = createStateResource(createApiRootResource());
// environment.features.statistik = true; const apiRootStateResource$: Observable<StateResource<ApiRootResource>> = of(apiRootStateResource);
// fixture.detectChanges();
beforeEach(() => {
apiRootService.getApiRoot.mockReturnValue(apiRootStateResource$);
});
it('should call apiRootService getApiRoot', () => {
component.ngOnInit();
expect(apiRootService.getApiRoot).toHaveBeenCalled();
});
it('should get apiRootStateResource$', () => {
component.ngOnInit();
expect(component.apiRootStateResource$).toBeObservable(singleColdCompleted(apiRootStateResource));
});
});
});
describe('template', () => {
describe('statistik-organisationseinheit-container', () => {
it('should be rendered if apiRootState has link', () => {
component.apiRootStateResource$ = of(createStateResource(createApiRootResource([ApiRootLinkRel.AGGREGATION_MAPPING])));
fixture.detectChanges();
// existsAsHtmlElement(fixture, statistikContainerSelector); existsAsHtmlElement(fixture, statistikContainerSelector);
// }); });
// it('should not be rendered if feature toggle postfach is false', () => { it('should not be rendered if apiRootState has no link', () => {
// environment.features.statistik = false; component.apiRootStateResource$ = of(createStateResource(createApiRootResource()));
// fixture.detectChanges(); fixture.detectChanges();
// notExistsAsHtmlElement(fixture, statistikContainerSelector); notExistsAsHtmlElement(fixture, statistikContainerSelector);
// }); });
// }); });
// }); });
}); });
/*
* Copyright (C) 2025 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 { StatistikContainerComponent } from '@admin-client/statistik'; import { StatistikContainerComponent } from '@admin-client/statistik';
import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared';
import { createEmptyStateResource, StateResource, TechSharedModule } from '@alfa-client/tech-shared';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { Component } from '@angular/core'; import { Component, inject, OnInit } from '@angular/core';
import { Observable, of } from 'rxjs';
@Component({ @Component({
selector: 'app-statistik-page', selector: 'app-statistik-page',
standalone: true, standalone: true,
imports: [CommonModule, StatistikContainerComponent], imports: [CommonModule, StatistikContainerComponent, TechSharedModule],
templateUrl: './statistik-page.component.html', templateUrl: './statistik-page.component.html',
}) })
export class StatistikPageComponent {} export class StatistikPageComponent implements OnInit {
private apiRootService = inject(ApiRootService);
public apiRootStateResource$: Observable<StateResource<ApiRootResource>> = of(createEmptyStateResource<ApiRootResource>());
public readonly apiRootLinkRel = ApiRootLinkRel;
ngOnInit(): void {
this.apiRootStateResource$ = this.apiRootService.getApiRoot();
}
}
<h1 class="heading-1" data-test-id="statistik-header-text">Statistik</h1> <!--
Copyright (C) 2025 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.
-->
<h1 class="heading-1">Statistik</h1>
/* /*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein * Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei * Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
......
/* /*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein * Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei * Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
......
...@@ -62,4 +62,5 @@ export enum ApiRootLinkRel { ...@@ -62,4 +62,5 @@ export enum ApiRootLinkRel {
HINTS = 'hints', HINTS = 'hints',
RESOURCE = 'resource', RESOURCE = 'resource',
ORGANISATIONS_EINHEIT = 'organisationsEinheiten', ORGANISATIONS_EINHEIT = 'organisationsEinheiten',
AGGREGATION_MAPPING = 'aggregationMapping',
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment