diff --git a/alfa-client/apps/admin/src/app/app.component.html b/alfa-client/apps/admin/src/app/app.component.html index 9e3f549e41e574184c74dbba19273cf2693c4385..b8a2a57f0984c15be178bbfe6c5a1be5dbcbd12a 100644 --- a/alfa-client/apps/admin/src/app/app.component.html +++ b/alfa-client/apps/admin/src/app/app.component.html @@ -16,16 +16,26 @@ <div class="flex h-screen w-full justify-center overflow-y-auto"> <ods-navbar data-test-id="navigation"> <ng-container *ngIf="apiRoot | hasLink: ApiRootLinkRel.CONFIGURATION"> - <ods-nav-item caption="Benutzer & Rollen" path="/benutzer_und_rollen"> - <ods-users-icon class="stroke-text" icon /> - </ods-nav-item> - <hr /> - <ods-nav-item caption="Postfach" path="/postfach"> - <ods-mailbox-icon icon /> - </ods-nav-item> - <ods-nav-item caption="Organisationseinheiten" path="/organisationseinheiten"> - <ods-orga-unit-icon icon /> - </ods-nav-item> + <ng-container *ngIf="environment.features.benutzerRollen"> + <ods-nav-item data-test-id="users-roles-navigation" caption="Benutzer & Rollen" path="/benutzer_und_rollen"> + <ods-users-icon class="stroke-text" icon /> + </ods-nav-item> + <hr /> + </ng-container> + <ng-container *ngIf="environment.features.postfach"> + <ods-nav-item data-test-id="postfach-navigation" caption="Postfach" path="/postfach"> + <ods-mailbox-icon icon /> + </ods-nav-item> + </ng-container> + <ng-container *ngIf="apiRoot | hasLink: ApiRootLinkRel.ORGANISATIONS_EINHEIT"> + <ods-nav-item + data-test-id="organisations-einheiten-navigation" + caption="Organisationseinheiten" + path="/organisationseinheiten" + > + <ods-orga-unit-icon icon /> + </ods-nav-item> + </ng-container> </ng-container> </ods-navbar> <main class="flex-1 overflow-y-auto bg-white px-6 py-4"> 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 547e09233158c2f9343e0550a9345ff97ac3dab5..212128e52b594d9b397ac8fffa3893dc0b07bfac 100644 --- a/alfa-client/apps/admin/src/app/app.component.spec.ts +++ b/alfa-client/apps/admin/src/app/app.component.spec.ts @@ -1,5 +1,6 @@ import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; import { BuildInfoComponent } from '@alfa-client/common'; +import { Environment } from '@alfa-client/environment-shared'; import { HasLinkPipe, createEmptyStateResource, createStateResource } from '@alfa-client/tech-shared'; import { Mock, @@ -24,6 +25,7 @@ import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent, MockDirective } from 'ng-mocks'; import { of } from 'rxjs'; +import { createEnvironment } from '../../../../libs/environment-shared/test/environment'; import { UserProfileButtonContainerComponent } from '../common/user-profile-button-container/user-profile.button-container.component'; import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/unavailable-page.component'; import { AppComponent } from './app.component'; @@ -36,9 +38,14 @@ describe('AppComponent', () => { const buildInfoSelector: string = getDataTestIdOf('build-info'); const userProfileButtonSelector: string = getDataTestIdOf('user-profile-button'); const navigationSelector: string = getDataTestIdOf('navigation'); + const usersRolesNavigationSelector: string = getDataTestIdOf('users-roles-navigation'); + const postfachNavigationSelector: string = getDataTestIdOf('postfach-navigation'); + const organisationsEinheitenNavigationSelector: string = getDataTestIdOf('organisations-einheiten-navigation'); const logoLink: string = getDataTestIdOf('logo-link'); const routerOutletSelector: string = getDataTestIdOf('router-outlet'); + let environment: Environment; + const authenticationService: Mock<AuthenticationService> = { ...mock(AuthenticationService), login: jest.fn().mockResolvedValue(Promise.resolve()), @@ -97,6 +104,9 @@ describe('AppComponent', () => { }); beforeEach(() => { + environment = createEnvironment(); + window['__env__'] = environment; + fixture = TestBed.createComponent(AppComponent); component = fixture.componentInstance; }); @@ -185,8 +195,11 @@ describe('AppComponent', () => { }); describe('navigation', () => { - it('should show links if configuration link exists', () => { + beforeEach(() => { component.apiRootStateResource$ = of(createStateResource(createApiRootResource([ApiRootLinkRel.CONFIGURATION]))); + }); + + it('should show links if configuration link exists', () => { fixture.detectChanges(); const navbarElement: HTMLElement = getElementFromFixture(fixture, navigationSelector); @@ -202,6 +215,49 @@ describe('AppComponent', () => { expect(navbarElement.children.length).toBe(0); }); + + it('should show postfach link if postfach feature toggle is true', () => { + component.environment.features.postfach = true; + fixture.detectChanges(); + + existsAsHtmlElement(fixture, postfachNavigationSelector); + }); + + it('should not show postfach link if postfach feature toggle is false', () => { + component.environment.features.postfach = false; + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, postfachNavigationSelector); + }); + + it('should show benutzer & rollen if benutzerRollen feature toggle is true', () => { + component.environment.features.benutzerRollen = true; + fixture.detectChanges(); + + existsAsHtmlElement(fixture, usersRolesNavigationSelector); + }); + + it('should not show benutzer & rollen if benutzerRollen feature toggle is false', () => { + component.environment.features.benutzerRollen = false; + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, usersRolesNavigationSelector); + }); + + it('should show organisationsEinheiten if link in apiRoot exists', () => { + component.apiRootStateResource$ = of( + createStateResource(createApiRootResource([ApiRootLinkRel.ORGANISATIONS_EINHEIT, ApiRootLinkRel.CONFIGURATION])), + ); + fixture.detectChanges(); + + existsAsHtmlElement(fixture, organisationsEinheitenNavigationSelector); + }); + + it('should not show organisationsEinheiten if link in apiRoot does not exist', () => { + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, organisationsEinheitenNavigationSelector); + }); }); describe('build version', () => { diff --git a/alfa-client/apps/admin/src/app/app.component.ts b/alfa-client/apps/admin/src/app/app.component.ts index e1d4c6d2a424c489756ec2966dde744126e360fa..369adaaa96d47e015faa12af07479663ec19826b 100644 --- a/alfa-client/apps/admin/src/app/app.component.ts +++ b/alfa-client/apps/admin/src/app/app.component.ts @@ -1,4 +1,5 @@ import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; +import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared'; import { StateResource } from '@alfa-client/tech-shared'; import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, Params, Router } from '@angular/router'; @@ -14,6 +15,7 @@ export class AppComponent implements OnInit { readonly title = 'admin'; public apiRootStateResource$: Observable<StateResource<ApiRootResource>>; + public environment: Environment = getEnvironmentFactory(); constructor( public authenticationService: AuthenticationService, diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html index 2449a303b186022b68d062f7b59ba73c5cb6a790..71a2c7edd3ad77f56b5536cf419e1ad8d11fd837 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.html @@ -1 +1,5 @@ -<admin-organisationseinheit-form-container/> \ No newline at end of file +<ng-container *ngIf="(apiRootStateResource$ | async)?.resource as apiRoot"> + @if(apiRoot | hasLink: ApiRootLinkRel.ORGANISATIONS_EINHEIT){ + <admin-organisationseinheit-form-container data-test-id="organisations-einheit-form"/> + } +</ng-container> diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts index 4ad49ca4595e598e66a9e6b0d40b46cca0d606b5..eb70d9123241996827a8440b6205cb4b25d35d8a 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.spec.ts @@ -1,15 +1,31 @@ import { OrganisationsEinheitFormContainerComponent } from '@admin-client/admin-settings'; +import { ApiRootLinkRel, ApiRootService } from '@alfa-client/api-root-shared'; +import { createStateResource, TechSharedModule } from '@alfa-client/tech-shared'; +import { existsAsHtmlElement, mock, Mock, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; +import { of } from 'rxjs'; import { OrganisationsEinheitFormPageComponent } from './organisationseinheit-form-page.component'; describe('OrganisationsEinheitFormPageComponent', () => { let component: OrganisationsEinheitFormPageComponent; let fixture: ComponentFixture<OrganisationsEinheitFormPageComponent>; + const organisationsEinheitFormSelector: string = getDataTestIdOf('organisations-einheit-form'); + + const apiRootStateResource$ = of(createStateResource(createApiRootResource())); + const apiRootService: Mock<ApiRootService> = { + ...mock(ApiRootService), + getApiRoot: jest.fn().mockReturnValue(apiRootStateResource$), + }; + beforeEach(async () => { await TestBed.configureTestingModule({ + imports: [TechSharedModule], declarations: [OrganisationsEinheitFormPageComponent, MockComponent(OrganisationsEinheitFormContainerComponent)], + providers: [{ provide: ApiRootService, useValue: apiRootService }], }).compileComponents(); }); @@ -23,4 +39,32 @@ describe('OrganisationsEinheitFormPageComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + describe('component', () => { + describe('ngOnInit', () => { + it('should get apiRoot', () => { + component.ngOnInit(); + + expect(component.apiRootStateResource$).toBe(apiRootStateResource$); + }); + }); + }); + + describe('template', () => { + describe('admin-organisationseinheit-form-container', () => { + it('should be rendered if apiRootState has link', () => { + component.apiRootStateResource$ = of(createStateResource(createApiRootResource([ApiRootLinkRel.ORGANISATIONS_EINHEIT]))); + fixture.detectChanges(); + + existsAsHtmlElement(fixture, organisationsEinheitFormSelector); + }); + + it('should not be rendered if apiRootState has no link', () => { + component.apiRootStateResource$ = of(createStateResource(createApiRootResource())); + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, organisationsEinheitFormSelector); + }); + }); + }); }); diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts index b7c9e0ea72a6ccd313239a4461f3a75692be5d9d..6a14ce6da44f0d1c4adf5c1e59c67dd12f163a15 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component.ts @@ -1,7 +1,20 @@ -import { Component } from '@angular/core'; +import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; +import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; +import { Component, inject, OnInit } from '@angular/core'; +import { Observable, of } from 'rxjs'; @Component({ selector: 'organisationseinheit-form-page', templateUrl: './organisationseinheit-form-page.component.html', }) -export class OrganisationsEinheitFormPageComponent {} +export class OrganisationsEinheitFormPageComponent implements OnInit { + private apiRootService = inject(ApiRootService); + + public apiRootStateResource$: Observable<StateResource<ApiRootResource>> = of(createEmptyStateResource<ApiRootResource>()); + + ngOnInit(): void { + this.apiRootStateResource$ = this.apiRootService.getApiRoot(); + } + + protected readonly ApiRootLinkRel = ApiRootLinkRel; +} diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html index 792930158756ab6bea2bf0e8fbd5c164c5037c0a..d57d0eb794c0a9499b29f94856f7bd95903bb891 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.html @@ -1 +1,5 @@ -<admin-organisationseinheit-container/> +<ng-container *ngIf="(apiRootStateResource$ | async)?.resource as apiRoot"> + @if(apiRoot | hasLink: ApiRootLinkRel.ORGANISATIONS_EINHEIT){ + <admin-organisationseinheit-container data-test-id="organisations-einheit-container"/> + } +</ng-container> \ No newline at end of file diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts index 59ddda81ab9c26fbac8f8bd976298596c9283b5a..17a5736eae9427dd9e1b620ef21807111e59deec 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.spec.ts @@ -1,15 +1,31 @@ import { OrganisationsEinheitContainerComponent } from '@admin-client/admin-settings'; +import { ApiRootLinkRel, ApiRootService } from '@alfa-client/api-root-shared'; +import { createStateResource, TechSharedModule } from '@alfa-client/tech-shared'; +import { existsAsHtmlElement, mock, Mock, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MockComponent } from 'ng-mocks'; +import { of } from 'rxjs'; +import { createApiRootResource } from '../../../../../../libs/api-root-shared/test/api-root'; +import { getDataTestIdOf } from '../../../../../../libs/tech-shared/test/data-test'; import { OrganisationsEinheitPageComponent } from './organisationseinheit-page.component'; describe('OrganisationsEinheitPageComponent', () => { let component: OrganisationsEinheitPageComponent; let fixture: ComponentFixture<OrganisationsEinheitPageComponent>; + const organisationsEinheitContainerSelector: string = getDataTestIdOf('organisations-einheit-container'); + + const apiRootStateResource$ = of(createStateResource(createApiRootResource())); + const apiRootService: Mock<ApiRootService> = { + ...mock(ApiRootService), + getApiRoot: jest.fn().mockReturnValue(apiRootStateResource$), + }; + beforeEach(async () => { await TestBed.configureTestingModule({ + imports: [TechSharedModule], declarations: [OrganisationsEinheitPageComponent, MockComponent(OrganisationsEinheitContainerComponent)], + providers: [{ provide: ApiRootService, useValue: apiRootService }], }).compileComponents(); }); @@ -23,4 +39,22 @@ describe('OrganisationsEinheitPageComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + describe('template', () => { + describe('admin-organisationseinheit-container', () => { + it('should be rendered if apiRootState has link', () => { + component.apiRootStateResource$ = of(createStateResource(createApiRootResource([ApiRootLinkRel.ORGANISATIONS_EINHEIT]))); + fixture.detectChanges(); + + existsAsHtmlElement(fixture, organisationsEinheitContainerSelector); + }); + + it('should not be rendered if apiRootState has no link', () => { + component.apiRootStateResource$ = of(createStateResource(createApiRootResource())); + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, organisationsEinheitContainerSelector); + }); + }); + }); }); diff --git a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts index 4d653b6ed7b3701a4f74ce763f313cc93ca29dc6..08fdbd714dc2f421a2b2614f18b47d743c494011 100644 --- a/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts +++ b/alfa-client/apps/admin/src/pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component.ts @@ -1,7 +1,19 @@ -import { Component } from '@angular/core'; +import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; +import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; +import { Component, inject } from '@angular/core'; +import { Observable, of } from 'rxjs'; @Component({ selector: 'organisationseinheit-page', templateUrl: './organisationseinheit-page.component.html', }) -export class OrganisationsEinheitPageComponent {} +export class OrganisationsEinheitPageComponent { + private apiRootService = inject(ApiRootService); + + public apiRootStateResource$: Observable<StateResource<ApiRootResource>> = of(createEmptyStateResource<ApiRootResource>()); + + ngOnInit(): void { + this.apiRootStateResource$ = this.apiRootService.getApiRoot(); + } + protected readonly ApiRootLinkRel = ApiRootLinkRel; +} diff --git a/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.html b/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.html index 35312d3a6fcbc752440bf2d9a0395bb55b2678da..6d30a459ec00c868f26e62c48e52d0028c3b03ab 100644 --- a/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.html +++ b/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.html @@ -1 +1,3 @@ -<admin-postfach-container></admin-postfach-container> +@if(environment.features.postfach){ + <admin-postfach-container data-test-id="postfach-container"/> +} \ No newline at end of file diff --git a/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.spec.ts b/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.spec.ts index 5ebec9f21a5002eea14557838b3af6aa0f724196..49c04dc617d7202d1edf3328df2fb76ab5514d97 100644 --- a/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.spec.ts +++ b/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.spec.ts @@ -1,12 +1,18 @@ import { PostfachContainerComponent } from '@admin-client/admin-settings'; +import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MockComponent } from 'ng-mocks'; +import { createEnvironment } from '../../../../../../libs/environment-shared/test/environment'; +import { getDataTestIdOf } from '../../../../../../libs/tech-shared/test/data-test'; import { PostfachPageComponent } from './postfach-page.component'; describe('PostfachPageComponent', () => { let component: PostfachPageComponent; let fixture: ComponentFixture<PostfachPageComponent>; + const postfachContainerSelector: string = getDataTestIdOf('postfach-container'); + const environment = createEnvironment(); + beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [PostfachPageComponent, MockComponent(PostfachContainerComponent)], @@ -16,11 +22,29 @@ describe('PostfachPageComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(PostfachPageComponent); component = fixture.componentInstance; - + component.environment = environment; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + describe('template', () => { + describe('admin-postfach-container', () => { + it('should be rendered if feature toggle postfach is true', () => { + environment.features.postfach = true; + fixture.detectChanges(); + + existsAsHtmlElement(fixture, postfachContainerSelector); + }); + + it('should not be rendered if feature toggle postfach is false', () => { + environment.features.postfach = false; + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, postfachContainerSelector); + }); + }); + }); }); diff --git a/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.ts b/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.ts index 1d9a54ceddbd6e663477e382dbbff95d9ab13c66..e517dd361f662c17b3c69994a76f1ee131f8bcd8 100644 --- a/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.ts +++ b/alfa-client/apps/admin/src/pages/postfach/postfach-page/postfach-page.component.ts @@ -1,7 +1,10 @@ +import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared'; import { Component } from '@angular/core'; @Component({ selector: 'postfach-page', templateUrl: './postfach-page.component.html', }) -export class PostfachPageComponent {} +export class PostfachPageComponent { + public environment: Environment = getEnvironmentFactory(); +} diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.html b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.html index dad58a8662dd19eb059273474e2df1474305d3b4..b6866e0ee5dac2eeaf239ac9e1d759a78a1ff3fa 100644 --- a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.html +++ b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.html @@ -1 +1,3 @@ -<admin-user-add-form /> +@if(environment.features.benutzerRollen){ + <admin-user-add-form data-test-id="user-add-form"/> +} \ No newline at end of file diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.spec.ts b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.spec.ts index eecaa8e5c0c24be917a8b968d2af926dbf1ff56f..4a3016f2eb4ff2a8fdcbde9ada61b2cf2989f28d 100644 --- a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.spec.ts +++ b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.spec.ts @@ -1,5 +1,8 @@ import { UserAddFormComponent } from '@admin-client/admin-settings'; +import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { createEnvironment } from 'libs/environment-shared/test/environment'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; import { UserAddPageComponent } from './user-add-page.component'; @@ -7,6 +10,9 @@ describe('UserAddPageComponent', () => { let component: UserAddPageComponent; let fixture: ComponentFixture<UserAddPageComponent>; + const userAddFormSelector: string = getDataTestIdOf('user-add-form'); + const environment = createEnvironment(); + beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [UserAddPageComponent, MockComponent(UserAddFormComponent)], @@ -14,10 +20,29 @@ describe('UserAddPageComponent', () => { fixture = TestBed.createComponent(UserAddPageComponent); component = fixture.componentInstance; + component.environment = environment; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + describe('template', () => { + describe('admin-user-add-form', () => { + it('should be rendered if feature toggle for benutzerRollen is true', () => { + environment.features.benutzerRollen = true; + fixture.detectChanges(); + + existsAsHtmlElement(fixture, userAddFormSelector); + }); + + it('should not be rendered if feature toggle for benutzerRollen is false', () => { + environment.features.benutzerRollen = false; + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, userAddFormSelector); + }); + }); + }); }); diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts index f3bcc1eaf5f74df921a17932bea865ce96a61907..e52105d82b847654bbd74d769a047a1bd0d48de7 100644 --- a/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts +++ b/alfa-client/apps/admin/src/pages/users-roles/user-add-page/user-add-page.component.ts @@ -1,7 +1,10 @@ +import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared'; import { Component } from '@angular/core'; @Component({ selector: 'user-add-page', templateUrl: './user-add-page.component.html', }) -export class UserAddPageComponent {} +export class UserAddPageComponent { + public environment: Environment = getEnvironmentFactory(); +} diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.html b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.html index 3000e0ffbac09b63c3d12d715638ab67f610bc39..dc2545d6527cb4109c09c3cbb5bb887c1b492774 100644 --- a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.html +++ b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.html @@ -1 +1,3 @@ -<admin-users-roles /> \ No newline at end of file +@if(environment.features.benutzerRollen){ + <admin-users-roles data-test-id="users-roles"/> +} diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.spec.ts b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.spec.ts index 1285eda7400123a525353d217969ab1d0d681074..0819e2bec035d19f66a785198869252ca1bbfa7c 100644 --- a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.spec.ts +++ b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.spec.ts @@ -1,5 +1,8 @@ import { UsersRolesComponent } from '@admin-client/admin-settings'; +import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { createEnvironment } from 'libs/environment-shared/test/environment'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; import { UserRolesPageComponent } from './user-roles-page.component'; @@ -7,6 +10,9 @@ describe('UserRolesPageComponent', () => { let component: UserRolesPageComponent; let fixture: ComponentFixture<UserRolesPageComponent>; + const usersRolesSelector: string = getDataTestIdOf('users-roles'); + const environment = createEnvironment(); + beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [UserRolesPageComponent], @@ -15,10 +21,29 @@ describe('UserRolesPageComponent', () => { fixture = TestBed.createComponent(UserRolesPageComponent); component = fixture.componentInstance; + component.environment = environment; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + describe('template', () => { + describe('admin-users-roles', () => { + it('should be rendered if feature toggle benutzerRollen is true', () => { + environment.features.benutzerRollen = true; + fixture.detectChanges(); + + existsAsHtmlElement(fixture, usersRolesSelector); + }); + + it('should not be rendered component if feature toggle benutzerRollen is false', () => { + environment.features.benutzerRollen = false; + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, usersRolesSelector); + }); + }); + }); }); diff --git a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.ts b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.ts index 6b3576a76e34d01f319b4a8b2c4f44c82c62f44f..eacc7b424e712af3c12e5a182c0c9e339fa1d76b 100644 --- a/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.ts +++ b/alfa-client/apps/admin/src/pages/users-roles/user-roles-page/user-roles-page.component.ts @@ -1,7 +1,10 @@ +import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared'; import { Component } from '@angular/core'; @Component({ selector: 'app-user-roles-page', templateUrl: './user-roles-page.component.html', }) -export class UserRolesPageComponent {} +export class UserRolesPageComponent { + public environment: Environment = getEnvironmentFactory(); +} diff --git a/alfa-client/libs/environment-shared/src/lib/environment.model.ts b/alfa-client/libs/environment-shared/src/lib/environment.model.ts index a20dc1227942f910b39667b2a59e5b635a606ecb..0944f55da06ccd4bbaf081604dcd627be42b3709 100644 --- a/alfa-client/libs/environment-shared/src/lib/environment.model.ts +++ b/alfa-client/libs/environment-shared/src/lib/environment.model.ts @@ -30,4 +30,8 @@ export interface Environment { realm: string; clientId: string; processorNames: string[]; + features: { + postfach: boolean; + benutzerRollen: boolean; + }; } diff --git a/alfa-client/libs/environment-shared/test/environment.ts b/alfa-client/libs/environment-shared/test/environment.ts index de7f1c09bfbe835b4c4c03cf118aba07140f12f0..4fe7192ae405b562308bd90cbb2be7a1d551f35d 100644 --- a/alfa-client/libs/environment-shared/test/environment.ts +++ b/alfa-client/libs/environment-shared/test/environment.ts @@ -32,6 +32,10 @@ const environment: Environment = { realm: faker.word.sample(), clientId: faker.string.uuid(), processorNames: [faker.person.fullName()], + features: { + postfach: true, + benutzerRollen: true, + }, }; export function createEnvironment(): Environment {