diff --git a/alfa-client/apps/admin/project.json b/alfa-client/apps/admin/project.json index a823b06f67d3c4bea4fa758699ea1583d1a00c68..9876b834e6f340fb8d71da344f75a75a9386f41b 100644 --- a/alfa-client/apps/admin/project.json +++ b/alfa-client/apps/admin/project.json @@ -7,7 +7,7 @@ "tags": [], "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser", + "executor": "@angular-devkit/build-angular:browser-esbuild", "outputs": ["{options.outputPath}"], "options": { "outputPath": "dist/apps/admin", @@ -15,6 +15,10 @@ "main": "apps/admin/src/main.ts", "polyfills": ["zone.js"], "tsConfig": "apps/admin/tsconfig.app.json", + "allowedCommonJsDependencies": [ + "sanitize-filename-ts", + "jsrsasign" + ], "assets": [ "apps/admin/src/assets", { @@ -30,7 +34,8 @@ "apps/alfa/src/styles/abstracts", "node_modules/@angular", "node_modules/include-media", - "node_modules/typeface-roboto" + "node_modules/typeface-roboto", + "" ] } }, diff --git a/alfa-client/apps/admin/src/app/app.component.ts b/alfa-client/apps/admin/src/app/app.component.ts index 6dc6936abb0e6e2d7fef0c644a631c53cc87fa8a..11944356c6944e3fcd7faf4a6e1cbb030ddc90a0 100644 --- a/alfa-client/apps/admin/src/app/app.component.ts +++ b/alfa-client/apps/admin/src/app/app.component.ts @@ -22,17 +22,44 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; +import { BuildInfoComponent } from '@alfa-client/common'; import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared'; -import { StateResource } from '@alfa-client/tech-shared'; +import { StateResource, TechSharedModule } from '@alfa-client/tech-shared'; +import { CommonModule } from '@angular/common'; import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute, Params, Router } from '@angular/router'; +import { ActivatedRoute, Params, Router, RouterOutlet } from '@angular/router'; +import { + AdminLogoIconComponent, + MailboxIconComponent, + NavbarComponent, + NavItemComponent, + OrgaUnitIconComponent, + UsersIconComponent, +} from '@ods/system'; import { AuthenticationService } from 'libs/authentication/src/lib/authentication.service'; import { Observable } from 'rxjs'; +import { UserProfileButtonContainerComponent } from '../common/user-profile-button-container/user-profile.button-container.component'; +import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/unavailable-page.component'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], + standalone: true, + imports: [ + CommonModule, + NavbarComponent, + NavItemComponent, + UsersIconComponent, + UserProfileButtonContainerComponent, + AdminLogoIconComponent, + MailboxIconComponent, + OrgaUnitIconComponent, + RouterOutlet, + UnavailablePageComponent, + BuildInfoComponent, + TechSharedModule, + ], }) export class AppComponent implements OnInit { readonly title = 'admin'; diff --git a/alfa-client/apps/admin/src/app/app.module.spec.ts b/alfa-client/apps/admin/src/app/app.module.spec.ts deleted file mode 100644 index cd61915f6160b959604867735965d61efd33b655..0000000000000000000000000000000000000000 --- a/alfa-client/apps/admin/src/app/app.module.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { TestBed } from '@angular/core/testing'; -import { AppModule } from './app.module'; - -describe('AppModule', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [AppModule], - }); - }); - - it('should create', () => { - expect(AppModule).toBeDefined(); - }); -}); diff --git a/alfa-client/apps/admin/src/app/app.module.ts b/alfa-client/apps/admin/src/app/app.module.ts deleted file mode 100644 index f0df559f8f336cb258f65bed98ca888bc79827a5..0000000000000000000000000000000000000000 --- a/alfa-client/apps/admin/src/app/app.module.ts +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { AdminSettingsModule } from '@admin-client/admin-settings'; -import { ApiRootModule } from '@alfa-client/api-root-shared'; -import { BuildInfoComponent } from '@alfa-client/common'; -import { EnvironmentModule } from '@alfa-client/environment-shared'; -import { TechSharedModule } from '@alfa-client/tech-shared'; -import { CommonModule, registerLocaleData } from '@angular/common'; -import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; -import localeDe from '@angular/common/locales/de'; -import { NgModule } from '@angular/core'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { BrowserModule } from '@angular/platform-browser'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { RouterModule } from '@angular/router'; -import { EffectsModule } from '@ngrx/effects'; -import { StoreRouterConnectingModule } from '@ngrx/router-store'; -import { StoreModule } from '@ngrx/store'; -import { StoreDevtoolsModule } from '@ngrx/store-devtools'; -import { - AdminLogoIconComponent, - DropdownMenuButtonComponent, - DropdownMenuComponent, - LogoutIconComponent, - MailboxIconComponent, - NavItemComponent, - NavbarComponent, - OrgaUnitIconComponent, - UsersIconComponent, -} from '@ods/system'; -import { OAuthModule } from 'angular-oauth2-oidc'; -import { HttpUnauthorizedInterceptor } from 'libs/authentication/src/lib/http-unauthorized.interceptor'; -import { UserProfileButtonContainerComponent } from '../common/user-profile-button-container/user-profile.button-container.component'; -import { environment } from '../environments/environment'; -import { OrganisationsEinheitFormPageComponent } from '../pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component'; -import { OrganisationsEinheitPageComponent } from '../pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component'; -import { PostfachPageComponent } from '../pages/postfach/postfach-page/postfach-page.component'; -import { UnavailablePageComponent } from '../pages/unavailable/unavailable-page/unavailable-page.component'; -import { UserAddPageComponent } from '../pages/users-roles/user-add-page/user-add-page.component'; -import { UserRolesPageComponent } from '../pages/users-roles/user-roles-page/user-roles-page.component'; -import { AppComponent } from './app.component'; -import { appRoutes } from './app.routes'; - -registerLocaleData(localeDe); - -@NgModule({ - declarations: [ - AppComponent, - PostfachPageComponent, - UserRolesPageComponent, - OrganisationsEinheitPageComponent, - OrganisationsEinheitFormPageComponent, - UserProfileButtonContainerComponent, - UnavailablePageComponent, - UserAddPageComponent, - ], - imports: [ - CommonModule, - AdminLogoIconComponent, - DropdownMenuComponent, - DropdownMenuButtonComponent, - NavItemComponent, - NavbarComponent, - OrgaUnitIconComponent, - LogoutIconComponent, - UsersIconComponent, - MailboxIconComponent, - RouterModule.forRoot(appRoutes), - BrowserModule, - BrowserAnimationsModule, - ApiRootModule, - EnvironmentModule, - environment.production ? [] : StoreDevtoolsModule.instrument({ connectInZone: true }), - StoreModule.forRoot({}), - EffectsModule.forRoot(), - StoreRouterConnectingModule.forRoot(), - FormsModule, - ReactiveFormsModule, - AdminSettingsModule, - OAuthModule.forRoot({ - resourceServer: { - sendAccessToken: true, - }, - }), - TechSharedModule, - BuildInfoComponent, - ], - providers: [ - { - provide: HTTP_INTERCEPTORS, - useClass: HttpUnauthorizedInterceptor, - multi: true, - }, - provideHttpClient(withInterceptorsFromDi()), - ], - bootstrap: [AppComponent], -}) -export class AppModule {} diff --git a/alfa-client/apps/admin/src/app/app.routes.ts b/alfa-client/apps/admin/src/app/app.routes.ts index 8297695599e541328b3f70afe33501a5ea39e1f7..0886fc15cf87a9708f8939ce22e603b1bf312cf1 100644 --- a/alfa-client/apps/admin/src/app/app.routes.ts +++ b/alfa-client/apps/admin/src/app/app.routes.ts @@ -21,8 +21,8 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { ROUTES } from '@admin-client/shared'; import { Route } from '@angular/router'; -import { ROUTES } from 'libs/admin/shared'; import { OrganisationsEinheitFormPageComponent } from '../pages/organisationseinheit/organisationseinheit-form-page/organisationseinheit-form-page.component'; import { OrganisationsEinheitPageComponent } from '../pages/organisationseinheit/organisationseinheit-page/organisationseinheit-page.component'; import { PostfachPageComponent } from '../pages/postfach/postfach-page/postfach-page.component'; diff --git a/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile.button-container.component.ts b/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile.button-container.component.ts index 40858b8d4889c41146e5e1eca18183624135d129..958615ae7d7dbaf21cc5248d4be448b512085a74 100644 --- a/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile.button-container.component.ts +++ b/alfa-client/apps/admin/src/common/user-profile-button-container/user-profile.button-container.component.ts @@ -22,11 +22,14 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, OnInit } from '@angular/core'; -import { AuthenticationService } from 'libs/authentication/src/lib/authentication.service'; +import { DropdownMenuButtonComponent, DropdownMenuComponent, LogoutIconComponent } from '@ods/system'; +import { AuthenticationService } from 'authentication'; @Component({ selector: 'user-profile-button-container', templateUrl: './user-profile-button-container.component.html', + standalone: true, + imports: [DropdownMenuComponent, DropdownMenuButtonComponent, LogoutIconComponent], }) export class UserProfileButtonContainerComponent implements OnInit { public currentUserInitials: string; diff --git a/alfa-client/apps/admin/src/main.ts b/alfa-client/apps/admin/src/main.ts index b4c156ce6d3d7e0a4e0b8a4cfaa7eda4b2a2203f..6d84faade1f163c40b471a12d75778e7aba687ca 100644 --- a/alfa-client/apps/admin/src/main.ts +++ b/alfa-client/apps/admin/src/main.ts @@ -21,13 +21,35 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { loadEnvironment } from '@alfa-client/environment-shared'; -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { EnvironmentModule, loadEnvironment } from '@alfa-client/environment-shared'; +import { enableProdMode, importProvidersFrom } from '@angular/core'; import { isNil } from 'lodash-es'; -import { AppModule } from './app/app.module'; + +import { ApiRootModule } from '@alfa-client/api-root-shared'; +import { NavigationSharedModule } from '@alfa-client/navigation-shared'; +import { registerLocaleData } from '@angular/common'; +import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; +import localeDe from '@angular/common/locales/de'; +import { BrowserModule, bootstrapApplication } from '@angular/platform-browser'; +import { provideAnimations } from '@angular/platform-browser/animations'; +import { provideRouter } from '@angular/router'; +import { EffectsModule } from '@ngrx/effects'; +import { StoreRouterConnectingModule } from '@ngrx/router-store'; +import { StoreModule } from '@ngrx/store'; +import { StoreDevtoolsModule } from '@ngrx/store-devtools'; +import { OAuthModule } from 'angular-oauth2-oidc'; +import { HttpUnauthorizedInterceptor } from 'authentication'; +import { ConfigurationsProviders } from 'libs/admin/configuration-shared/src/lib/configuration.providers'; +import { OrganisationEinheitProviders } from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.providers'; +import { PostfachProviders } from 'libs/admin/postfach-shared/src/lib/postfach.providers'; +import { SettingsProviders } from 'libs/admin/settings-shared/src/lib/settings.providers'; +import { UserProviders } from 'libs/admin/user/src/lib/user.providers'; +import { AppComponent } from './app/app.component'; +import { appRoutes } from './app/app.routes'; import { environment } from './environments/environment'; +registerLocaleData(localeDe); + loadEnvironment(environment.environmentUrl).then((env) => { if (isNil(env?.production)) { console.error('Connection Error: environment is ', env); @@ -37,7 +59,37 @@ loadEnvironment(environment.environmentUrl).then((env) => { if (env.production) { enableProdMode(); } - platformBrowserDynamic() - .bootstrapModule(AppModule) - .catch((err) => console.log(err)); + + bootstrapApplication(AppComponent, { + providers: [ + ConfigurationsProviders, + PostfachProviders, + SettingsProviders, + OrganisationEinheitProviders, + UserProviders, + importProvidersFrom( + NavigationSharedModule, + BrowserModule, + ApiRootModule, + EnvironmentModule, + environment.production ? [] : StoreDevtoolsModule.instrument({ connectInZone: true }), + StoreModule.forRoot({}), + EffectsModule.forRoot(), + StoreRouterConnectingModule.forRoot(), + OAuthModule.forRoot({ + resourceServer: { + sendAccessToken: true, + }, + }), + ), + { + provide: HTTP_INTERCEPTORS, + useClass: HttpUnauthorizedInterceptor, + multi: true, + }, + provideHttpClient(withInterceptorsFromDi()), + provideRouter(appRoutes), + provideAnimations(), + ], + }).catch((err) => console.error(err)); }); 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 fca49823df0221f08cab813339b1d78c30e2e05c..cb9bf3ffd04a1caacde740c71fc98b9ead6a057e 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 @@ -25,6 +25,6 @@ --> <ng-container *ngIf="(apiRootStateResource$ | async)?.resource as apiRoot"> @if (apiRoot | hasLink: apiRootLinkRel.ORGANISATIONS_EINHEIT) { - <admin-organisationseinheit-form-container data-test-id="organisations-einheit-form" /> + <admin-organisations-einheit-form-container data-test-id="organisations-einheit-form" /> } -</ng-container> +</ng-container> \ No newline at end of file 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 e0d2d21f172de4baa71a6fcb48adadc57e2d4e6a..081e864d889b4390e5951d5ae3a757b687cde6ab 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 @@ -21,10 +21,11 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { OrganisationsEinheitFormContainerComponent } from '@admin-client/admin-settings'; +import { OrganisationsEinheitFormContainerComponent } from '@admin-client/organisations-einheit'; 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 { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; @@ -45,7 +46,7 @@ describe('OrganisationsEinheitFormPageComponent', () => { apiRootService = mock(ApiRootService); await TestBed.configureTestingModule({ - imports: [TechSharedModule], + imports: [CommonModule, TechSharedModule], declarations: [OrganisationsEinheitFormPageComponent, MockComponent(OrganisationsEinheitFormContainerComponent)], providers: [{ provide: ApiRootService, useValue: apiRootService }], }).compileComponents(); 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 3a62a7cfbb243c6432d189fc3e9d02f91084be4f..d92144b1e58138e50682790bfdede8198bb1ebbb 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 @@ -21,14 +21,19 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { OrganisationsEinheitFormContainerComponent } from '@admin-client/organisations-einheit'; import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; +import { UiModule } from '@alfa-client/ui'; +import { CommonModule } from '@angular/common'; import { Component, inject, OnInit } from '@angular/core'; import { Observable, of } from 'rxjs'; @Component({ selector: 'organisationseinheit-form-page', templateUrl: './organisationseinheit-form-page.component.html', + standalone: true, + imports: [CommonModule, UiModule, OrganisationsEinheitFormContainerComponent], }) export class OrganisationsEinheitFormPageComponent implements OnInit { private apiRootService = inject(ApiRootService); 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 c6b911fd2bd0dbec75e9fd4a62eb0ac2813c428e..f1c8abdc407045cf77eb1b673b22fe82c31ff1c7 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 @@ -25,6 +25,6 @@ --> <ng-container *ngIf="(apiRootStateResource$ | async)?.resource as apiRoot"> @if (apiRoot | hasLink: apiRootLinkRel.ORGANISATIONS_EINHEIT) { - <admin-organisationseinheit-container data-test-id="organisations-einheit-container" /> + <admin-organisations-einheit-container data-test-id="organisations-einheit-container" /> } </ng-container> 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 fccde3c44eadce5a59c51bc5a5548597ff0f0a43..d6b708a413afe74806a4e040ec5c5affc7490678 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 @@ -21,10 +21,11 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { OrganisationsEinheitContainerComponent } from '@admin-client/admin-settings'; +import { OrganisationsEinheitContainerComponent } from '@admin-client/organisations-einheit'; 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 { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; @@ -45,7 +46,7 @@ describe('OrganisationsEinheitPageComponent', () => { apiRootService = mock(ApiRootService); await TestBed.configureTestingModule({ - imports: [TechSharedModule], + imports: [CommonModule, TechSharedModule], declarations: [OrganisationsEinheitPageComponent, MockComponent(OrganisationsEinheitContainerComponent)], providers: [{ provide: ApiRootService, useValue: apiRootService }], }).compileComponents(); 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 e24994ae5e1fcafdf6e7cc153da2b40f0db2f218..031470f244f8776ca9d4448a1e55c1464a8ae2fe 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 @@ -21,14 +21,19 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { OrganisationsEinheitContainerComponent } from '@admin-client/organisations-einheit'; import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; +import { UiModule } from '@alfa-client/ui'; +import { CommonModule } from '@angular/common'; import { Component, inject, OnInit } from '@angular/core'; import { Observable, of } from 'rxjs'; @Component({ selector: 'organisationseinheit-page', templateUrl: './organisationseinheit-page.component.html', + standalone: true, + imports: [CommonModule, OrganisationsEinheitContainerComponent, UiModule], }) export class OrganisationsEinheitPageComponent implements OnInit { private apiRootService = inject(ApiRootService); 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 5d000e0a2b734afc40086b414b0d5e8776bf4e85..1b1555bcacff75394b0aa8a882090913b38e84bf 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { PostfachContainerComponent } from '@admin-client/admin-settings'; +import { PostfachContainerComponent } from '@admin-client/postfach'; import { getEnvironmentFactory } from '@alfa-client/environment-shared'; import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; 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 888d44c066acb8c54b8d3c8f3f662bd0c783f404..c77fed5ff6e0e78283a2be7b408bf36db27dbab2 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 @@ -22,11 +22,14 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared'; +import { PostfachContainerComponent } from '@admin-client/postfach'; import { Component } from '@angular/core'; @Component({ selector: 'postfach-page', templateUrl: './postfach-page.component.html', + standalone: true, + imports: [PostfachContainerComponent], }) export class PostfachPageComponent { public readonly environment: Environment = getEnvironmentFactory(); diff --git a/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.spec.ts b/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.spec.ts index 30c1b96b7f3390c6e73a159ab93d096fcfdd536c..2776889e04ed44b051b5f9c6057585e28d1871ef 100644 --- a/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.spec.ts +++ b/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.spec.ts @@ -30,7 +30,7 @@ describe('UnavailablePageComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [UnavailablePageComponent], + imports: [UnavailablePageComponent], }).compileComponents(); fixture = TestBed.createComponent(UnavailablePageComponent); diff --git a/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.ts b/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.ts index e0eda63a5e99558ca2d9355f6b11185089187c03..8c5888db1cec1eac188c903395a7875c1df5811f 100644 --- a/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.ts +++ b/alfa-client/apps/admin/src/pages/unavailable/unavailable-page/unavailable-page.component.ts @@ -24,8 +24,9 @@ import { Component } from '@angular/core'; @Component({ - selector: 'unavailable-page', - templateUrl: './unavailable-page.component.html', - styles: [], + selector: 'unavailable-page', + templateUrl: './unavailable-page.component.html', + styles: [], + standalone: true, }) export class UnavailablePageComponent {} 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 13478e0f8f00dd03b6ef09b17b618c3d9e094388..facb1f6d4f1b2493b43c881222f3bfde83e90890 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { UserAddFormComponent } from '@admin-client/admin-settings'; +import { UserAddFormComponent } from '@admin-client/user'; import { getEnvironmentFactory } from '@alfa-client/environment-shared'; import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; 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 9b4ccbdfdc5cb58bf2afcbef09d2700aacdcca88..0e022f312b04c2f22d3432683d58d2f324261f94 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 @@ -22,11 +22,14 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared'; +import { UserAddFormComponent } from '@admin-client/user'; import { Component } from '@angular/core'; @Component({ selector: 'user-add-page', templateUrl: './user-add-page.component.html', + standalone: true, + imports: [UserAddFormComponent], }) export class UserAddPageComponent { public readonly environment: Environment = getEnvironmentFactory(); 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 d6e0ed998c333bdcdbde92edbed4abdff395f984..77b415071c8a7e4d5ce966bae33b30bd48d4f14c 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 @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { UsersRolesComponent } from '@admin-client/admin-settings'; +import { UsersRolesComponent } from '@admin-client/user'; import { getEnvironmentFactory } from '@alfa-client/environment-shared'; import { existsAsHtmlElement, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; 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 8c059c1eb09245e2492f737233c3baa7c19e5a82..b19feb8a0d942320087afe30f32bfe5872fef661 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 @@ -22,11 +22,14 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Environment, getEnvironmentFactory } from '@alfa-client/environment-shared'; +import { UsersRolesComponent } from '@admin-client/user'; import { Component } from '@angular/core'; @Component({ selector: 'app-user-roles-page', templateUrl: './user-roles-page.component.html', + standalone: true, + imports: [UsersRolesComponent], }) export class UserRolesPageComponent { public readonly environment: Environment = getEnvironmentFactory(); diff --git a/alfa-client/apps/admin/tsconfig.json b/alfa-client/apps/admin/tsconfig.json index 3d14eb0f33fa0447b1ab6a871eacd616e044c6c7..7925e81752f248e59546c31d58f62da3abbe7704 100644 --- a/alfa-client/apps/admin/tsconfig.json +++ b/alfa-client/apps/admin/tsconfig.json @@ -1,14 +1,5 @@ { - "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": false - // "forceConsistentCasingInFileNames": true, - // "strict": true, - // "noImplicitOverride": true, - // "noPropertyAccessFromIndexSignature": true, - // "noImplicitReturns": true, - // "noFallthroughCasesInSwitch": true - }, + "extends": "../../tsconfig.base.json", "files": [], "include": [], "references": [ @@ -22,11 +13,8 @@ "path": "./tsconfig.editor.json" } ], - "extends": "../../tsconfig.base.json", - "angularCompilerOptions": { - // "enableI18nLegacyMessageIdFormat": false, - // "strictInjectionParameters": true, - // "strictInputAccessModifiers": true, - // "strictTemplates": true + "compilerOptions": { + "target": "es2022", + "useDefineForClassFields": false } } diff --git a/alfa-client/libs/admin/configuration-shared/.eslintrc.json b/alfa-client/libs/admin/configuration-shared/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50 --- /dev/null +++ b/alfa-client/libs/admin/configuration-shared/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "admin", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "admin", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/admin/configuration-shared/README.md b/alfa-client/libs/admin/configuration-shared/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6f5030b70bcee5425a71ad582b478c8007bb6169 --- /dev/null +++ b/alfa-client/libs/admin/configuration-shared/README.md @@ -0,0 +1,7 @@ +# configuration + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test configuration` to execute the unit tests. diff --git a/alfa-client/libs/admin/configuration-shared/jest.config.ts b/alfa-client/libs/admin/configuration-shared/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..62ec3a0768ca632eface9c5965a666571b6f526c --- /dev/null +++ b/alfa-client/libs/admin/configuration-shared/jest.config.ts @@ -0,0 +1,21 @@ +export default { + displayName: 'admin-configuration', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + coverageDirectory: '../../../coverage/libs/admin/configuration-shared', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/admin/configuration-shared/project.json b/alfa-client/libs/admin/configuration-shared/project.json new file mode 100644 index 0000000000000000000000000000000000000000..ce13ed7f5533688a16237678622655a7117a4c41 --- /dev/null +++ b/alfa-client/libs/admin/configuration-shared/project.json @@ -0,0 +1,22 @@ +{ + "name": "admin-configuration", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/admin/configuration-shared/src", + "prefix": "admin", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "tsConfig": "libs/admin/configuration-shared/tsconfig.spec.json", + "jestConfig": "libs/admin/configuration-shared/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + } + } +} diff --git a/alfa-client/libs/admin/configuration-shared/src/index.ts b/alfa-client/libs/admin/configuration-shared/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..fa9624f0ddb7cb788ef5732ae12412f4bcb84138 --- /dev/null +++ b/alfa-client/libs/admin/configuration-shared/src/index.ts @@ -0,0 +1,4 @@ +export * from './lib/configuration-resource.service'; +export * from './lib/configuration.linkrel'; +export * from './lib/configuration.model'; +export * from './lib/configuration.service'; diff --git a/alfa-client/libs/admin/settings/src/lib/configuration/configuration-resource.service.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration-resource.service.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/configuration/configuration-resource.service.ts rename to alfa-client/libs/admin/configuration-shared/src/lib/configuration-resource.service.ts diff --git a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.linkrel.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/configuration/configuration.linkrel.ts rename to alfa-client/libs/admin/configuration-shared/src/lib/configuration.linkrel.ts diff --git a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.model.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.model.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/configuration/configuration.model.ts rename to alfa-client/libs/admin/configuration-shared/src/lib/configuration.model.ts diff --git a/alfa-client/libs/admin/configuration-shared/src/lib/configuration.providers.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.providers.ts new file mode 100644 index 0000000000000000000000000000000000000000..7a1cb35d734c58d0671b4a5ef41923f5f8dd2797 --- /dev/null +++ b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.providers.ts @@ -0,0 +1,16 @@ +import { + ConfigurationResourceService, + ConfigurationService, + createConfigurationResourceService, +} from '@admin-client/configuration-shared'; +import { ApiRootService } from '@alfa-client/api-root-shared'; +import { ResourceRepository } from '@alfa-client/tech-shared'; + +export const ConfigurationsProviders = [ + ConfigurationService, + { + provide: ConfigurationResourceService, + useFactory: createConfigurationResourceService, + deps: [ResourceRepository, ApiRootService], + }, +]; diff --git a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.spec.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.spec.ts similarity index 79% rename from alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.spec.ts rename to alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.spec.ts index 175a9419c1d735bd36a5aa10ad17036298827923..0892339b5464476bdf01cf8383891b55e8554a1d 100644 --- a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.spec.ts +++ b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.spec.ts @@ -22,10 +22,11 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { StateResource, createStateResource } from '@alfa-client/tech-shared'; -import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; +import { Mock, mock } from '@alfa-client/test-utils'; +import { TestBed } from '@angular/core/testing'; import { singleCold, singleHot } from 'libs/tech-shared/test/marbles'; import { Observable } from 'rxjs'; -import { createConfigurationResource } from '../../../test/configuration/configuration'; +import { createConfigurationResource } from '../../test/configuration'; import { ConfigurationResourceService } from './configuration-resource.service'; import { ConfigurationResource } from './configuration.model'; import { ConfigurationService } from './configuration.service'; @@ -37,7 +38,11 @@ describe('ConfigurationService', () => { beforeEach(() => { configurationResourceService = mock(ConfigurationResourceService); - service = new ConfigurationService(useFromMock(configurationResourceService)); + TestBed.configureTestingModule({ + providers: [ConfigurationService, { provide: ConfigurationResourceService, useValue: configurationResourceService }], + }); + + service = TestBed.inject(ConfigurationService); }); it('should create', () => { @@ -46,13 +51,10 @@ describe('ConfigurationService', () => { describe('get', () => { const configurationResource: ConfigurationResource = createConfigurationResource(); - const configurationStateResource: StateResource<ConfigurationResource> = - createStateResource(configurationResource); + const configurationStateResource: StateResource<ConfigurationResource> = createStateResource(configurationResource); beforeEach(() => { - configurationResourceService.get = jest - .fn() - .mockReturnValue(singleHot(configurationStateResource)); + configurationResourceService.get = jest.fn().mockReturnValue(singleHot(configurationStateResource)); }); it('should call resourceService', () => { configurationResourceService.get = jest.fn(); @@ -63,8 +65,7 @@ describe('ConfigurationService', () => { }); it('should return value', () => { - const loadedConfigurationResource: Observable<StateResource<ConfigurationResource>> = - service.get(); + const loadedConfigurationResource: Observable<StateResource<ConfigurationResource>> = service.get(); expect(loadedConfigurationResource).toBeObservable(singleCold(configurationStateResource)); }); diff --git a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.ts b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.ts similarity index 91% rename from alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.ts rename to alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.ts index 8e3b7815446dd1d76f8e88cfa78f7e0d8566fbe4..1a1b763736644b12f4003820569d4e4bae65a679 100644 --- a/alfa-client/libs/admin/settings/src/lib/configuration/configuration.service.ts +++ b/alfa-client/libs/admin/configuration-shared/src/lib/configuration.service.ts @@ -22,14 +22,14 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { StateResource } from '@alfa-client/tech-shared'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { ConfigurationResourceService } from './configuration-resource.service'; import { ConfigurationResource } from './configuration.model'; @Injectable() export class ConfigurationService { - constructor(private configurationResourceService: ConfigurationResourceService) {} + private configurationResourceService = inject(ConfigurationResourceService); public get(): Observable<StateResource<ConfigurationResource>> { return this.configurationResourceService.get(); diff --git a/alfa-client/libs/admin/configuration-shared/src/test-setup.ts b/alfa-client/libs/admin/configuration-shared/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe --- /dev/null +++ b/alfa-client/libs/admin/configuration-shared/src/test-setup.ts @@ -0,0 +1,12 @@ +import '@testing-library/jest-dom'; +import 'jest-preset-angular/setup-jest'; + +import { getTestBed } from '@angular/core/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; + +getTestBed().resetTestEnvironment(); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true, +}); diff --git a/alfa-client/libs/admin/configuration-shared/test/configuration.ts b/alfa-client/libs/admin/configuration-shared/test/configuration.ts new file mode 100644 index 0000000000000000000000000000000000000000..9b188cb1c2bd4bb8fec2db9dd4ba0d5830f09f41 --- /dev/null +++ b/alfa-client/libs/admin/configuration-shared/test/configuration.ts @@ -0,0 +1,6 @@ +import { ConfigurationLinkRel, ConfigurationResource } from '@admin-client/configuration-shared'; +import { toResource } from '../../../tech-shared/test/resource'; + +export function createConfigurationResource(): ConfigurationResource { + return toResource({}, [ConfigurationLinkRel.SETTING]); +} diff --git a/alfa-client/libs/admin/settings/tsconfig.json b/alfa-client/libs/admin/configuration-shared/tsconfig.json similarity index 100% rename from alfa-client/libs/admin/settings/tsconfig.json rename to alfa-client/libs/admin/configuration-shared/tsconfig.json diff --git a/alfa-client/libs/admin/settings/tsconfig.lib.json b/alfa-client/libs/admin/configuration-shared/tsconfig.lib.json similarity index 80% rename from alfa-client/libs/admin/settings/tsconfig.lib.json rename to alfa-client/libs/admin/configuration-shared/tsconfig.lib.json index 17469f1e4af3ea771aaa29b1d48f9bb5bf62a020..8441346f6e5858b2ef4235cb3c3160eda256f94a 100644 --- a/alfa-client/libs/admin/settings/tsconfig.lib.json +++ b/alfa-client/libs/admin/configuration-shared/tsconfig.lib.json @@ -7,6 +7,6 @@ "inlineSources": true, "types": [] }, - "exclude": ["src/test-setup.ts", "src/**/*.spec.ts", "jest.config.ts", "src/**/*.test.ts"], + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], "include": ["src/**/*.ts"] } diff --git a/alfa-client/libs/admin/settings/tsconfig.spec.json b/alfa-client/libs/admin/configuration-shared/tsconfig.spec.json similarity index 100% rename from alfa-client/libs/admin/settings/tsconfig.spec.json rename to alfa-client/libs/admin/configuration-shared/tsconfig.spec.json diff --git a/alfa-client/libs/admin/organisations-einheit-shared/.eslintrc.json b/alfa-client/libs/admin/organisations-einheit-shared/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit-shared/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "admin", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "admin", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/admin/organisations-einheit-shared/README.md b/alfa-client/libs/admin/organisations-einheit-shared/README.md new file mode 100644 index 0000000000000000000000000000000000000000..a5be82c2249514847db3cc868c6a6d902ad28358 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit-shared/README.md @@ -0,0 +1,7 @@ +# admin-organisations-einheit-shared + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test admin-organisations-einheit-shared` to execute the unit tests. diff --git a/alfa-client/libs/admin/organisations-einheit-shared/jest.config.ts b/alfa-client/libs/admin/organisations-einheit-shared/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..252ea166a7db0491a829bbaad260b606924ef8c2 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit-shared/jest.config.ts @@ -0,0 +1,21 @@ +export default { + displayName: 'admin-organisations-einheit-shared', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + coverageDirectory: '../../../coverage/libs/admin/organisations-einheit-shared', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/admin/organisations-einheit-shared/project.json b/alfa-client/libs/admin/organisations-einheit-shared/project.json new file mode 100644 index 0000000000000000000000000000000000000000..62237ee97b848fa0177621c828ebea341b338ad2 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit-shared/project.json @@ -0,0 +1,22 @@ +{ + "name": "admin-organisations-einheit-shared", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/admin/organisations-einheit-shared/src", + "prefix": "admin", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "tsConfig": "libs/admin/organisations-einheit-shared/tsconfig.spec.json", + "jestConfig": "libs/admin/organisations-einheit-shared/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + } + } +} diff --git a/alfa-client/libs/admin/organisations-einheit-shared/src/index.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..5135ad7a49fa3d4c1f354f020bb135bec2b468ca --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit-shared/src/index.ts @@ -0,0 +1,3 @@ +export * from './lib/organisations-einheit.linkrel'; +export * from './lib/organisations-einheit.model'; +export * from './lib/organisations-einheit.service'; diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-list-resource.service.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-list-resource.service.ts similarity index 92% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-list-resource.service.ts rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-list-resource.service.ts index d3b422cbbdca27c16673109e6e0317a64f600da4..4c7f294dbde21fb4425692fc8cc967e669ecf75d 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-list-resource.service.ts +++ b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-list-resource.service.ts @@ -21,11 +21,11 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AdminOrganisationsEinheitItemResource, AdminOrganisationsEinheitListResource } from '@admin-client/admin-settings'; +import { ConfigurationResource } from '@admin-client/configuration-shared'; import { ApiRootLinkRel, ApiRootResource, ApiRootService } from '@alfa-client/api-root-shared'; import { ListResourceServiceConfig, ResourceListService, ResourceRepository } from '@alfa-client/tech-shared'; -import { ConfigurationResource } from 'libs/admin/settings/src/lib/configuration/configuration.model'; import { OrganisationsEinheitListLinkRel } from './organisations-einheit.linkrel'; +import { AdminOrganisationsEinheitItemResource, AdminOrganisationsEinheitListResource } from './organisations-einheit.model'; export class OrganisationsEinheitListResourceService extends ResourceListService< ApiRootResource, diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-resource.service.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-resource.service.ts similarity index 91% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-resource.service.ts rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-resource.service.ts index f14046d99e4bcf4c9e678b51aacc76aeb7919d9b..304671d285d6657bf817c2b504d7b0ce5979796f 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit-resource.service.ts +++ b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit-resource.service.ts @@ -21,11 +21,11 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; +import { ConfigurationResource } from '@admin-client/configuration-shared'; import { ApiResourceService, ResourceRepository, ResourceServiceConfig } from '@alfa-client/tech-shared'; -import { ConfigurationResource } from 'libs/admin/settings/src/lib/configuration/configuration.model'; import { OrganisationsEinheitListResourceService } from './organisations-einheit-list-resource.service'; import { OrganisationsEinheitLinkRel } from './organisations-einheit.linkrel'; +import { AdminOrganisationsEinheitResource } from './organisations-einheit.model'; export class OrganisationsEinheitResourceService extends ApiResourceService< AdminOrganisationsEinheitResource, diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.linkrel.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.linkrel.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.linkrel.ts rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.linkrel.ts diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.model.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisations-einheit.model.ts rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model.ts diff --git a/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.providers.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.providers.ts new file mode 100644 index 0000000000000000000000000000000000000000..e3ffd49a2ab0b97cc65a941694ce8ac7d693fec4 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.providers.ts @@ -0,0 +1,23 @@ +import { ApiRootService } from '@alfa-client/api-root-shared'; +import { ResourceRepository } from '@alfa-client/tech-shared'; +import { + createOrganisationsEinheitListResourceService, + OrganisationsEinheitListResourceService, +} from './organisations-einheit-list-resource.service'; +import { + createOrganisationsEinheitResourceService, + OrganisationsEinheitResourceService, +} from './organisations-einheit-resource.service'; + +export const OrganisationEinheitProviders = [ + { + provide: OrganisationsEinheitListResourceService, + useFactory: createOrganisationsEinheitListResourceService, + deps: [ResourceRepository, ApiRootService], + }, + { + provide: OrganisationsEinheitResourceService, + useFactory: createOrganisationsEinheitResourceService, + deps: [ResourceRepository, OrganisationsEinheitListResourceService], + }, +]; diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.spec.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.spec.ts similarity index 88% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.spec.ts rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.spec.ts index c528bb33eb34bf8c58b0c0f0d1fdc073502109c0..36f737d58574c8765ae7f91c8e555663e561627d 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.spec.ts +++ b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.spec.ts @@ -21,25 +21,26 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AdminOrganisationsEinheitListResource, AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; import { NavigationService } from '@alfa-client/navigation-shared'; import { StateResource, createStateResource } from '@alfa-client/tech-shared'; import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { SnackBarService } from '@alfa-client/ui'; +import { TestBed } from '@angular/core/testing'; import { singleColdCompleted } from 'libs/tech-shared/test/marbles'; import { Observable, of } from 'rxjs'; import { createAdminOrganisationsEinheitListResource, createAdminOrganisationsEinheitResource, -} from '../../../test/organisations-einheit/organisations-einheit'; +} from '../test/organisations-einheit'; import { OrganisationsEinheitListResourceService } from './organisations-einheit-list-resource.service'; import { OrganisationsEinheitResourceService } from './organisations-einheit-resource.service'; -import { OrganisationsEinheitService } from './organisationseinheit.service'; +import { AdminOrganisationsEinheitListResource, AdminOrganisationsEinheitResource } from './organisations-einheit.model'; +import { OrganisationsEinheitService } from './organisations-einheit.service'; jest.mock('./organisations-einheit-list-resource.service'); jest.mock('./organisations-einheit-resource.service'); -jest.mock('../../../../../navigation-shared/src/lib/navigation.service'); -jest.mock('../../../../../ui/src/lib/snackbar/snackbar.service'); +jest.mock('libs/navigation-shared/src/lib/navigation.service'); +jest.mock('libs/ui/src/lib/snackbar/snackbar.service'); describe('OrganisationsEinheitService', () => { let service: OrganisationsEinheitService; @@ -56,12 +57,17 @@ describe('OrganisationsEinheitService', () => { navigationService.urlChanged.mockReturnValue(of({})); snackBarService = mock(SnackBarService); - service = new OrganisationsEinheitService( - useFromMock(listResourceService), - useFromMock(resourceService), - useFromMock(navigationService), - useFromMock(snackBarService), - ); + + TestBed.configureTestingModule({ + providers: [ + { provide: OrganisationsEinheitListResourceService, useValue: useFromMock(listResourceService) }, + { provide: OrganisationsEinheitResourceService, useValue: useFromMock(resourceService) }, + { provide: NavigationService, useValue: useFromMock(navigationService) }, + { provide: SnackBarService, useValue: useFromMock(snackBarService) }, + ], + }); + + service = TestBed.inject(OrganisationsEinheitService); }); describe('onNavigation', () => { diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.ts similarity index 90% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.ts rename to alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.ts index 7f48d377892fae7057fdb2d775a75dbae51f88c7..dd246b5c64f0dbba4a7105e668599eee32fe03d1 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit.service.ts +++ b/alfa-client/libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.service.ts @@ -21,36 +21,36 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - AdminOrganisationsEinheitListResource, - AdminOrganisationsEinheitResource, - AdminOrganisationsEinheitSettings, -} from '@admin-client/admin-settings'; import { NavigationService } from '@alfa-client/navigation-shared'; import { StateResource, createEmptyStateResource, isNotUndefined } from '@alfa-client/tech-shared'; import { SnackBarService } from '@alfa-client/ui'; -import { Injectable } from '@angular/core'; +import { Injectable, inject } from '@angular/core'; import { Params } from '@angular/router'; import { ResourceUri } from '@ngxp/rest'; import { isNil } from 'lodash-es'; import { Observable, Subscription, startWith, tap } from 'rxjs'; import { OrganisationsEinheitListResourceService } from './organisations-einheit-list-resource.service'; import { OrganisationsEinheitResourceService } from './organisations-einheit-resource.service'; +import { + AdminOrganisationsEinheitListResource, + AdminOrganisationsEinheitResource, + AdminOrganisationsEinheitSettings, +} from './organisations-einheit.model'; @Injectable({ providedIn: 'root', }) export class OrganisationsEinheitService { + private listResourceService = inject(OrganisationsEinheitListResourceService); + private resourceService = inject(OrganisationsEinheitResourceService); + private navigationService = inject(NavigationService); + private snackBarService = inject(SnackBarService); + static ORGANISATIONS_EINHEIT_URL: string = 'organisationsEinheitUrl'; private subscription: Subscription; - constructor( - private listResourceService: OrganisationsEinheitListResourceService, - private resourceService: OrganisationsEinheitResourceService, - private navigationService: NavigationService, - private snackBarService: SnackBarService, - ) { + constructor() { this.listenToNavigation(); } diff --git a/alfa-client/libs/admin/organisations-einheit-shared/src/test-setup.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit-shared/src/test-setup.ts @@ -0,0 +1,12 @@ +import '@testing-library/jest-dom'; +import 'jest-preset-angular/setup-jest'; + +import { getTestBed } from '@angular/core/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; + +getTestBed().resetTestEnvironment(); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true, +}); diff --git a/alfa-client/libs/admin/settings/test/organisations-einheit/organisations-einheit.ts b/alfa-client/libs/admin/organisations-einheit-shared/src/test/organisations-einheit.ts similarity index 91% rename from alfa-client/libs/admin/settings/test/organisations-einheit/organisations-einheit.ts rename to alfa-client/libs/admin/organisations-einheit-shared/src/test/organisations-einheit.ts index ab26e7e4aca4f7bf41b047615adf99b1b77673dd..ca09b8a88d1a8988fb155ac9e7121731decd2d91 100644 --- a/alfa-client/libs/admin/settings/test/organisations-einheit/organisations-einheit.ts +++ b/alfa-client/libs/admin/organisations-einheit-shared/src/test/organisations-einheit.ts @@ -22,15 +22,15 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { faker } from '@faker-js/faker'; +import { toResource } from 'libs/tech-shared/test/resource'; import { times } from 'lodash-es'; -import { toResource } from '../../../../tech-shared/test/resource'; +import { OrganisationsEinheitListLinkRel } from '../lib/organisations-einheit.linkrel'; import { AdminOrganisationsEinheit, AdminOrganisationsEinheitListResource, AdminOrganisationsEinheitResource, AdminOrganisationsEinheitSyncResult, -} from '../../src'; -import { OrganisationsEinheitListLinkRel } from '../../src/lib/organisationseinheit/organisations-einheit.linkrel'; +} from '../lib/organisations-einheit.model'; export function createAdminOrganisationsEinheit(): AdminOrganisationsEinheit { return { diff --git a/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.json b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.lib.json b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.spec.json b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit-shared/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] +} diff --git a/alfa-client/libs/admin/organisations-einheit/.eslintrc.json b/alfa-client/libs/admin/organisations-einheit/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "admin", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "admin", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/admin/organisations-einheit/README.md b/alfa-client/libs/admin/organisations-einheit/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b9448bd56f8ab68884bf1b91f12b11efbc3125b0 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/README.md @@ -0,0 +1,7 @@ +# organisations-einheit + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test organisations-einheit` to execute the unit tests. diff --git a/alfa-client/libs/admin/organisations-einheit/jest.config.ts b/alfa-client/libs/admin/organisations-einheit/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..c01b9ea15a0bf53b365f4b52ed6c61fab54ee67a --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/jest.config.ts @@ -0,0 +1,21 @@ +export default { + displayName: 'admin-organisations-einheit', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + coverageDirectory: '../../../coverage/libs/admin/organisations-einheit', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/admin/organisations-einheit/project.json b/alfa-client/libs/admin/organisations-einheit/project.json new file mode 100644 index 0000000000000000000000000000000000000000..4e241535f764181483725e8eff197d5334606ff7 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/project.json @@ -0,0 +1,22 @@ +{ + "name": "admin-organisations-einheit", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/admin/organisations-einheit/src", + "prefix": "admin", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/admin/organisations-einheit/jest.config.ts", + "tsConfig": "libs/admin/organisations-einheit/tsconfig.spec.json" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + } + } +} diff --git a/alfa-client/libs/admin/organisations-einheit/src/index.ts b/alfa-client/libs/admin/organisations-einheit/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..1260cc47d77fd460b92c9cf9043996f3101bc969 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/src/index.ts @@ -0,0 +1,2 @@ +export * from './lib/organisations-einheit-container/organisations-einheit-container.component'; +export * from './lib/organisations-einheit-form-container/organisations-einheit-form-container.component'; diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.html b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.html similarity index 97% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.html rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.html index b23de32eb9a525804abae87d7001d38200b46cae..c642a727050172686a8d4f719f2bd5b7963f4aed 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.html +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.html @@ -27,7 +27,7 @@ <ng-container *ngIf="organisationsEinheitListStateResource$ | async as organisationsEinheitListStateResource"> <ozgcloud-spinner [stateResource]="organisationsEinheitListStateResource"> - <admin-organisationseinheit-list + <admin-organisations-einheit-list [organisationsEinheitResources]="organisationsEinheitListStateResource.resource | toEmbeddedResources: OrganisationsEinheitListLinkRel.LIST" data-test-id="organisations-einheit-list" /> diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts similarity index 81% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.spec.ts rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts index e7075fab81ab218a45c879e0e3b6430d21e2471c..2760d6e214e65704bf2b8e0ae833cf46e79f8cdc 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.spec.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.spec.ts @@ -21,19 +21,20 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AdminOrganisationsEinheitListResource, OrganisationsEinheitContainerComponent } from '@admin-client/admin-settings'; +import { OrganisationsEinheitService } from '@admin-client/organisations-einheit-shared'; import { StateResource, ToEmbeddedResourcesPipe, createStateResource } from '@alfa-client/tech-shared'; import { Mock, existsAsHtmlElement, getMockComponent, mock } from '@alfa-client/test-utils'; -import { SpinnerComponent } from '@alfa-client/ui'; +import { UiModule } from '@alfa-client/ui'; import { OrganisationsEinheitListResource } from '@alfa-client/zustaendige-stelle-shared'; +import { CommonModule } from '@angular/common'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ButtonWithSpinnerComponent } from '@ods/component'; +import { AdminOrganisationsEinheitListResource } from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model'; +import { createAdminOrganisationsEinheitListResource } from 'libs/admin/organisations-einheit-shared/src/test/organisations-einheit'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; import { of } from 'rxjs'; -import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test'; -import { createAdminOrganisationsEinheitListResource } from '../../../../test/organisations-einheit/organisations-einheit'; -import { OrganisationsEinheitService } from '../organisationseinheit.service'; -import { OrganisationsEinheitListComponent } from './organisationseinheit-list/organisationseinheit-list.component'; +import { OrganisationsEinheitContainerComponent } from './organisations-einheit-container.component'; +import { OrganisationsEinheitListComponent } from './organisations-einheit-list/organisations-einheit-list.component'; describe('OrganisationsEinheitContainerComponent', () => { let component: OrganisationsEinheitContainerComponent; @@ -53,13 +54,8 @@ describe('OrganisationsEinheitContainerComponent', () => { }; await TestBed.configureTestingModule({ - declarations: [ - OrganisationsEinheitContainerComponent, - MockComponent(OrganisationsEinheitListComponent), - MockComponent(SpinnerComponent), - ToEmbeddedResourcesPipe, - ], - imports: [ButtonWithSpinnerComponent], + declarations: [ToEmbeddedResourcesPipe], + imports: [CommonModule, UiModule, OrganisationsEinheitContainerComponent, MockComponent(OrganisationsEinheitListComponent)], providers: [{ provide: OrganisationsEinheitService, useValue: organisationsEinheitService }], }).compileComponents(); diff --git a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..00c5715c6751932a76c8cdd4ed26824edb2c4fe5 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-container.component.ts @@ -0,0 +1,29 @@ +import { + AdminOrganisationsEinheitListResource, + OrganisationsEinheitListLinkRel, + OrganisationsEinheitService, +} from '@admin-client/organisations-einheit-shared'; +import { StateResource, TechSharedModule } from '@alfa-client/tech-shared'; +import { UiModule } from '@alfa-client/ui'; +import { CommonModule } from '@angular/common'; +import { Component, inject, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; +import { OrganisationsEinheitListComponent } from './organisations-einheit-list/organisations-einheit-list.component'; + +@Component({ + selector: 'admin-organisations-einheit-container', + templateUrl: './organisations-einheit-container.component.html', + standalone: true, + imports: [CommonModule, UiModule, OrganisationsEinheitListComponent, TechSharedModule], +}) +export class OrganisationsEinheitContainerComponent implements OnInit { + private organisationsEinheitService = inject(OrganisationsEinheitService); + + organisationsEinheitListStateResource$: Observable<StateResource<AdminOrganisationsEinheitListResource>>; + + public readonly OrganisationsEinheitListLinkRel = OrganisationsEinheitListLinkRel; + + ngOnInit(): void { + this.organisationsEinheitListStateResource$ = this.organisationsEinheitService.getList(); + } +} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.html b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.html similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.html rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.html diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.spec.ts similarity index 89% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.spec.ts rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.spec.ts index e27a57ffe45f2d297534e7fa975ac299d8d6df9f..f7ce733a741f7c9c8a2162bca39ece86ad04b76f 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.spec.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.spec.ts @@ -21,8 +21,6 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AdminOrganisationsEinheitResource, AdminOrganisationsEinheitSyncResult } from '@admin-client/admin-settings'; -import { ConvertForDataTestPipe, ToResourceUriPipe } from '@alfa-client/tech-shared'; import { existsAsHtmlElement, getElementFromFixture, @@ -31,14 +29,19 @@ import { mock, notExistsAsHtmlElement, } from '@alfa-client/test-utils'; +import { CommonModule } from '@angular/common'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatTooltipModule } from '@angular/material/tooltip'; import { ActivatedRoute } from '@angular/router'; import { ExclamationIconComponent, ListComponent, ListItemComponent } from '@ods/system'; +import { + AdminOrganisationsEinheitResource, + AdminOrganisationsEinheitSyncResult, +} from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model'; +import { createAdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/test/organisations-einheit'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; -import { MockModule } from 'ng-mocks'; -import { createAdminOrganisationsEinheitResource } from '../../../../../test/organisations-einheit/organisations-einheit'; -import { OrganisationsEinheitListComponent } from './organisationseinheit-list.component'; +import { MockComponent, MockModule } from 'ng-mocks'; +import { OrganisationsEinheitListComponent } from './organisations-einheit-list.component'; describe('OrganisationsEinheitListComponent', () => { let component: OrganisationsEinheitListComponent; @@ -62,8 +65,14 @@ describe('OrganisationsEinheitListComponent', () => { useValue: mock(ActivatedRoute), }, ], - declarations: [OrganisationsEinheitListComponent, ConvertForDataTestPipe, ToResourceUriPipe, MockModule(MatTooltipModule)], - imports: [ListComponent, ListItemComponent, ExclamationIconComponent], + imports: [ + CommonModule, + OrganisationsEinheitListComponent, + MockComponent(ListComponent), + MockComponent(ListItemComponent), + MockComponent(ExclamationIconComponent), + MockModule(MatTooltipModule), + ], }).compileComponents(); fixture = TestBed.createComponent(OrganisationsEinheitListComponent); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.ts similarity index 76% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.ts rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.ts index da534519248b8216700a3a68300a8b79cb931afa..826556819ed09bee47196d4f0667a466d18fd3c0 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-container/organisations-einheit-list/organisations-einheit-list.component.ts @@ -21,12 +21,21 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AdminOrganisationsEinheitResource, AdminOrganisationsEinheitSyncResult } from '@admin-client/admin-settings'; +import { + AdminOrganisationsEinheitResource, + AdminOrganisationsEinheitSyncResult, +} from '@admin-client/organisations-einheit-shared'; +import { TechSharedModule } from '@alfa-client/tech-shared'; +import { CommonModule } from '@angular/common'; import { Component, Input } from '@angular/core'; +import { MatTooltip } from '@angular/material/tooltip'; +import { ExclamationIconComponent, ListComponent, ListItemComponent } from '@ods/system'; @Component({ - selector: 'admin-organisationseinheit-list', - templateUrl: './organisationseinheit-list.component.html', + selector: 'admin-organisations-einheit-list', + templateUrl: './organisations-einheit-list.component.html', + standalone: true, + imports: [CommonModule, ListComponent, ListItemComponent, ExclamationIconComponent, MatTooltip, TechSharedModule], }) export class OrganisationsEinheitListComponent { private _organisationsEinheitResources: AdminOrganisationsEinheitResource[] = []; diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.html b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.html similarity index 97% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.html rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.html index 896c27dc435d0c849209a39c5ee258ced3e5f52d..b7d7fddcc36559340f1389ae3a7cd8f3510860a9 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.html +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.html @@ -27,7 +27,7 @@ <ozgcloud-spinner [stateResource]="organisationsEinheitStateResource"> <h1 class="heading-1" data-test-id="organisations-form-container-headline">{{ organisationsEinheitStateResource.resource?.name }}</h1> - <admin-organisationseinheit-form + <admin-organisations-einheit-form [organisationsEinheitStateResource]="organisationsEinheitStateResource" data-test-id="organisations-form" /> diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.spec.ts similarity index 85% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.spec.ts rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.spec.ts index 37250ba2bee5dd2be06a30dfae00795ead98f5a9..52ff5b34755d15192ffef6d9f8cf668706eea6e3 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.spec.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.spec.ts @@ -21,17 +21,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AdminOrganisationsEinheitResource, OrganisationsEinheitFormContainerComponent } from '@admin-client/admin-settings'; +import { OrganisationsEinheitFormContainerComponent } from '@admin-client/organisations-einheit'; +import { OrganisationsEinheitService } from '@admin-client/organisations-einheit-shared'; import { StateResource, createStateResource } from '@alfa-client/tech-shared'; import { Mock, existsAsHtmlElement, getElementFromFixture, getMockComponent, mock } from '@alfa-client/test-utils'; -import { SpinnerComponent } from '@alfa-client/ui'; +import { UiModule } from '@alfa-client/ui'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { AdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model'; +import { createAdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/test/organisations-einheit'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; import { of } from 'rxjs'; -import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test'; -import { createAdminOrganisationsEinheitResource } from '../../../../test/organisations-einheit/organisations-einheit'; -import { OrganisationsEinheitService } from '../organisationseinheit.service'; -import { OrganisationsEinheitFormComponent } from './organisationseinheit-form/organisationseinheit-form.component'; +import { OrganisationsEinheitFormComponent } from './organisations-einheit-form/organisations-einheit-form.component'; describe('OrganisationsEinheitFormContainerComponent', () => { let component: OrganisationsEinheitFormContainerComponent; @@ -52,11 +53,7 @@ describe('OrganisationsEinheitFormContainerComponent', () => { }; await TestBed.configureTestingModule({ - declarations: [ - OrganisationsEinheitFormContainerComponent, - MockComponent(OrganisationsEinheitFormComponent), - MockComponent(SpinnerComponent), - ], + imports: [UiModule, OrganisationsEinheitFormContainerComponent, MockComponent(OrganisationsEinheitFormComponent)], providers: [{ provide: OrganisationsEinheitService, useValue: organisationsEinheitService }], }).compileComponents(); diff --git a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..348732f0834eef53cabecd03ff254b5e0a78b0a1 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form-container.component.ts @@ -0,0 +1,29 @@ +import { + AdminOrganisationsEinheitResource, + OrganisationsEinheitListLinkRel, + OrganisationsEinheitService, +} from '@admin-client/organisations-einheit-shared'; +import { StateResource } from '@alfa-client/tech-shared'; +import { UiModule } from '@alfa-client/ui'; +import { CommonModule } from '@angular/common'; +import { Component, inject, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; +import { OrganisationsEinheitFormComponent } from './organisations-einheit-form/organisations-einheit-form.component'; + +@Component({ + selector: 'admin-organisations-einheit-form-container', + templateUrl: './organisations-einheit-form-container.component.html', + standalone: true, + imports: [CommonModule, UiModule, OrganisationsEinheitFormComponent], +}) +export class OrganisationsEinheitFormContainerComponent implements OnInit { + private organisationsEinheitService = inject(OrganisationsEinheitService); + + organisationsEinheitStateResource$: Observable<StateResource<AdminOrganisationsEinheitResource>>; + + ngOnInit(): void { + this.organisationsEinheitStateResource$ = this.organisationsEinheitService.get(); + } + + protected readonly OrganisationsEinheitListLinkRel = OrganisationsEinheitListLinkRel; +} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.html b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.html similarity index 92% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.html rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.html index 5c572e8047dc0c1a01751a4443bc981f39e35da4..caf5dc45970a1fa4ac2309d5b332d5b1412668e9 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.html +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.html @@ -24,7 +24,7 @@ --> <form class="form flex-col" [formGroup]="formService.form"> - <admin-organisationseinheit-signatur class="mb-6 block" data-test-id="organisations-einheit-signatur-component" /> + <admin-organisations-einheit-signatur class="mb-6 block" data-test-id="organisations-einheit-signatur-component" /> <ods-button-with-spinner data-test-id="save-button" diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.spec.ts similarity index 89% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.spec.ts index ec188efcf2a3f6cc0f6ed22deec711520f8c2218..b329e45f498f6602c7e98eabc78dbc10ef3ce18a 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.spec.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.spec.ts @@ -21,21 +21,21 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; +import { OrganisationsEinheitService } from '@admin-client/organisations-einheit-shared'; import { createEmptyStateResource, createStateResource, ProblemDetail } from '@alfa-client/tech-shared'; import { existsAsHtmlElement, Mock, mock, notExistsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ButtonWithSpinnerComponent } from '@ods/component'; +import { AdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model'; +import { createAdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/test/organisations-einheit'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { createInvalidParam, createProblemDetail } from 'libs/tech-shared/test/error'; import { MockComponent } from 'ng-mocks'; import { of } from 'rxjs'; -import { createInvalidParam, createProblemDetail } from '../../../../../../../tech-shared/test/error'; -import { createAdminOrganisationsEinheitResource } from '../../../../../test/organisations-einheit/organisations-einheit'; -import { OrganisationsEinheitService } from '../../organisationseinheit.service'; -import { OrganisationsEinheitFormComponent } from './organisationseinheit-form.component'; -import { OrganisationsEinheitSignaturComponent } from './organisationseinheit-signatur/organisationseinheit-signatur.component'; -import { OrganisationsEinheitFormService } from './organisationseinheit.formservice'; +import { OrganisationsEinheitFormComponent } from './organisations-einheit-form.component'; +import { OrganisationsEinheitSignaturComponent } from './organisations-einheit-signatur/organisations-einheit-signatur.component'; +import { OrganisationsEinheitFormService } from './organisations-einheit.formservice'; describe('OrganisationsEinheitFormComponent', () => { let component: OrganisationsEinheitFormComponent; @@ -51,12 +51,13 @@ describe('OrganisationsEinheitFormComponent', () => { organisationsEinheitService = mock(OrganisationsEinheitService); await TestBed.configureTestingModule({ - declarations: [ + imports: [ + ReactiveFormsModule, + FormsModule, OrganisationsEinheitFormComponent, MockComponent(OrganisationsEinheitSignaturComponent), MockComponent(ButtonWithSpinnerComponent), ], - imports: [ReactiveFormsModule, FormsModule], providers: [{ provide: OrganisationsEinheitService, useValue: organisationsEinheitService }], }).compileComponents(); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.ts similarity index 77% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.ts rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.ts index 257aca3ebd2ba3c9d2d1059e33288cfd5d8258a3..ac251ee802e66d5cb0894a34fd272129cc2ef66d 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-form.component.ts @@ -21,17 +21,23 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; +import { AdminOrganisationsEinheitResource } from '@admin-client/organisations-einheit-shared'; import { StateResource, createEmptyStateResource, isNotNil } from '@alfa-client/tech-shared'; +import { CommonModule } from '@angular/common'; import { Component, Input } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { Resource } from '@ngxp/rest'; +import { ButtonWithSpinnerComponent } from '@ods/component'; import { Observable, of } from 'rxjs'; -import { OrganisationsEinheitFormService } from './organisationseinheit.formservice'; +import { OrganisationsEinheitSignaturComponent } from './organisations-einheit-signatur/organisations-einheit-signatur.component'; +import { OrganisationsEinheitFormService } from './organisations-einheit.formservice'; @Component({ - selector: 'admin-organisationseinheit-form', - templateUrl: './organisationseinheit-form.component.html', + selector: 'admin-organisations-einheit-form', + templateUrl: './organisations-einheit-form.component.html', providers: [OrganisationsEinheitFormService], + standalone: true, + imports: [CommonModule, FormsModule, ReactiveFormsModule, OrganisationsEinheitSignaturComponent, ButtonWithSpinnerComponent], }) export class OrganisationsEinheitFormComponent { submitInProgress$: Observable<StateResource<Resource>> = of(createEmptyStateResource<Resource>()); diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.html b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.html similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.html rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.html diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.spec.ts similarity index 83% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.spec.ts rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.spec.ts index 28c62098f15f5f1c45772914f67a605abc83724b..1c84dc8f28b65640d83b7e69082a91809a1af5c9 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.spec.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.spec.ts @@ -28,11 +28,11 @@ import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; import { EffectsModule } from '@ngrx/effects'; import { StoreModule } from '@ngrx/store'; import { TextareaEditorComponent } from '@ods/component'; -import { MockComponent } from 'ng-mocks'; -import { getDataTestIdOf } from '../../../../../../../../tech-shared/test/data-test'; -import { OrganisationsEinheitService } from '../../../organisationseinheit.service'; -import { OrganisationsEinheitFormService } from '../organisationseinheit.formservice'; -import { OrganisationsEinheitSignaturComponent } from './organisationseinheit-signatur.component'; +import { OrganisationsEinheitService } from 'libs/admin/organisations-einheit-shared/src'; +import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; +import { MockComponent, MockModule } from 'ng-mocks'; +import { OrganisationsEinheitFormService } from '../organisations-einheit.formservice'; +import { OrganisationsEinheitSignaturComponent } from './organisations-einheit-signatur.component'; describe('OrganisationsEinheitSignaturComponent', () => { let component: OrganisationsEinheitSignaturComponent; @@ -45,8 +45,14 @@ describe('OrganisationsEinheitSignaturComponent', () => { formService = new OrganisationsEinheitFormService(new FormBuilder(), useFromMock(mock(OrganisationsEinheitService))); await TestBed.configureTestingModule({ - imports: [ReactiveFormsModule, NavigationSharedModule, StoreModule.forRoot({}), EffectsModule.forRoot([])], - declarations: [OrganisationsEinheitSignaturComponent, MockComponent(TextareaEditorComponent)], + imports: [ + OrganisationsEinheitSignaturComponent, + StoreModule.forRoot({}), + EffectsModule.forRoot([]), + MockModule(ReactiveFormsModule), + MockModule(NavigationSharedModule), + MockComponent(TextareaEditorComponent), + ], providers: [ { provide: OrganisationsEinheitFormService, diff --git a/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..9ce5eb1142b1291e6115e557610a206968c62894 --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit-signatur/organisations-einheit-signatur.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { TextareaEditorComponent } from '@ods/component'; +import { OrganisationsEinheitFormService } from '../organisations-einheit.formservice'; + +@Component({ + selector: 'admin-organisations-einheit-signatur', + templateUrl: './organisations-einheit-signatur.component.html', + standalone: true, + imports: [FormsModule, ReactiveFormsModule, TextareaEditorComponent], +}) +export class OrganisationsEinheitSignaturComponent { + public readonly formServiceClass = OrganisationsEinheitFormService; + + constructor(public formService: OrganisationsEinheitFormService) {} +} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.spec.ts similarity index 87% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.spec.ts index 24e04b29960effb42997681578123bda5d10dcd3..d44e2084f08bb09746597c0630a1467eabf207e8 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.spec.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.spec.ts @@ -21,14 +21,14 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; import { StateResource, createStateResource } from '@alfa-client/tech-shared'; import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; import { FormBuilder } from '@angular/forms'; +import { OrganisationsEinheitService } from 'libs/admin/organisations-einheit-shared/src'; +import { AdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/lib/organisations-einheit.model'; +import { createAdminOrganisationsEinheitResource } from 'libs/admin/organisations-einheit-shared/src/test/organisations-einheit'; import { of } from 'rxjs'; -import { createAdminOrganisationsEinheitResource } from '../../../../../test/organisations-einheit/organisations-einheit'; -import { OrganisationsEinheitService } from '../../organisationseinheit.service'; -import { OrganisationsEinheitFormService } from './organisationseinheit.formservice'; +import { OrganisationsEinheitFormService } from './organisations-einheit.formservice'; describe('OrganisationsEinheitFormService', () => { let service: OrganisationsEinheitFormService; diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.ts b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.ts similarity index 92% rename from alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.ts rename to alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.ts index 6e7650634e7a1ebdedf02c1681a85d971a10e156..0654a19ed8c4508e9dfaa74c6f28a02dfd10e1df 100644 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit.formservice.ts +++ b/alfa-client/libs/admin/organisations-einheit/src/lib/organisations-einheit-form-container/organisations-einheit-form/organisations-einheit.formservice.ts @@ -21,12 +21,11 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AdminOrganisationsEinheitResource } from '@admin-client/admin-settings'; +import { AdminOrganisationsEinheitResource, OrganisationsEinheitService } from '@admin-client/organisations-einheit-shared'; import { AbstractFormService, EMPTY_STRING, StateResource } from '@alfa-client/tech-shared'; import { Injectable } from '@angular/core'; import { FormControl, UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { Observable } from 'rxjs'; -import { OrganisationsEinheitService } from '../../organisationseinheit.service'; @Injectable() export class OrganisationsEinheitFormService extends AbstractFormService { diff --git a/alfa-client/libs/admin/organisations-einheit/src/test-setup.ts b/alfa-client/libs/admin/organisations-einheit/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/src/test-setup.ts @@ -0,0 +1,12 @@ +import '@testing-library/jest-dom'; +import 'jest-preset-angular/setup-jest'; + +import { getTestBed } from '@angular/core/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; + +getTestBed().resetTestEnvironment(); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true, +}); diff --git a/alfa-client/libs/admin/organisations-einheit/tsconfig.json b/alfa-client/libs/admin/organisations-einheit/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/admin/organisations-einheit/tsconfig.lib.json b/alfa-client/libs/admin/organisations-einheit/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/alfa-client/libs/admin/organisations-einheit/tsconfig.spec.json b/alfa-client/libs/admin/organisations-einheit/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b --- /dev/null +++ b/alfa-client/libs/admin/organisations-einheit/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] +} diff --git a/alfa-client/libs/admin/postfach-shared/.eslintrc.json b/alfa-client/libs/admin/postfach-shared/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50 --- /dev/null +++ b/alfa-client/libs/admin/postfach-shared/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "admin", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "admin", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/admin/postfach-shared/README.md b/alfa-client/libs/admin/postfach-shared/README.md new file mode 100644 index 0000000000000000000000000000000000000000..874583d490267251cb09a68b844e47c70fe9dd8f --- /dev/null +++ b/alfa-client/libs/admin/postfach-shared/README.md @@ -0,0 +1,7 @@ +# admin-postfach-shared + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test admin-postfach-shared` to execute the unit tests. diff --git a/alfa-client/libs/admin/postfach-shared/jest.config.ts b/alfa-client/libs/admin/postfach-shared/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..b2e076949998d472951970fe19ca5c4fcca17f70 --- /dev/null +++ b/alfa-client/libs/admin/postfach-shared/jest.config.ts @@ -0,0 +1,21 @@ +export default { + displayName: 'admin-postfach-shared', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + coverageDirectory: '../../../coverage/libs/admin/postfach-shared', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/admin/postfach-shared/project.json b/alfa-client/libs/admin/postfach-shared/project.json new file mode 100644 index 0000000000000000000000000000000000000000..6489dc23d02f10a0660d03ccd39ccebae8dadc5d --- /dev/null +++ b/alfa-client/libs/admin/postfach-shared/project.json @@ -0,0 +1,22 @@ +{ + "name": "admin-postfach-shared", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/admin/postfach-shared/src", + "prefix": "admin", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "tsConfig": "libs/admin//postfach-shared/tsconfig.spec.json", + "jestConfig": "libs/admin/postfach-shared/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + } + } +} diff --git a/alfa-client/libs/admin/postfach-shared/src/index.ts b/alfa-client/libs/admin/postfach-shared/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..d17f2cb9fe436032109d7c36c889cdb7f91652ae --- /dev/null +++ b/alfa-client/libs/admin/postfach-shared/src/index.ts @@ -0,0 +1,2 @@ +export * from './lib/postfach.model'; +export * from './lib/postfach.service'; diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-resource.service.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach-resource.service.ts similarity index 81% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-resource.service.ts rename to alfa-client/libs/admin/postfach-shared/src/lib/postfach-resource.service.ts index e9e650383f1736a2813254a0c692a9c95acebf8f..48043163dea114eba85fa881d9047ec90f8ef24a 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-resource.service.ts +++ b/alfa-client/libs/admin/postfach-shared/src/lib/postfach-resource.service.ts @@ -21,24 +21,14 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - ApiResourceService, - ResourceRepository, - ResourceServiceConfig, -} from '@alfa-client/tech-shared'; -import { SettingsService } from '../admin-settings.service'; +import { SettingsService } from '@admin-client/settings-shared'; +import { ApiResourceService, ResourceRepository, ResourceServiceConfig } from '@alfa-client/tech-shared'; import { PostfachLinkRel } from './postfach.linkrel'; import { PostfachResource } from './postfach.model'; -export class PostfachResourceService extends ApiResourceService< - PostfachResource, - PostfachResource -> {} +export class PostfachResourceService extends ApiResourceService<PostfachResource, PostfachResource> {} -export function createPostfachResourceService( - repository: ResourceRepository, - settingService: SettingsService, -) { +export function createPostfachResourceService(repository: ResourceRepository, settingService: SettingsService) { return new ApiResourceService(buildConfig(settingService), repository); } diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.linkrel.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.linkrel.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach.linkrel.ts rename to alfa-client/libs/admin/postfach-shared/src/lib/postfach.linkrel.ts diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.model.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.model.ts similarity index 94% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach.model.ts rename to alfa-client/libs/admin/postfach-shared/src/lib/postfach.model.ts index 043e56c7addc20df940c6c799b8a92f67f1618d0..c592dec3e6621543ca69e9ee23abdeea1ec6f4ec 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.model.ts +++ b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.model.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Resource } from '@ngxp/rest'; -import { SettingName } from '../admin-settings.model'; +import { SettingName } from 'libs/admin/settings-shared/src/lib/settings.model'; export interface Absender { name: string; diff --git a/alfa-client/libs/admin/postfach-shared/src/lib/postfach.providers.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.providers.ts new file mode 100644 index 0000000000000000000000000000000000000000..b998c7807b7a53ee04ac775eba70fff4c63b2003 --- /dev/null +++ b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.providers.ts @@ -0,0 +1,12 @@ +import { SettingsService } from '@admin-client/settings-shared'; +import { ResourceRepository } from '@alfa-client/tech-shared'; +import { createPostfachResourceService, PostfachResourceService } from './postfach-resource.service'; + +export const PostfachProviders = [ + SettingsService, + { + provide: PostfachResourceService, + useFactory: createPostfachResourceService, + deps: [ResourceRepository, SettingsService], + }, +]; diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.spec.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.spec.ts similarity index 80% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.spec.ts rename to alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.spec.ts index 96381994e61c05c95474c5871ea0a132794f1937..d779cb50dc2173e7dee4dc929a7e11f5d259724d 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.spec.ts +++ b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.spec.ts @@ -21,19 +21,15 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - StateResource, - createEmptyStateResource, - createStateResource, -} from '@alfa-client/tech-shared'; -import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; +import { createEmptyStateResource, createStateResource, StateResource } from '@alfa-client/tech-shared'; +import { Mock, mock } from '@alfa-client/test-utils'; import { SnackBarService } from '@alfa-client/ui'; import { Type } from '@angular/core'; -import { fakeAsync, tick } from '@angular/core/testing'; +import { fakeAsync, TestBed, tick } from '@angular/core/testing'; import { cold } from 'jest-marbles'; import { singleCold, singleHot } from 'libs/tech-shared/test/marbles'; import { Observable, of } from 'rxjs'; -import { createPostfachResource, createPostfachSettingItem } from '../../../test/postfach/postfach'; +import { createPostfachResource, createPostfachSettingItem } from '../test/postfach'; import { PostfachResourceService } from './postfach-resource.service'; import { PostfachResource, PostfachSettingsItem } from './postfach.model'; import { PostfachService } from './postfach.service'; @@ -41,12 +37,21 @@ import { PostfachService } from './postfach.service'; describe('PostfachService', () => { let service: PostfachService; let resourceService: Mock<PostfachResourceService>; - const snackbarService: Mock<SnackBarService> = mock(SnackBarService); + let snackbarService: Mock<SnackBarService>; beforeEach(() => { resourceService = mockResourceService(PostfachResourceService); + snackbarService = mock(SnackBarService); + + TestBed.configureTestingModule({ + providers: [ + PostfachService, + { provide: PostfachResourceService, useValue: resourceService }, + { provide: SnackBarService, useValue: snackbarService }, + ], + }); - service = new PostfachService(useFromMock(resourceService), useFromMock(snackbarService)); + service = TestBed.inject(PostfachService); }); it('should create', () => { @@ -55,8 +60,7 @@ describe('PostfachService', () => { describe('get', () => { const postfachResource: PostfachResource = createPostfachResource(); - const postfachStateResource: StateResource<PostfachResource> = - createStateResource(postfachResource); + const postfachStateResource: StateResource<PostfachResource> = createStateResource(postfachResource); it('should call resourceservice get', () => { service.get(); @@ -76,8 +80,7 @@ describe('PostfachService', () => { describe('save', () => { const postfachSettingsItem: PostfachSettingsItem = createPostfachSettingItem(); const postfachResource: PostfachResource = createPostfachResource(); - const postfachStateResource: StateResource<PostfachResource> = - createStateResource(postfachResource); + const postfachStateResource: StateResource<PostfachResource> = createStateResource(postfachResource); beforeEach(() => {}); @@ -92,9 +95,7 @@ describe('PostfachService', () => { it('should return saved value', () => { resourceService.save.mockReturnValue(singleCold(postfachStateResource, '-a')); - const savedPostfach: Observable<StateResource<PostfachResource>> = service.save( - postfachResource.settingBody, - ); + const savedPostfach: Observable<StateResource<PostfachResource>> = service.save(postfachResource.settingBody); expect(savedPostfach).toBeObservable( cold('ab', { @@ -106,16 +107,12 @@ describe('PostfachService', () => { it('should show message in snackbar', fakeAsync(() => { resourceService.save.mockReturnValue(of(postfachStateResource)); - const savedPostfach: Observable<StateResource<PostfachResource>> = service.save( - postfachResource.settingBody, - ); + const savedPostfach: Observable<StateResource<PostfachResource>> = service.save(postfachResource.settingBody); savedPostfach.subscribe(); tick(); - expect(snackbarService.showInfo).toHaveBeenCalledWith( - 'Die Signatur wurde erfolgreich gespeichert.', - ); + expect(snackbarService.showInfo).toHaveBeenCalledWith('Die Signatur wurde erfolgreich gespeichert.'); })); }); }); diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.ts b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.ts similarity index 85% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.ts rename to alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.ts index 9acda48961c44213c33ca600cf2535a042a97da5..a8fb7896e27e371c4a968238d92928c70d1370dc 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach.service.ts +++ b/alfa-client/libs/admin/postfach-shared/src/lib/postfach.service.ts @@ -21,20 +21,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { SettingName } from '@admin-client/settings-shared'; import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; import { SnackBarService } from '@alfa-client/ui'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Observable, startWith, tap } from 'rxjs'; -import { SettingName } from '../admin-settings.model'; import { PostfachResourceService } from './postfach-resource.service'; import { Postfach, PostfachResource, PostfachSettingsItem } from './postfach.model'; @Injectable() export class PostfachService { - constructor( - private postfachResourceService: PostfachResourceService, - private snackbarService: SnackBarService, - ) {} + private postfachResourceService = inject(PostfachResourceService) + private snackbarService = inject(SnackBarService) public get(): Observable<StateResource<PostfachResource>> { return this.postfachResourceService.get(); @@ -42,9 +40,7 @@ export class PostfachService { public save(postfach: Postfach): Observable<StateResource<PostfachResource>> { return this.postfachResourceService.save(this.buildPostfachSettingItem(postfach)).pipe( - tap((stateResource: StateResource<PostfachResource>) => - this.showInfoAfterSave(stateResource), - ), + tap((stateResource: StateResource<PostfachResource>) => this.showInfoAfterSave(stateResource)), startWith(createEmptyStateResource<PostfachResource>(true)), ); } diff --git a/alfa-client/libs/admin/postfach-shared/src/test-setup.ts b/alfa-client/libs/admin/postfach-shared/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe --- /dev/null +++ b/alfa-client/libs/admin/postfach-shared/src/test-setup.ts @@ -0,0 +1,12 @@ +import '@testing-library/jest-dom'; +import 'jest-preset-angular/setup-jest'; + +import { getTestBed } from '@angular/core/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; + +getTestBed().resetTestEnvironment(); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true, +}); diff --git a/alfa-client/libs/admin/settings/test/postfach/postfach.ts b/alfa-client/libs/admin/postfach-shared/src/test/postfach.ts similarity index 90% rename from alfa-client/libs/admin/settings/test/postfach/postfach.ts rename to alfa-client/libs/admin/postfach-shared/src/test/postfach.ts index 503e9ec37d277911c0ae4a8c51e760abde268a8d..93d7492c32b0e0b595a447757952ee358b0e1345 100644 --- a/alfa-client/libs/admin/settings/test/postfach/postfach.ts +++ b/alfa-client/libs/admin/postfach-shared/src/test/postfach.ts @@ -22,13 +22,9 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { faker } from '@faker-js/faker'; +import { SettingItemResource, SettingName } from 'libs/admin/settings-shared/src/lib/settings.model'; import { toResource } from 'libs/tech-shared/test/resource'; -import { SettingItemResource, SettingName } from '../../src/lib/admin-settings.model'; -import { - Postfach, - PostfachResource, - PostfachSettingsItem, -} from '../../src/lib/postfach/postfach.model'; +import { Postfach, PostfachResource, PostfachSettingsItem } from '../lib/postfach.model'; export function createPostfach(): Postfach { return { diff --git a/alfa-client/libs/admin/postfach-shared/tsconfig.json b/alfa-client/libs/admin/postfach-shared/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd --- /dev/null +++ b/alfa-client/libs/admin/postfach-shared/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/admin/postfach-shared/tsconfig.lib.json b/alfa-client/libs/admin/postfach-shared/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a --- /dev/null +++ b/alfa-client/libs/admin/postfach-shared/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/alfa-client/libs/admin/postfach-shared/tsconfig.spec.json b/alfa-client/libs/admin/postfach-shared/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b --- /dev/null +++ b/alfa-client/libs/admin/postfach-shared/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] +} diff --git a/alfa-client/libs/admin/postfach/.eslintrc.json b/alfa-client/libs/admin/postfach/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50 --- /dev/null +++ b/alfa-client/libs/admin/postfach/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "admin", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "admin", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/admin/postfach/README.md b/alfa-client/libs/admin/postfach/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b12df49b566013390d991563573397edcab2f3df --- /dev/null +++ b/alfa-client/libs/admin/postfach/README.md @@ -0,0 +1,7 @@ +# postfach + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test postfach` to execute the unit tests. diff --git a/alfa-client/libs/admin/postfach/jest.config.ts b/alfa-client/libs/admin/postfach/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..17564088672789bf1937421fc459159f663d0aff --- /dev/null +++ b/alfa-client/libs/admin/postfach/jest.config.ts @@ -0,0 +1,21 @@ +export default { + displayName: 'admin-postfach', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + coverageDirectory: '../../../coverage/libs/admin/postfach', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/admin/postfach/project.json b/alfa-client/libs/admin/postfach/project.json new file mode 100644 index 0000000000000000000000000000000000000000..d071f490b29c4a46bbc0c07779f5680aed9f1d3b --- /dev/null +++ b/alfa-client/libs/admin/postfach/project.json @@ -0,0 +1,22 @@ +{ + "name": "admin-postfach", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/admin/postfach/src", + "prefix": "admin", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "tsConfig": "libs/admin/postfach/tsconfig.spec.json", + "jestConfig": "libs/admin/postfach/jest.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + } + } +} diff --git a/alfa-client/libs/admin/postfach/src/index.ts b/alfa-client/libs/admin/postfach/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..691b628e2625a1716e38bc16f0346a68e5066e6a --- /dev/null +++ b/alfa-client/libs/admin/postfach/src/index.ts @@ -0,0 +1 @@ +export * from './lib/postfach-container/postfach-container.component'; diff --git a/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.html b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.html new file mode 100644 index 0000000000000000000000000000000000000000..3e8e4b49ae09ba083768eb4a1ffa4155ab1bb49c --- /dev/null +++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.html @@ -0,0 +1,2 @@ +<h1 class="heading-1">Postfach</h1> +<admin-postfach-form [postfachStateResource]="postfachStateResource$ | async" /> diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.spec.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.spec.ts similarity index 77% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.spec.ts rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.spec.ts index 59ddabb40acfdb61b8f1f7d105b65304d9d665e1..7cf10044a062cd29edaff204e91432f302651c2b 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.spec.ts +++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.spec.ts @@ -21,15 +21,15 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { StateResource, createStateResource } from '@alfa-client/tech-shared'; +import { createStateResource, StateResource } from '@alfa-client/tech-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; +import { PostfachResource } from 'libs/admin/postfach-shared/src/lib/postfach.model'; +import { PostfachService } from 'libs/admin/postfach-shared/src/lib/postfach.service'; +import { createPostfachResource } from 'libs/admin/postfach-shared/src/test/postfach'; import { singleCold, singleHot } from 'libs/tech-shared/test/marbles'; import { Mock, mock } from 'libs/test-utils/src/lib/mocking'; import { MockComponent } from 'ng-mocks'; -import { createPostfachResource } from '../../../../test/postfach/postfach'; -import { PostfachResource } from '../postfach.model'; -import { PostfachService } from '../postfach.service'; import { PostfachContainerComponent } from './postfach-container.component'; import { PostfachFormComponent } from './postfach-form/postfach-form.component'; @@ -41,15 +41,19 @@ describe('PostfachContainerComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [PostfachContainerComponent, MockComponent(PostfachFormComponent)], - imports: [ReactiveFormsModule], - providers: [ - { - provide: PostfachService, - useValue: postfachService, + imports: [PostfachContainerComponent, ReactiveFormsModule, MockComponent(PostfachFormComponent)], + }) + .overrideComponent(PostfachContainerComponent, { + set: { + providers: [ + { + provide: PostfachService, + useValue: postfachService, + }, + ], }, - ], - }).compileComponents(); + }) + .compileComponents(); }); beforeEach(() => { @@ -71,8 +75,7 @@ describe('PostfachContainerComponent', () => { }); it('should set postfach', () => { - const postfachStateResource: StateResource<PostfachResource> = - createStateResource(createPostfachResource()); + const postfachStateResource: StateResource<PostfachResource> = createStateResource(createPostfachResource()); postfachService.get.mockReturnValue(singleHot(postfachStateResource)); component.ngOnInit(); diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.ts similarity index 76% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.ts rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.ts index ef4d587709fa59c348ca44a9fa3fa5d07e68d7ef..e514cab40d7f49234f2b382cac41a2fcd89cc0f5 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.ts +++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-container.component.ts @@ -21,20 +21,24 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { PostfachResource, PostfachService } from '@admin-client/postfach-shared'; import { StateResource } from '@alfa-client/tech-shared'; -import { Component, OnInit } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { Component, inject, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { PostfachResource } from '../postfach.model'; -import { PostfachService } from '../postfach.service'; +import { PostfachFormComponent } from './postfach-form/postfach-form.component'; @Component({ selector: 'admin-postfach-container', templateUrl: './postfach-container.component.html', + standalone: true, + imports: [CommonModule, PostfachFormComponent], + providers: [PostfachService], }) export class PostfachContainerComponent implements OnInit { - postfachStateResource$: Observable<StateResource<PostfachResource>>; + private postfachService = inject(PostfachService); - constructor(private postfachService: PostfachService) {} + postfachStateResource$: Observable<StateResource<PostfachResource>>; ngOnInit(): void { this.postfachStateResource$ = this.postfachService.get(); diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.html b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.html similarity index 90% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.html rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.html index 7e20b812003e255ed725fa2dd420c120ae919761..a71490c537ecf7e2a65448b8e1bd2b6aecd2128e 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.html +++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.html @@ -59,8 +59,8 @@ ></text-field> </div> <div class="h-20"></div> ---> - <postfach-signatur class="mb-6 block" /> + --> + <admin-postfach-signatur class="mb-6 block" /> <ods-button-with-spinner data-test-id="save-button" @@ -69,11 +69,12 @@ (clickEmitter)="submit()" ></ods-button-with-spinner> - <span - *ngIf="formService.isInvalid()" - data-test-id="invalid-empty-message-span" - class="m-2 text-red-500" - > - *Es müssen alle Felder ausgefüllt sein. - </span> + @if (formService.isInvalid()) { + <span + data-test-id="invalid-empty-message-span" + class="m-2 text-red-500" + > + *Es müssen alle Felder ausgefüllt sein. + </span> + } </form> diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.spec.ts similarity index 93% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.spec.ts index 267dd312e6379f190eba3de94c3385a64cb86137..c5458b54917f7428bb5917bc8dd9b3ca468491fa 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.spec.ts +++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.spec.ts @@ -26,14 +26,14 @@ import { dispatchEventFromFixture, existsAsHtmlElement, Mock, mock, notExistsAsH import { ComponentFixture, TestBed } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ButtonWithSpinnerComponent } from '@ods/component'; +import { PostfachResource } from 'libs/admin/postfach-shared/src/lib/postfach.model'; +import { PostfachService } from 'libs/admin/postfach-shared/src/lib/postfach.service'; +import { createPostfachResource } from 'libs/admin/postfach-shared/src/test/postfach'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { createInvalidParam, createProblemDetail } from 'libs/tech-shared/test/error'; import { singleCold } from 'libs/tech-shared/test/marbles'; import { MockComponent } from 'ng-mocks'; import { EMPTY } from 'rxjs'; -import { createPostfachResource } from '../../../../../test/postfach/postfach'; -import { PostfachResource } from '../../postfach.model'; -import { PostfachService } from '../../postfach.service'; import { PostfachFormComponent } from './postfach-form.component'; import { PostfachSignaturComponent } from './postfach-signatur/postfach-signatur.component'; import { PostfachFormService } from './postfach.formservice'; @@ -50,8 +50,13 @@ describe('PostfachFormComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [PostfachFormComponent, MockComponent(PostfachSignaturComponent), MockComponent(ButtonWithSpinnerComponent)], - imports: [ReactiveFormsModule, FormsModule], + imports: [ + PostfachFormComponent, + ReactiveFormsModule, + FormsModule, + MockComponent(PostfachSignaturComponent), + MockComponent(ButtonWithSpinnerComponent), + ], providers: [ { provide: PostfachService, diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.ts similarity index 75% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.ts rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.ts index 065afc8820a884e0956a1976ded218896639e4c5..b7f96b97a9b3d19c7a9aeb0a7fbf796f12370be6 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-form.component.ts +++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-form.component.ts @@ -21,19 +21,27 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { PostfachResource } from '@admin-client/postfach-shared'; import { createEmptyStateResource, isNotNil, StateResource } from '@alfa-client/tech-shared'; -import { Component, Input } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { Component, inject, Input } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { Resource } from '@ngxp/rest'; +import { ButtonWithSpinnerComponent } from '@ods/component'; import { Observable, of } from 'rxjs'; -import { PostfachResource } from '../../postfach.model'; +import { PostfachSignaturComponent } from './postfach-signatur/postfach-signatur.component'; import { PostfachFormService } from './postfach.formservice'; @Component({ - selector: 'postfach-form', + selector: 'admin-postfach-form', templateUrl: './postfach-form.component.html', providers: [PostfachFormService], + standalone: true, + imports: [CommonModule, FormsModule, ReactiveFormsModule, PostfachSignaturComponent, ButtonWithSpinnerComponent], }) export class PostfachFormComponent { + public formService = inject(PostfachFormService); + submitInProgress$: Observable<StateResource<Resource>> = of(createEmptyStateResource<Resource>()); @Input() set postfachStateResource(stateResource: StateResource<PostfachResource>) { @@ -48,8 +56,6 @@ export class PostfachFormComponent { protected readonly PostfachFormService = PostfachFormService; - constructor(public formService: PostfachFormService) {} - public submit(): void { this.submitInProgress$ = this.formService.submit(); } diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.html b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.html similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.html rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.html diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts similarity index 80% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts index 1d532c89621ce211cd75ebfec02dc109eb7cc6b8..ae1fc334273e19f27c93b4bb8eaa2b9fa145077b 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts +++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.spec.ts @@ -23,11 +23,11 @@ */ import { getElementFromFixture, mock, Mock } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ReactiveFormsModule } from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { TextareaEditorComponent } from '@ods/component'; +import { PostfachService } from 'libs/admin/postfach-shared/src/lib/postfach.service'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { MockComponent } from 'ng-mocks'; -import { PostfachService } from '../../../postfach.service'; import { PostfachFormComponent } from '../postfach-form.component'; import { PostfachFormService } from '../postfach.formservice'; import { PostfachSignaturComponent } from './postfach-signatur.component'; @@ -36,29 +36,19 @@ describe('PostfachSignaturComponent', () => { let component: PostfachSignaturComponent; let fixture: ComponentFixture<PostfachSignaturComponent>; - let formService: Mock<PostfachFormService>; let postfachService: Mock<PostfachService>; + const signaturTextarea = getDataTestIdOf('signatur-text'); beforeEach(async () => { - formService = mock(PostfachFormService); postfachService = mock(PostfachService); + await TestBed.configureTestingModule({ - imports: [ReactiveFormsModule], - declarations: [PostfachFormComponent, MockComponent(TextareaEditorComponent)], - providers: [ - { - provide: PostfachFormService, - useValue: formService, - }, - { - provide: PostfachService, - useValue: postfachService, - }, - ], + imports: [PostfachFormComponent, FormsModule, ReactiveFormsModule, MockComponent(TextareaEditorComponent)], + providers: [PostfachFormService, { provide: PostfachService, useValue: postfachService }], }).compileComponents(); + fixture = TestBed.createComponent(PostfachSignaturComponent); - TestBed.inject(PostfachService); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..39c306caa8dcc429502fb285eec38e09d515a499 --- /dev/null +++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts @@ -0,0 +1,15 @@ +import { Component, inject } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { TextareaEditorComponent } from '@ods/component'; +import { PostfachFormService } from '../postfach.formservice'; + +@Component({ + selector: 'admin-postfach-signatur', + templateUrl: './postfach-signatur.component.html', + standalone: true, + imports: [FormsModule, ReactiveFormsModule, TextareaEditorComponent], +}) +export class PostfachSignaturComponent { + public formService: PostfachFormService = inject(PostfachFormService); + protected readonly formServiceClass = PostfachFormService; +} diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.spec.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.spec.ts similarity index 92% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.spec.ts rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.spec.ts index c76965d3fc2d3ba9306f4fe161620dc3843868a9..d97f656d5f057b34705e13254d5634ee7173c4ae 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.spec.ts +++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.spec.ts @@ -25,10 +25,10 @@ import { createStateResource, StateResource } from '@alfa-client/tech-shared'; import { mock, Mock } from '@alfa-client/test-utils'; import { TestBed } from '@angular/core/testing'; import { UntypedFormBuilder } from '@angular/forms'; +import { Postfach, PostfachResource } from 'libs/admin/postfach-shared/src/lib/postfach.model'; +import { PostfachService } from 'libs/admin/postfach-shared/src/lib/postfach.service'; +import { createPostfach, createPostfachResource } from 'libs/admin/postfach-shared/src/test/postfach'; import { of } from 'rxjs'; -import { createPostfach, createPostfachResource } from '../../../../../test/postfach/postfach'; -import { Postfach, PostfachResource } from '../../postfach.model'; -import { PostfachService } from '../../postfach.service'; import { PostfachFormService } from './postfach.formservice'; describe('PostfachFormService', () => { @@ -43,7 +43,6 @@ describe('PostfachFormService', () => { }); formService = TestBed.inject(PostfachFormService); - TestBed.inject(PostfachService); }); it('should create', () => { @@ -76,7 +75,7 @@ describe('PostfachFormService', () => { }); describe('with empty or null absender values', () => { - const formValueWithAbsender = { + const formValueWithAbsender: { [key: string]: any } = { [PostfachFormService.ASBSENDER_GROUP]: { [PostfachFormService.NAME_FIELD]: '', [PostfachFormService.ANSCHRIFT_FIELD]: null, diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.ts similarity index 95% rename from alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts rename to alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.ts index 4dcc60242eda6583638de80d1cfcf50f97c11b30..7ee0899b4a08d35c7f5099ed495fdb1d473db504 100644 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach.formservice.ts +++ b/alfa-client/libs/admin/postfach/src/lib/postfach-container/postfach-form/postfach.formservice.ts @@ -21,13 +21,12 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { Postfach, PostfachResource, PostfachService } from '@admin-client/postfach-shared'; import { AbstractFormService, EMPTY_STRING, StateResource } from '@alfa-client/tech-shared'; import { inject, Injectable } from '@angular/core'; import { FormControl, UntypedFormGroup } from '@angular/forms'; import { isNil } from 'lodash-es'; import { Observable } from 'rxjs'; -import { Postfach, PostfachResource } from '../../postfach.model'; -import { PostfachService } from '../../postfach.service'; @Injectable() export class PostfachFormService extends AbstractFormService { diff --git a/alfa-client/libs/admin/postfach/src/test-setup.ts b/alfa-client/libs/admin/postfach/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef358fbdf02a6bfc0ca9a7c2f5c73766b01ef584 --- /dev/null +++ b/alfa-client/libs/admin/postfach/src/test-setup.ts @@ -0,0 +1,7 @@ +globalThis.ngJest = { + testEnvironmentOptions: { + errorOnUnknownElements: true, + errorOnUnknownProperties: true, + }, +}; +import 'jest-preset-angular/setup-jest'; diff --git a/alfa-client/libs/admin/postfach/tsconfig.json b/alfa-client/libs/admin/postfach/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd --- /dev/null +++ b/alfa-client/libs/admin/postfach/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/admin/postfach/tsconfig.lib.json b/alfa-client/libs/admin/postfach/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a --- /dev/null +++ b/alfa-client/libs/admin/postfach/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/alfa-client/libs/admin/postfach/tsconfig.spec.json b/alfa-client/libs/admin/postfach/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b --- /dev/null +++ b/alfa-client/libs/admin/postfach/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] +} diff --git a/alfa-client/libs/admin/settings-shared/.eslintrc.json b/alfa-client/libs/admin/settings-shared/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50 --- /dev/null +++ b/alfa-client/libs/admin/settings-shared/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "admin", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "admin", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/admin/settings-shared/README.md b/alfa-client/libs/admin/settings-shared/README.md new file mode 100644 index 0000000000000000000000000000000000000000..f9766192c1c33458d8091f1171cc9ac47d136426 --- /dev/null +++ b/alfa-client/libs/admin/settings-shared/README.md @@ -0,0 +1,7 @@ +# settings + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test settings` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/alfa-client/libs/admin/settings-shared/jest.config.ts b/alfa-client/libs/admin/settings-shared/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..f30b0a4203afa2cf00c910d85c105b1baa541508 --- /dev/null +++ b/alfa-client/libs/admin/settings-shared/jest.config.ts @@ -0,0 +1,22 @@ +export default { + displayName: 'admin-settings', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + globals: {}, + coverageDirectory: '../../coverage/libs/admin/settings-shared', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: [`node_modules/(?!.*\\.mjs$)`], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/admin/settings/project.json b/alfa-client/libs/admin/settings-shared/project.json similarity index 69% rename from alfa-client/libs/admin/settings/project.json rename to alfa-client/libs/admin/settings-shared/project.json index 2749cb93e4ed471d107b091fece1a677debe2edc..702a27446f83db42dc97ec9409c8f3d323dcbb65 100644 --- a/alfa-client/libs/admin/settings/project.json +++ b/alfa-client/libs/admin/settings-shared/project.json @@ -1,7 +1,7 @@ { "name": "admin-settings", "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/admin/settings/src", + "sourceRoot": "libs/admin/settings-shared/src", "projectType": "library", "prefix": "admin", "tags": [], @@ -14,8 +14,8 @@ "executor": "@nx/jest:jest", "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { - "tsConfig": "libs/admin/settings/tsconfig.spec.json", - "jestConfig": "libs/admin/settings/jest.config.ts" + "tsConfig": "libs/admin/settings-shared/tsconfig.spec.json", + "jestConfig": "libs/admin/settings-shared/jest.config.ts" } } } diff --git a/alfa-client/libs/admin/settings-shared/src/index.ts b/alfa-client/libs/admin/settings-shared/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..5bf279d2ee74379b049743c71d0b77be847085c1 --- /dev/null +++ b/alfa-client/libs/admin/settings-shared/src/index.ts @@ -0,0 +1,2 @@ +export * from './lib/settings.model'; +export * from './lib/settings.service'; diff --git a/alfa-client/libs/admin/settings-shared/src/lib/settings-resource.service.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings-resource.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..a75f91afec901a8c969c00ede9a8631766421f1f --- /dev/null +++ b/alfa-client/libs/admin/settings-shared/src/lib/settings-resource.service.ts @@ -0,0 +1,19 @@ +import { ConfigurationLinkRel, ConfigurationResource, ConfigurationService } from '@admin-client/configuration-shared'; +import { ListResourceServiceConfig, ResourceListService, ResourceRepository } from '@alfa-client/tech-shared'; +import { Resource } from '@ngxp/rest'; +import { SettingListLinkRel } from './settings.linkrel'; +import { SettingItemResource, SettingListResource } from './settings.model'; + +export class SettingListResourceService extends ResourceListService<Resource, SettingListResource, SettingItemResource> {} + +export function createSettingListResourceService(repository: ResourceRepository, configurationService: ConfigurationService) { + return new ResourceListService(buildConfig(configurationService), repository); +} +function buildConfig(configurationService: ConfigurationService): ListResourceServiceConfig<ConfigurationResource> { + return { + baseResource: configurationService.get(), + createLinkRel: SettingListLinkRel.CREATE, + listLinkRel: ConfigurationLinkRel.SETTING, + listResourceListLinkRel: SettingListLinkRel.LIST, + }; +} diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.linkrel.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.linkrel.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/admin-settings.linkrel.ts rename to alfa-client/libs/admin/settings-shared/src/lib/settings.linkrel.ts diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.model.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.model.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/admin-settings.model.ts rename to alfa-client/libs/admin/settings-shared/src/lib/settings.model.ts diff --git a/alfa-client/libs/admin/settings-shared/src/lib/settings.providers.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.providers.ts new file mode 100644 index 0000000000000000000000000000000000000000..5a4c30541035d5349ebd494ded911eb24f4d9fb9 --- /dev/null +++ b/alfa-client/libs/admin/settings-shared/src/lib/settings.providers.ts @@ -0,0 +1,13 @@ +import { ConfigurationService } from '@admin-client/configuration-shared'; +import { SettingsService } from '@admin-client/settings-shared'; +import { ResourceRepository } from '@alfa-client/tech-shared'; +import { createSettingListResourceService, SettingListResourceService } from './settings-resource.service'; + +export const SettingsProviders = [ + SettingsService, + { + provide: SettingListResourceService, + useFactory: createSettingListResourceService, + deps: [ResourceRepository, ConfigurationService], + }, +]; diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.service.spec.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.service.spec.ts similarity index 72% rename from alfa-client/libs/admin/settings/src/lib/admin-settings.service.spec.ts rename to alfa-client/libs/admin/settings-shared/src/lib/settings.service.spec.ts index 0a206b56c318b9cdda41832ba6159c237a6cf4de..9b24d56767a9f5de93f738638d976333cfa93af7 100644 --- a/alfa-client/libs/admin/settings/src/lib/admin-settings.service.spec.ts +++ b/alfa-client/libs/admin/settings-shared/src/lib/settings.service.spec.ts @@ -21,20 +21,17 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - StateResource, - createEmptyStateResource, - createStateResource, -} from '@alfa-client/tech-shared'; -import { Mock, mock, useFromMock } from '@alfa-client/test-utils'; +import { PostfachResource } from '@admin-client/postfach-shared'; +import { StateResource, createEmptyStateResource, createStateResource } from '@alfa-client/tech-shared'; +import { Mock, mock } from '@alfa-client/test-utils'; +import { TestBed } from '@angular/core/testing'; import { singleCold } from 'libs/tech-shared/test/marbles'; import { Observable, of } from 'rxjs'; -import { createSettingsListResource } from '../../test/admin-settings'; -import { createPostfachResource, createSettingItemResource } from '../../test/postfach/postfach'; -import { SettingListResourceService } from './admin-settings-resource.service'; -import { SettingListResource } from './admin-settings.model'; -import { SettingsService } from './admin-settings.service'; -import { PostfachResource } from './postfach/postfach.model'; +import { createPostfachResource, createSettingItemResource } from '../../../postfach-shared/src/test/postfach'; +import { createSettingsListResource } from '../../test/settings'; +import { SettingListResourceService } from './settings-resource.service'; +import { SettingListResource } from './settings.model'; +import { SettingsService } from './settings.service'; describe('SettingsService', () => { let service: SettingsService; @@ -43,7 +40,11 @@ describe('SettingsService', () => { beforeEach(() => { settingListResourceService = mock(SettingListResourceService); - service = new SettingsService(useFromMock(settingListResourceService)); + TestBed.configureTestingModule({ + providers: [SettingsService, { provide: SettingListResourceService, useValue: settingListResourceService }], + }); + + service = TestBed.inject(SettingsService); }); it('should create', () => { @@ -52,8 +53,7 @@ describe('SettingsService', () => { describe('get Postfach', () => { const postfachResource = createPostfachResource(); - const postfachStateResource: StateResource<PostfachResource> = - createStateResource(postfachResource); + const postfachStateResource: StateResource<PostfachResource> = createStateResource(postfachResource); const settingsListResource: StateResource<SettingListResource> = createStateResource( createSettingsListResource([postfachResource]), ); @@ -73,18 +73,14 @@ describe('SettingsService', () => { createSettingsListResource([createSettingItemResource()]), ); - settingListResourceService.getList = jest - .fn() - .mockReturnValue(singleCold(emptySettingsListResource)); + settingListResourceService.getList = jest.fn().mockReturnValue(singleCold(emptySettingsListResource)); const postfach: Observable<StateResource<PostfachResource>> = service.getPostfach(); expect(postfach).toBeObservable(singleCold(createEmptyStateResource())); }); it('should return item resource as postfach resource', () => { - settingListResourceService.getList = jest - .fn() - .mockReturnValue(singleCold(settingsListResource)); + settingListResourceService.getList = jest.fn().mockReturnValue(singleCold(settingsListResource)); const postfach: Observable<StateResource<PostfachResource>> = service.getPostfach(); diff --git a/alfa-client/libs/admin/settings-shared/src/lib/settings.service.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..51faa2be7ea9aa2a9f878de233ad56d32ec0f81c --- /dev/null +++ b/alfa-client/libs/admin/settings-shared/src/lib/settings.service.ts @@ -0,0 +1,15 @@ +import { PostfachResource } from '@admin-client/postfach-shared'; +import { StateResource } from '@alfa-client/tech-shared'; +import { inject, Injectable } from '@angular/core'; +import { map, Observable } from 'rxjs'; +import { SettingListResourceService } from './settings-resource.service'; +import { getPostfachResource } from './settings.util'; + +@Injectable() +export class SettingsService { + private settingListResourceService = inject(SettingListResourceService); + + public getPostfach(): Observable<StateResource<PostfachResource>> { + return this.settingListResourceService.getList().pipe(map(getPostfachResource)); + } +} diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.util.spec.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.util.spec.ts similarity index 73% rename from alfa-client/libs/admin/settings/src/lib/admin-settings.util.spec.ts rename to alfa-client/libs/admin/settings-shared/src/lib/settings.util.spec.ts index 75256cb6394254d6d21c8409e3078a94b27aacb6..5b78df34aa506c8180878416054cd11bb4164d14 100644 --- a/alfa-client/libs/admin/settings/src/lib/admin-settings.util.spec.ts +++ b/alfa-client/libs/admin/settings-shared/src/lib/settings.util.spec.ts @@ -21,16 +21,12 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - createEmptyStateResource, - createStateResource, - StateResource, -} from '@alfa-client/tech-shared'; -import { createFilledSettingsListResource } from '../../test/admin-settings'; -import { createPostfachResource } from '../../test/postfach/postfach'; -import { SettingListResource } from './admin-settings.model'; -import { getPostfachResource } from './admin-settings.util'; -import { PostfachResource } from './postfach/postfach.model'; +import { PostfachResource } from '@admin-client/postfach-shared'; +import { SettingListResource } from '@admin-client/settings-shared'; +import { createEmptyStateResource, createStateResource, StateResource } from '@alfa-client/tech-shared'; +import { createPostfachResource } from 'libs/admin/postfach-shared/src/test/postfach'; +import { createFilledSettingsListResource } from '../../test/settings'; +import { getPostfachResource } from './settings.util'; describe('get postfach resource', () => { it('should return state resource with postfach resource if exists', () => { @@ -39,19 +35,15 @@ describe('get postfach resource', () => { createFilledSettingsListResource([postfachResource]), ); - const postfachStateResource: StateResource<PostfachResource> = - getPostfachResource(settingsListResource); + const postfachStateResource: StateResource<PostfachResource> = getPostfachResource(settingsListResource); expect(postfachStateResource.resource).toEqual(postfachResource); }); it('should return empty state resource if postfach resource NOT exists', () => { - const settingsListResource: StateResource<SettingListResource> = createStateResource( - createFilledSettingsListResource([]), - ); + const settingsListResource: StateResource<SettingListResource> = createStateResource(createFilledSettingsListResource([])); - const postfachStateResource: StateResource<PostfachResource> = - getPostfachResource(settingsListResource); + const postfachStateResource: StateResource<PostfachResource> = getPostfachResource(settingsListResource); expect(postfachStateResource).toEqual(createEmptyStateResource()); }); diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.util.ts b/alfa-client/libs/admin/settings-shared/src/lib/settings.util.ts similarity index 78% rename from alfa-client/libs/admin/settings/src/lib/admin-settings.util.ts rename to alfa-client/libs/admin/settings-shared/src/lib/settings.util.ts index bbc68af25e5d32e9210549c221dbaf1185ef1490..d5cf7605cada028e253a26d1e3641eee5856e2c7 100644 --- a/alfa-client/libs/admin/settings/src/lib/admin-settings.util.ts +++ b/alfa-client/libs/admin/settings-shared/src/lib/settings.util.ts @@ -21,6 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { PostfachResource } from '@admin-client/postfach-shared'; import { createEmptyStateResource, createStateResource, @@ -28,17 +29,11 @@ import { isNotNil, StateResource, } from '@alfa-client/tech-shared'; -import { SettingListLinkRel } from './admin-settings.linkrel'; -import { SettingItemResource, SettingListResource, SettingName } from './admin-settings.model'; -import { PostfachResource } from './postfach/postfach.model'; +import { SettingListLinkRel } from './settings.linkrel'; +import { SettingItemResource, SettingListResource, SettingName } from './settings.model'; -export function getPostfachResource( - settingsListResource: StateResource<SettingListResource>, -): StateResource<PostfachResource> { - const entries: SettingItemResource[] = getEmbeddedResources( - settingsListResource, - SettingListLinkRel.LIST, - ); +export function getPostfachResource(settingsListResource: StateResource<SettingListResource>): StateResource<PostfachResource> { + const entries: SettingItemResource[] = getEmbeddedResources(settingsListResource, SettingListLinkRel.LIST); const postfachSettingItemResource: SettingItemResource = entries.find(isPostfachSettingItem); return isNotNil(postfachSettingItemResource) ? createStateResource(postfachSettingItemResource as PostfachResource) diff --git a/alfa-client/libs/admin/settings/src/test-setup.ts b/alfa-client/libs/admin/settings-shared/src/test-setup.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/test-setup.ts rename to alfa-client/libs/admin/settings-shared/src/test-setup.ts diff --git a/alfa-client/libs/admin/settings-shared/test/settings.ts b/alfa-client/libs/admin/settings-shared/test/settings.ts new file mode 100644 index 0000000000000000000000000000000000000000..c3b9478ea57d373b18ad6315c0e5161fd7d9b008 --- /dev/null +++ b/alfa-client/libs/admin/settings-shared/test/settings.ts @@ -0,0 +1,16 @@ +import { Resource } from '@ngxp/rest'; +import { toResource } from 'libs/tech-shared/test/resource'; +import { SettingListLinkRel } from '../src/lib/settings.linkrel'; +import { SettingItemResource, SettingListResource } from '../src/lib/settings.model'; + +export function createSettingsListResource(settingsItems: SettingItemResource[]): SettingListResource { + return toResource({}, [], { + settings: settingsItems, + }); +} + +export function createFilledSettingsListResource(resources: Resource[], linkRelations: string[] = []): SettingListResource { + return toResource({}, [...linkRelations], { + [SettingListLinkRel.LIST]: resources, + }); +} diff --git a/alfa-client/libs/admin/settings-shared/tsconfig.json b/alfa-client/libs/admin/settings-shared/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd --- /dev/null +++ b/alfa-client/libs/admin/settings-shared/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/admin/settings-shared/tsconfig.lib.json b/alfa-client/libs/admin/settings-shared/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a --- /dev/null +++ b/alfa-client/libs/admin/settings-shared/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/alfa-client/libs/admin/settings-shared/tsconfig.spec.json b/alfa-client/libs/admin/settings-shared/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b --- /dev/null +++ b/alfa-client/libs/admin/settings-shared/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] +} diff --git a/alfa-client/libs/admin/settings/.eslintrc.json b/alfa-client/libs/admin/settings/.eslintrc.json deleted file mode 100644 index 3230caf3d2f01580c97f01513e96c9c4727c91c9..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/.eslintrc.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.json"], - "parser": "jsonc-eslint-parser", - "rules": { - "@nx/dependency-checks": "error" - } - } - ] -} diff --git a/alfa-client/libs/admin/settings/README.md b/alfa-client/libs/admin/settings/README.md deleted file mode 100644 index 01b723f8400c9c3dd0f79fe697c5b1be2441a3eb..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# admin-settings - -This library was generated with [Nx](https://nx.dev). - -## Running unit tests - -Run `nx test admin-settings` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/alfa-client/libs/admin/settings/src/index.ts b/alfa-client/libs/admin/settings/src/index.ts deleted file mode 100644 index d835694e676c145a401c27a3f8c4f624ee43ea67..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -export * from './lib/admin-settings.module'; -export * from './lib/organisationseinheit/organisations-einheit.model'; -export * from './lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component'; -export * from './lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component'; -export * from './lib/postfach/postfach-container/postfach-container.component'; -export * from './lib/users-roles/user-add-form/user-add-form.component'; -export * from './lib/users-roles/users-roles.component'; diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings-resource.service.ts b/alfa-client/libs/admin/settings/src/lib/admin-settings-resource.service.ts deleted file mode 100644 index 932dcb34f0a460a6684207f0773884cb51b80341..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/admin-settings-resource.service.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { - ListResourceServiceConfig, - ResourceListService, - ResourceRepository, -} from '@alfa-client/tech-shared'; -import { Resource } from '@ngxp/rest'; -import { SettingListLinkRel } from './admin-settings.linkrel'; -import { SettingItemResource, SettingListResource } from './admin-settings.model'; -import { ConfigurationLinkRel } from './configuration/configuration.linkrel'; -import { ConfigurationResource } from './configuration/configuration.model'; -import { ConfigurationService } from './configuration/configuration.service'; - -export class SettingListResourceService extends ResourceListService< - Resource, - SettingListResource, - SettingItemResource -> {} - -export function createSettingListResourceService( - repository: ResourceRepository, - configurationService: ConfigurationService, -) { - return new ResourceListService(buildConfig(configurationService), repository); -} -function buildConfig( - configurationService: ConfigurationService, -): ListResourceServiceConfig<ConfigurationResource> { - return { - baseResource: configurationService.get(), - createLinkRel: SettingListLinkRel.CREATE, - listLinkRel: ConfigurationLinkRel.SETTING, - listResourceListLinkRel: SettingListLinkRel.LIST, - }; -} diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.spec.ts b/alfa-client/libs/admin/settings/src/lib/admin-settings.module.spec.ts deleted file mode 100644 index bebce1e10c22d2a4e582cfee24dcc99849783a8e..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { TestBed } from '@angular/core/testing'; -import { AdminSettingsModule } from './admin-settings.module'; - -describe('AdminSettingsModule', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [AdminSettingsModule], - }); - }); - - it('should create', () => { - expect(AdminSettingsModule).toBeDefined(); - }); -}); diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts b/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts deleted file mode 100644 index 6e3e350a875223b032c4144f0b13d997b5d16f66..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/admin-settings.module.ts +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { ApiRootService } from '@alfa-client/api-root-shared'; -import { Environment, ENVIRONMENT_CONFIG } from '@alfa-client/environment-shared'; -import { NavigationSharedModule } from '@alfa-client/navigation-shared'; -import { ResourceRepository, TechSharedModule } from '@alfa-client/tech-shared'; -import { UiModule } from '@alfa-client/ui'; -import { CommonModule } from '@angular/common'; -import { NgModule } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; -import { RouterModule } from '@angular/router'; -import KcAdminClient from '@keycloak/keycloak-admin-client'; -import { - ButtonWithSpinnerComponent, - CheckboxEditorComponent, - TextareaEditorComponent, - TextEditorComponent, -} from '@ods/component'; -import { - ExclamationIconComponent, - ListComponent, - ListItemComponent, - MailboxIconComponent, - PersonIconComponent, - TextInputComponent, -} from '@ods/system'; -import { createSettingListResourceService, SettingListResourceService } from './admin-settings-resource.service'; -import { SettingsService } from './admin-settings.service'; -import { ConfigurationResourceService, createConfigurationResourceService } from './configuration/configuration-resource.service'; -import { ConfigurationService } from './configuration/configuration.service'; -import { - createOrganisationsEinheitListResourceService, - OrganisationsEinheitListResourceService, -} from './organisationseinheit/organisations-einheit-list-resource.service'; -import { - createOrganisationsEinheitResourceService, - OrganisationsEinheitResourceService, -} from './organisationseinheit/organisations-einheit-resource.service'; -import { OrganisationsEinheitContainerComponent } from './organisationseinheit/organisationseinheit-container/organisationseinheit-container.component'; -import { OrganisationsEinheitListComponent } from './organisationseinheit/organisationseinheit-container/organisationseinheit-list/organisationseinheit-list.component'; -import { OrganisationsEinheitFormContainerComponent } from './organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component'; -import { OrganisationsEinheitFormComponent } from './organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-form.component'; -import { OrganisationsEinheitSignaturComponent } from './organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component'; -import { PostfachContainerComponent } from './postfach/postfach-container/postfach-container.component'; -import { PostfachFormComponent } from './postfach/postfach-container/postfach-form/postfach-form.component'; -import { PostfachSignaturComponent } from './postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component'; -import { createPostfachResourceService, PostfachResourceService } from './postfach/postfach-resource.service'; -import { PostfachService } from './postfach/postfach.service'; -import { ToUserNamePipe } from './user/to-user-name.pipe'; -import { UserAddFormComponent } from './users-roles/user-add-form/user-add-form.component'; -import { UsersRolesComponent } from './users-roles/users-roles.component'; - -@NgModule({ - declarations: [ - PostfachContainerComponent, - PostfachFormComponent, - PostfachSignaturComponent, - OrganisationsEinheitContainerComponent, - OrganisationsEinheitListComponent, - OrganisationsEinheitFormContainerComponent, - OrganisationsEinheitFormComponent, - OrganisationsEinheitSignaturComponent, - UsersRolesComponent, - UserAddFormComponent, - ], - imports: [ - CommonModule, - TechSharedModule, - RouterModule, - ReactiveFormsModule, - TextInputComponent, - CheckboxEditorComponent, - ButtonWithSpinnerComponent, - TextareaEditorComponent, - MailboxIconComponent, - PersonIconComponent, - ToUserNamePipe, - ListComponent, - ListItemComponent, - ExclamationIconComponent, - UiModule, - NavigationSharedModule, - TextEditorComponent, - ], - exports: [ - PostfachContainerComponent, - OrganisationsEinheitContainerComponent, - OrganisationsEinheitFormContainerComponent, - UsersRolesComponent, - UserAddFormComponent, - ], - providers: [ - ConfigurationService, - SettingsService, - PostfachService, - { - provide: KcAdminClient, - useFactory: (env: Environment) => - new KcAdminClient({ - baseUrl: env.authServer, - realmName: env.realm, - }), - deps: [ENVIRONMENT_CONFIG], - }, - { - provide: PostfachResourceService, - useFactory: createPostfachResourceService, - deps: [ResourceRepository, SettingsService], - }, - { - provide: ConfigurationResourceService, - useFactory: createConfigurationResourceService, - deps: [ResourceRepository, ApiRootService], - }, - { - provide: SettingListResourceService, - useFactory: createSettingListResourceService, - deps: [ResourceRepository, ConfigurationService], - }, - { - provide: OrganisationsEinheitListResourceService, - useFactory: createOrganisationsEinheitListResourceService, - deps: [ResourceRepository, ApiRootService], - }, - { - provide: OrganisationsEinheitResourceService, - useFactory: createOrganisationsEinheitResourceService, - deps: [ResourceRepository, OrganisationsEinheitListResourceService], - }, - ], -}) -export class AdminSettingsModule {} diff --git a/alfa-client/libs/admin/settings/src/lib/admin-settings.service.ts b/alfa-client/libs/admin/settings/src/lib/admin-settings.service.ts deleted file mode 100644 index 172e8dd2dc5db11684dda94054b833618675f871..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/admin-settings.service.ts +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { StateResource } from '@alfa-client/tech-shared'; -import { Injectable } from '@angular/core'; -import { Observable, map } from 'rxjs'; -import { SettingListResourceService } from './admin-settings-resource.service'; -import { getPostfachResource } from './admin-settings.util'; -import { PostfachResource } from './postfach/postfach.model'; - -@Injectable() -export class SettingsService { - constructor(private settingListResourceService: SettingListResourceService) {} - - public getPostfach(): Observable<StateResource<PostfachResource>> { - return this.settingListResourceService.getList().pipe(map(getPostfachResource)); - } -} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.ts deleted file mode 100644 index 1451d9f18fbb60184c5330493859612c7d16060b..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-container/organisationseinheit-container.component.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { StateResource } from '@alfa-client/tech-shared'; -import { Component, OnInit } from '@angular/core'; -import { Observable } from 'rxjs'; -import { OrganisationsEinheitListLinkRel } from '../organisations-einheit.linkrel'; -import { AdminOrganisationsEinheitListResource } from '../organisations-einheit.model'; -import { OrganisationsEinheitService } from '../organisationseinheit.service'; - -@Component({ - selector: 'admin-organisationseinheit-container', - templateUrl: './organisationseinheit-container.component.html', -}) -export class OrganisationsEinheitContainerComponent implements OnInit { - organisationsEinheitListStateResource$: Observable<StateResource<AdminOrganisationsEinheitListResource>>; - - public readonly OrganisationsEinheitListLinkRel = OrganisationsEinheitListLinkRel; - - constructor(private organisationsEinheitService: OrganisationsEinheitService) {} - - ngOnInit(): void { - this.organisationsEinheitListStateResource$ = this.organisationsEinheitService.getList(); - } -} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.ts deleted file mode 100644 index dd503745968b49d01c2caea97f5ee09101208526..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form-container.component.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { StateResource } from '@alfa-client/tech-shared'; -import { Component, OnInit } from '@angular/core'; -import { Observable } from 'rxjs'; -import { OrganisationsEinheitListLinkRel } from '../organisations-einheit.linkrel'; -import { AdminOrganisationsEinheitResource } from '../organisations-einheit.model'; -import { OrganisationsEinheitService } from '../organisationseinheit.service'; - -@Component({ - selector: 'admin-organisationseinheit-form-container', - templateUrl: './organisationseinheit-form-container.component.html', -}) -export class OrganisationsEinheitFormContainerComponent implements OnInit { - organisationsEinheitStateResource$: Observable<StateResource<AdminOrganisationsEinheitResource>>; - - constructor(private organisationsEinheitService: OrganisationsEinheitService) {} - - ngOnInit(): void { - this.organisationsEinheitStateResource$ = this.organisationsEinheitService.get(); - } - - protected readonly OrganisationsEinheitListLinkRel = OrganisationsEinheitListLinkRel; -} diff --git a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.ts b/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.ts deleted file mode 100644 index b0a57e409b9f27665081db6ce18ada59dd310ef8..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/organisationseinheit/organisationseinheit-form-container/organisationseinheit-form/organisationseinheit-signatur/organisationseinheit-signatur.component.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { Component } from '@angular/core'; -import { OrganisationsEinheitFormService } from '../organisationseinheit.formservice'; - -@Component({ - selector: 'admin-organisationseinheit-signatur', - templateUrl: './organisationseinheit-signatur.component.html', -}) -export class OrganisationsEinheitSignaturComponent { - public readonly formServiceClass = OrganisationsEinheitFormService; - - constructor(public formService: OrganisationsEinheitFormService) {} -} diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.html b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.html deleted file mode 100644 index 89ab00abf08981885d8c01535a369a8d4d8aea5a..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-container.component.html +++ /dev/null @@ -1,27 +0,0 @@ -<!-- - - Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - Ministerpräsidenten des Landes Schleswig-Holstein - Staatskanzlei - Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - - Lizenziert unter der EUPL, Version 1.2 oder - sobald - diese von der Europäischen Kommission genehmigt wurden - - Folgeversionen der EUPL ("Lizenz"); - Sie dürfen dieses Werk ausschließlich gemäß - dieser Lizenz nutzen. - Eine Kopie der Lizenz finden Sie hier: - - https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - - Sofern nicht durch anwendbare Rechtsvorschriften - gefordert oder in schriftlicher Form vereinbart, wird - die unter der Lizenz verbreitete Software "so wie sie - ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - ausdrücklich oder stillschweigend - verbreitet. - Die sprachspezifischen Genehmigungen und Beschränkungen - unter der Lizenz sind dem Lizenztext zu entnehmen. - ---> -<h1 class="heading-1">Postfach</h1> -<postfach-form [postfachStateResource]="postfachStateResource$ | async"></postfach-form> diff --git a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts b/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts deleted file mode 100644 index f37ac2cea38a25d5e7080efff806c72bbd20ace4..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/src/lib/postfach/postfach-container/postfach-form/postfach-signatur/postfach-signatur.component.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { Component } from '@angular/core'; -import { PostfachFormService } from '../postfach.formservice'; - -@Component({ - selector: 'postfach-signatur', - templateUrl: './postfach-signatur.component.html', -}) -export class PostfachSignaturComponent { - protected readonly formServiceClass = PostfachFormService; - - constructor(public formService: PostfachFormService) {} -} diff --git a/alfa-client/libs/admin/settings/test/admin-settings.ts b/alfa-client/libs/admin/settings/test/admin-settings.ts deleted file mode 100644 index c4848d7766709af8620b976b7a66d08d5780e802..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/test/admin-settings.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { Resource } from '@ngxp/rest'; -import { toResource } from '../../../tech-shared/test/resource'; -import { SettingListLinkRel } from '../src/lib/admin-settings.linkrel'; -import { SettingItemResource, SettingListResource } from '../src/lib/admin-settings.model'; - -export function createSettingsListResource( - settingsItems: SettingItemResource[], -): SettingListResource { - return toResource({}, [], { - settings: settingsItems, - }); -} - -export function createFilledSettingsListResource( - resources: Resource[], - linkRelations: string[] = [], -): SettingListResource { - return toResource({}, [...linkRelations], { - [SettingListLinkRel.LIST]: resources, - }); -} diff --git a/alfa-client/libs/admin/settings/test/configuration/configuration.ts b/alfa-client/libs/admin/settings/test/configuration/configuration.ts deleted file mode 100644 index a9f71c8303fe9872c4bec2b8113032183fcb8643..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/settings/test/configuration/configuration.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -import { toResource } from 'libs/tech-shared/test/resource'; -import { ConfigurationLinkRel } from '../../src/lib/configuration/configuration.linkrel'; -import { ConfigurationResource } from '../../src/lib/configuration/configuration.model'; - -export function createConfigurationResource(): ConfigurationResource { - return toResource({}, [ConfigurationLinkRel.SETTING]); -} diff --git a/alfa-client/libs/admin/shared/.eslintrc.json b/alfa-client/libs/admin/shared/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50 --- /dev/null +++ b/alfa-client/libs/admin/shared/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "admin", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "admin", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/admin/shared/README.md b/alfa-client/libs/admin/shared/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0c35b5b818bea8bf169771020693b753b5c10b47 --- /dev/null +++ b/alfa-client/libs/admin/shared/README.md @@ -0,0 +1,7 @@ +# shared + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test shared` to execute the unit tests. diff --git a/alfa-client/libs/admin/shared/index.ts b/alfa-client/libs/admin/shared/index.ts deleted file mode 100644 index 00a632ea7e5e7e455b302363e5436df0d18f814d..0000000000000000000000000000000000000000 --- a/alfa-client/libs/admin/shared/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -export * from './libs/routes'; diff --git a/alfa-client/libs/admin/shared/jest.config.ts b/alfa-client/libs/admin/shared/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..c04b4d29749677eb4cd5e418a57722d9f659b0ee --- /dev/null +++ b/alfa-client/libs/admin/shared/jest.config.ts @@ -0,0 +1,21 @@ +export default { + displayName: 'shared', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + coverageDirectory: '../../../coverage/libs/admin/shared', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/admin/shared/project.json b/alfa-client/libs/admin/shared/project.json new file mode 100644 index 0000000000000000000000000000000000000000..a2e9e40a7ec2e50df4bf02831f559aced291d240 --- /dev/null +++ b/alfa-client/libs/admin/shared/project.json @@ -0,0 +1,22 @@ +{ + "name": "admin-shared", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/admin/shared/src", + "projectType": "library", + "prefix": "admin", + "tags": [], + "targets": { + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "tsConfig": "libs/admin/shared/tsconfig.spec.json", + "jestConfig": "libs/admin/shared/jest.config.ts" + } + } + } +} diff --git a/alfa-client/libs/admin/shared/src/index.ts b/alfa-client/libs/admin/shared/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..ece2c025dc3e05d4b26ad131fc7e419331e301d2 --- /dev/null +++ b/alfa-client/libs/admin/shared/src/index.ts @@ -0,0 +1 @@ +export * from './lib/routes'; diff --git a/alfa-client/libs/admin/shared/libs/routes.ts b/alfa-client/libs/admin/shared/src/lib/routes.ts similarity index 100% rename from alfa-client/libs/admin/shared/libs/routes.ts rename to alfa-client/libs/admin/shared/src/lib/routes.ts diff --git a/alfa-client/libs/admin/shared/src/test-setup.ts b/alfa-client/libs/admin/shared/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe --- /dev/null +++ b/alfa-client/libs/admin/shared/src/test-setup.ts @@ -0,0 +1,12 @@ +import '@testing-library/jest-dom'; +import 'jest-preset-angular/setup-jest'; + +import { getTestBed } from '@angular/core/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; + +getTestBed().resetTestEnvironment(); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true, +}); diff --git a/alfa-client/libs/admin/shared/tsconfig.json b/alfa-client/libs/admin/shared/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd --- /dev/null +++ b/alfa-client/libs/admin/shared/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/admin/shared/tsconfig.lib.json b/alfa-client/libs/admin/shared/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a --- /dev/null +++ b/alfa-client/libs/admin/shared/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/alfa-client/libs/admin/shared/tsconfig.spec.json b/alfa-client/libs/admin/shared/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..a7c5b716b91f2c6ee74b31ea622a8535816217ba --- /dev/null +++ b/alfa-client/libs/admin/shared/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"] +} diff --git a/alfa-client/libs/admin/user-shared/.eslintrc.json b/alfa-client/libs/admin/user-shared/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..7474579d583c598ae092a906b3e6cf1ad3c08a50 --- /dev/null +++ b/alfa-client/libs/admin/user-shared/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "admin", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "admin", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} diff --git a/alfa-client/libs/admin/user-shared/README.md b/alfa-client/libs/admin/user-shared/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b62dcee762ac67cefa958923ca0d121999ae5639 --- /dev/null +++ b/alfa-client/libs/admin/user-shared/README.md @@ -0,0 +1,7 @@ +# admin-user-shared + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test admin-user-shared` to execute the unit tests. diff --git a/alfa-client/libs/admin/settings/jest.config.ts b/alfa-client/libs/admin/user-shared/jest.config.ts similarity index 94% rename from alfa-client/libs/admin/settings/jest.config.ts rename to alfa-client/libs/admin/user-shared/jest.config.ts index 622fe206065359af51d061b0dcac562e5501a5cd..7ad606d0054b4ec341f70407c99031f4e122cee1 100644 --- a/alfa-client/libs/admin/settings/jest.config.ts +++ b/alfa-client/libs/admin/user-shared/jest.config.ts @@ -25,11 +25,10 @@ const esModules = ['@keycloak/keycloak-admin-client', 'url-join', 'url-template', 'camelize-ts']; export default { - displayName: 'admin-settings', + displayName: 'admin-user-shared', preset: '../../../jest.preset.js', setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], - globals: {}, - coverageDirectory: '../../coverage/libs/admin/settings', + coverageDirectory: '../../../coverage/libs/admin/user-shared', transform: { '^.+\\.(ts|mjs|js|html)$': [ 'jest-preset-angular', diff --git a/alfa-client/libs/admin/user-shared/project.json b/alfa-client/libs/admin/user-shared/project.json new file mode 100644 index 0000000000000000000000000000000000000000..65579267d387b598affcb6d94c05ab6adc496cd6 --- /dev/null +++ b/alfa-client/libs/admin/user-shared/project.json @@ -0,0 +1,22 @@ +{ + "name": "admin-user-shared", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/admin/user-shared/src", + "prefix": "admin", + "projectType": "library", + "tags": [], + "targets": { + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "libs/admin/user-shared/jest.config.ts", + "tsConfig": "libs/admin/user-shared/tsconfig.spec.json" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + } + } +} diff --git a/alfa-client/libs/admin/user-shared/src/index.ts b/alfa-client/libs/admin/user-shared/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..68d4aaf50b5a1c67e1863d432b5abf2d9d8f1bbb --- /dev/null +++ b/alfa-client/libs/admin/user-shared/src/index.ts @@ -0,0 +1,3 @@ +export * from './lib/to-user-name.pipe'; +export * from './lib/user.model'; +export * from './lib/user.service'; diff --git a/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.spec.ts b/alfa-client/libs/admin/user-shared/src/lib/keycloak.resource.service.spec.ts similarity index 96% rename from alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.spec.ts rename to alfa-client/libs/admin/user-shared/src/lib/keycloak.resource.service.spec.ts index 8dac4c1c0cee314cba8403dfe03cc326c2e31607..228f1b0cfaec928f6c70ec566b92d5ae3250eb25 100644 --- a/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.spec.ts +++ b/alfa-client/libs/admin/user-shared/src/lib/keycloak.resource.service.spec.ts @@ -21,14 +21,14 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { fakeAsync, tick } from '@angular/core/testing'; +import { TestBed, fakeAsync, tick } from '@angular/core/testing'; import { faker } from '@faker-js/faker'; import { cold } from 'jest-marbles'; +import * as resourceUtil from 'libs/tech-shared/src/lib/resource/resource.util'; import { StateResource, createEmptyStateResource } from 'libs/tech-shared/src/lib/resource/resource.util'; import { Dummy, createDummy } from 'libs/tech-shared/test/dummy'; import { singleCold } from 'libs/tech-shared/test/marbles'; import { Observable, of } from 'rxjs'; -import * as resourceUtil from '../../../../../tech-shared/src/lib/resource/resource.util'; import { KeycloakResourceService } from './keycloak.resource.service'; describe('KeycloakResourceService', () => { @@ -40,7 +40,11 @@ describe('KeycloakResourceService', () => { const dummyAction: Observable<Dummy> = of(dummyObject); beforeEach(() => { - service = new TestResourceService(); + TestBed.configureTestingModule({ + providers: [TestResourceService], + }); + + service = TestBed.inject(TestResourceService); }); describe('get', () => { diff --git a/alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.ts b/alfa-client/libs/admin/user-shared/src/lib/keycloak.resource.service.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/user/keycloak.resource.service.ts rename to alfa-client/libs/admin/user-shared/src/lib/keycloak.resource.service.ts diff --git a/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.spec.ts b/alfa-client/libs/admin/user-shared/src/lib/to-user-name.pipe.spec.ts similarity index 96% rename from alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.spec.ts rename to alfa-client/libs/admin/user-shared/src/lib/to-user-name.pipe.spec.ts index 799b337e15b3b6f0fcc19ded6591997786770d4d..6b7a91ae4d511cfb4d41cd29aaab6cf23a212d87 100644 --- a/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.spec.ts +++ b/alfa-client/libs/admin/user-shared/src/lib/to-user-name.pipe.spec.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { createUser } from '../../../test/user/user'; +import { createUser } from '../../test/user'; import { ToUserNamePipe } from './to-user-name.pipe'; import { User } from './user.model'; diff --git a/alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.ts b/alfa-client/libs/admin/user-shared/src/lib/to-user-name.pipe.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/user/to-user-name.pipe.ts rename to alfa-client/libs/admin/user-shared/src/lib/to-user-name.pipe.ts diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.model.ts b/alfa-client/libs/admin/user-shared/src/lib/user.model.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/user/user.model.ts rename to alfa-client/libs/admin/user-shared/src/lib/user.model.ts diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.repository.service.ts b/alfa-client/libs/admin/user-shared/src/lib/user.repository.service.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/user/user.repository.service.ts rename to alfa-client/libs/admin/user-shared/src/lib/user.repository.service.ts diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.repository.spec.ts b/alfa-client/libs/admin/user-shared/src/lib/user.repository.spec.ts similarity index 98% rename from alfa-client/libs/admin/settings/src/lib/user/user.repository.spec.ts rename to alfa-client/libs/admin/user-shared/src/lib/user.repository.spec.ts index 2638d39c766f70824339223eca9b63a9e637203d..35173f88cd008f41212d12306dcf3ac1f834a27d 100644 --- a/alfa-client/libs/admin/settings/src/lib/user/user.repository.spec.ts +++ b/alfa-client/libs/admin/user-shared/src/lib/user.repository.spec.ts @@ -29,7 +29,7 @@ import { TokenProvider } from '@keycloak/keycloak-admin-client/lib/client'; import GroupRepresentation from '@keycloak/keycloak-admin-client/lib/defs/groupRepresentation'; import MappingsRepresentation from '@keycloak/keycloak-admin-client/lib/defs/mappingsRepresentation'; import { OAuthService } from 'angular-oauth2-oidc'; -import { createUser } from '../../../test/user/user'; +import { createUser } from '../../test/user'; import { User } from './user.model'; import { UserRepository } from './user.repository.service'; diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.spec.ts b/alfa-client/libs/admin/user-shared/src/lib/user.service.spec.ts similarity index 90% rename from alfa-client/libs/admin/settings/src/lib/users-roles/user.service.spec.ts rename to alfa-client/libs/admin/user-shared/src/lib/user.service.spec.ts index 07159381722197aa92c4d32b8fc815685d16ae43..f0067611db8651f2b00ecdd8faec239f37807086 100644 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.spec.ts +++ b/alfa-client/libs/admin/user-shared/src/lib/user.service.spec.ts @@ -24,11 +24,11 @@ import { mock, Mock, useFromMock } from '@alfa-client/test-utils'; import { fakeAsync, tick } from '@angular/core/testing'; import { of } from 'rxjs'; -import { createUser } from '../../../test/user/user'; -import { User } from '../user/user.model'; -import { UserRepository } from '../user/user.repository.service'; -import * as UserUtil from '../user/user.util'; +import { createUser } from '../../test/user'; +import { User } from './user.model'; +import { UserRepository } from './user.repository.service'; import { UserService } from './user.service'; +import * as UserUtil from './user.util'; describe('UserService', () => { let service: UserService; diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.ts b/alfa-client/libs/admin/user-shared/src/lib/user.service.ts similarity index 87% rename from alfa-client/libs/admin/settings/src/lib/users-roles/user.service.ts rename to alfa-client/libs/admin/user-shared/src/lib/user.service.ts index b09c42bf1e685eac5ed912a4a18a822eff4941dc..8b4b5dbfba75332786ad7bf395b972f54a9c3af0 100644 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/user.service.ts +++ b/alfa-client/libs/admin/user-shared/src/lib/user.service.ts @@ -23,10 +23,10 @@ */ import { Injectable } from '@angular/core'; import { map, Observable } from 'rxjs'; -import { KeycloakResourceService } from '../user/keycloak.resource.service'; -import { User } from '../user/user.model'; -import { UserRepository } from '../user/user.repository.service'; -import { sortUsersByLastName } from '../user/user.util'; +import { KeycloakResourceService } from './keycloak.resource.service'; +import { User } from './user.model'; +import { UserRepository } from './user.repository.service'; +import { sortUsersByLastName } from './user.util'; @Injectable({ providedIn: 'root', diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.util.spec.ts b/alfa-client/libs/admin/user-shared/src/lib/user.util.spec.ts similarity index 96% rename from alfa-client/libs/admin/settings/src/lib/user/user.util.spec.ts rename to alfa-client/libs/admin/user-shared/src/lib/user.util.spec.ts index f53eb0ef92781e87e8dacd25a6fd11f2adc102b7..78afbd546e6bd7f5113452e5611f7c305e1fa228 100644 --- a/alfa-client/libs/admin/settings/src/lib/user/user.util.spec.ts +++ b/alfa-client/libs/admin/user-shared/src/lib/user.util.spec.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { createUser } from '../../../test/user/user'; +import { createUser } from '../../test/user'; import { User } from './user.model'; import { sortUsersByLastName } from './user.util'; diff --git a/alfa-client/libs/admin/settings/src/lib/user/user.util.ts b/alfa-client/libs/admin/user-shared/src/lib/user.util.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/user/user.util.ts rename to alfa-client/libs/admin/user-shared/src/lib/user.util.ts diff --git a/alfa-client/libs/admin/user-shared/src/test-setup.ts b/alfa-client/libs/admin/user-shared/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe --- /dev/null +++ b/alfa-client/libs/admin/user-shared/src/test-setup.ts @@ -0,0 +1,12 @@ +import '@testing-library/jest-dom'; +import 'jest-preset-angular/setup-jest'; + +import { getTestBed } from '@angular/core/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; + +getTestBed().resetTestEnvironment(); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true, +}); diff --git a/alfa-client/libs/admin/settings/test/user/user.ts b/alfa-client/libs/admin/user-shared/test/user.ts similarity index 95% rename from alfa-client/libs/admin/settings/test/user/user.ts rename to alfa-client/libs/admin/user-shared/test/user.ts index 9537f1a6477cb54ea8e1358d4388ca19bad098d0..511f24510c38a12b07cd73b74a4a4a895df023c7 100644 --- a/alfa-client/libs/admin/settings/test/user/user.ts +++ b/alfa-client/libs/admin/user-shared/test/user.ts @@ -22,7 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { faker } from '@faker-js/faker'; -import { User } from '../../src/lib/user/user.model'; +import { User } from '../src/lib/user.model'; export function createUser(): User { return { diff --git a/alfa-client/libs/admin/user-shared/tsconfig.json b/alfa-client/libs/admin/user-shared/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd --- /dev/null +++ b/alfa-client/libs/admin/user-shared/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/admin/user-shared/tsconfig.lib.json b/alfa-client/libs/admin/user-shared/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..8441346f6e5858b2ef4235cb3c3160eda256f94a --- /dev/null +++ b/alfa-client/libs/admin/user-shared/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/alfa-client/libs/admin/user-shared/tsconfig.spec.json b/alfa-client/libs/admin/user-shared/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..723782fbd367969806c5992aea882773ab65af8b --- /dev/null +++ b/alfa-client/libs/admin/user-shared/tsconfig.spec.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"], + "target": "ES2022", + "useDefineForClassFields": false + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts", "jest.config.ts"] +} diff --git a/alfa-client/libs/admin/user/.eslintrc.json b/alfa-client/libs/admin/user/.eslintrc.json new file mode 100644 index 0000000000000000000000000000000000000000..fde86a84ddbd26aad5cede7be4ad4a3890fd76b3 --- /dev/null +++ b/alfa-client/libs/admin/user/.eslintrc.json @@ -0,0 +1,34 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "admin", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "admin", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nx/angular-template"], + "rules": {} + } + ] +} + diff --git a/alfa-client/libs/admin/user/README.md b/alfa-client/libs/admin/user/README.md new file mode 100644 index 0000000000000000000000000000000000000000..17504529dbe6f966697e245b6a53ddcb597b1bda --- /dev/null +++ b/alfa-client/libs/admin/user/README.md @@ -0,0 +1,7 @@ +# user + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test user` to execute the unit tests. diff --git a/alfa-client/libs/admin/user/jest.config.ts b/alfa-client/libs/admin/user/jest.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3d44acd574b48b05ac2acd515e2ceef998650c6 --- /dev/null +++ b/alfa-client/libs/admin/user/jest.config.ts @@ -0,0 +1,22 @@ +const esModules = ['@keycloak/keycloak-admin-client', 'url-join', 'url-template', 'camelize-ts']; +export default { + displayName: 'admin-user', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'], + coverageDirectory: '../../../coverage/libs/admin/user', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '<rootDir>/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + ], + }, + transformIgnorePatterns: [`node_modules/(?!.*\\.mjs$|${esModules.join('|')})`], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/alfa-client/libs/admin/user/project.json b/alfa-client/libs/admin/user/project.json new file mode 100644 index 0000000000000000000000000000000000000000..000d7263a98e42b5843d72c76ab95389ed836e06 --- /dev/null +++ b/alfa-client/libs/admin/user/project.json @@ -0,0 +1,22 @@ +{ + "name": "admin-user", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/admin/user/src", + "prefix": "admin", + "projectType": "library", + "tags": [], + "targets": { + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "tsConfig": "libs/admin/user/tsconfig.spec.json", + "jestConfig": "libs/admin/user/jest.config.ts" + } + } + } +} diff --git a/alfa-client/libs/admin/user/src/index.ts b/alfa-client/libs/admin/user/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..756b163e45acdd8eeb7dca2b01d792cdfadadd2c --- /dev/null +++ b/alfa-client/libs/admin/user/src/index.ts @@ -0,0 +1,2 @@ +export * from './lib/users-roles/user-add-form/user-add-form.component'; +export * from './lib/users-roles/users-roles.component'; diff --git a/alfa-client/libs/admin/user/src/lib/user.providers.ts b/alfa-client/libs/admin/user/src/lib/user.providers.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b5ce929c521b4c7939226434358ab77184e4717 --- /dev/null +++ b/alfa-client/libs/admin/user/src/lib/user.providers.ts @@ -0,0 +1,14 @@ +import { Environment, ENVIRONMENT_CONFIG } from '@alfa-client/environment-shared'; +import KcAdminClient from '@keycloak/keycloak-admin-client'; + +export const UserProviders = [ + { + provide: KcAdminClient, + useFactory: (env: Environment) => + new KcAdminClient({ + baseUrl: env.authServer, + realmName: env.realm, + }), + deps: [ENVIRONMENT_CONFIG], + }, +]; diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.html b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.html similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.html rename to alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.html diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts similarity index 85% rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts rename to alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts index 576257546d4d83ccd09c58131e025a640f1422d8..9e6abab7af6c7ad7633633967240034746c226cb 100644 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts +++ b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.spec.ts @@ -25,6 +25,7 @@ import { CommonModule } from '@angular/common'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ReactiveFormsModule } from '@angular/forms'; import { ButtonWithSpinnerComponent, CheckboxEditorComponent, TextEditorComponent } from '@ods/component'; +import { MockComponent } from 'ng-mocks'; import { UserAddFormComponent } from './user-add-form.component'; describe('UserAddFormComponent', () => { @@ -33,8 +34,14 @@ describe('UserAddFormComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [UserAddFormComponent], - imports: [CommonModule, ButtonWithSpinnerComponent, ReactiveFormsModule, TextEditorComponent, CheckboxEditorComponent], + imports: [ + UserAddFormComponent, + CommonModule, + ReactiveFormsModule, + MockComponent(ButtonWithSpinnerComponent), + MockComponent(TextEditorComponent), + MockComponent(CheckboxEditorComponent), + ], }).compileComponents(); fixture = TestBed.createComponent(UserAddFormComponent); diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.ts b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.ts similarity index 81% rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.ts rename to alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.ts index 4537f3a1c07e2c9dddd0be24dc20ea31b21f4aea..e62729b8f391032dc1e2cc27675251702a794d91 100644 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.component.ts +++ b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.component.ts @@ -22,12 +22,16 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { Component, inject } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ButtonWithSpinnerComponent, CheckboxEditorComponent, TextEditorComponent } from '@ods/component'; import { UserAddFormService } from './user-add-form.service'; @Component({ selector: 'admin-user-add-form', providers: [UserAddFormService], templateUrl: './user-add-form.component.html', + standalone: true, + imports: [FormsModule, ReactiveFormsModule, TextEditorComponent, ButtonWithSpinnerComponent, CheckboxEditorComponent], }) export class UserAddFormComponent { formService = inject(UserAddFormService); diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.service.ts b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.service.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-form.service.ts rename to alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-form.service.ts diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-formservice.spec.ts b/alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-formservice.spec.ts similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/users-roles/user-add-form/user-add-formservice.spec.ts rename to alfa-client/libs/admin/user/src/lib/users-roles/user-add-form/user-add-formservice.spec.ts diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.html b/alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.html similarity index 100% rename from alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.html rename to alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.html diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.spec.ts b/alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.spec.ts similarity index 91% rename from alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.spec.ts rename to alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.spec.ts index 0b63c1607bc8f6fae7bb0afb00eb094e572617b6..4f8219c95ede01238172d6191c53b42a587a78c5 100644 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.spec.ts +++ b/alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.spec.ts @@ -21,17 +21,17 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { ROUTES } from '@admin-client/shared'; import { createStateResource } from '@alfa-client/tech-shared'; import { Mock, mock } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { Router } from '@angular/router'; import { ButtonWithSpinnerComponent } from '@ods/component'; import { MailboxIconComponent, PersonIconComponent } from '@ods/system'; +import { ToUserNamePipe } from 'libs/admin/user-shared/src/lib/to-user-name.pipe'; +import { UserService } from 'libs/admin/user-shared/src/lib/user.service'; +import { createUser } from 'libs/admin/user-shared/test/user'; import { MockComponent, MockPipe } from 'ng-mocks'; -import { ROUTES } from '../../../../shared'; -import { createUser } from '../../../test/user/user'; -import { ToUserNamePipe } from '../user/to-user-name.pipe'; -import { UserService } from './user.service'; import { UsersRolesComponent } from './users-roles.component'; describe('UsersRolesComponent', () => { @@ -46,13 +46,13 @@ describe('UsersRolesComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [UsersRolesComponent], providers: [{ provide: UserService, useValue: userService }], imports: [ MockComponent(ButtonWithSpinnerComponent), MockComponent(MailboxIconComponent), MockComponent(PersonIconComponent), MockPipe(ToUserNamePipe), + UsersRolesComponent, ], }).compileComponents(); diff --git a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.ts b/alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.ts similarity index 75% rename from alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.ts rename to alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.ts index 3be1adc9543d891a6bd794d0615894189821f0f9..16e5dad34bd2ab5fb2af1dfa5d0bae9ddff7cc04 100644 --- a/alfa-client/libs/admin/settings/src/lib/users-roles/users-roles.component.ts +++ b/alfa-client/libs/admin/user/src/lib/users-roles/users-roles.component.ts @@ -21,17 +21,29 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +import { ROUTES } from '@admin-client/shared'; +import { ToUserNamePipe, User, UserService } from '@admin-client/user-shared'; import { StateResource } from '@alfa-client/tech-shared'; +import { CommonModule } from '@angular/common'; import { Component, inject, OnInit } from '@angular/core'; import { Router } from '@angular/router'; +import { ButtonWithSpinnerComponent } from '@ods/component'; +import { ListComponent, ListItemComponent, MailboxIconComponent, PersonIconComponent } from '@ods/system'; import { Observable } from 'rxjs'; -import { ROUTES } from '../../../../shared/libs/routes'; -import { User } from '../user/user.model'; -import { UserService } from './user.service'; @Component({ selector: 'admin-users-roles', templateUrl: './users-roles.component.html', + standalone: true, + imports: [ + CommonModule, + ButtonWithSpinnerComponent, + ListComponent, + ListItemComponent, + MailboxIconComponent, + PersonIconComponent, + ToUserNamePipe, + ], }) export class UsersRolesComponent implements OnInit { private router = inject(Router); diff --git a/alfa-client/libs/admin/user/src/test-setup.ts b/alfa-client/libs/admin/user/src/test-setup.ts new file mode 100644 index 0000000000000000000000000000000000000000..c408668266d2fec3a9803c0ec044bc163fb987fe --- /dev/null +++ b/alfa-client/libs/admin/user/src/test-setup.ts @@ -0,0 +1,12 @@ +import '@testing-library/jest-dom'; +import 'jest-preset-angular/setup-jest'; + +import { getTestBed } from '@angular/core/testing'; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; + +getTestBed().resetTestEnvironment(); +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false }, + errorOnUnknownProperties: true, + errorOnUnknownElements: true, +}); diff --git a/alfa-client/libs/admin/user/tsconfig.json b/alfa-client/libs/admin/user/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..8ca9ad312c2bd4dc364383853ddd91a2ed8f86fd --- /dev/null +++ b/alfa-client/libs/admin/user/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "target": "es2022" + } +} diff --git a/alfa-client/libs/admin/user/tsconfig.lib.json b/alfa-client/libs/admin/user/tsconfig.lib.json new file mode 100644 index 0000000000000000000000000000000000000000..464f01e6b2b218c0f70e15ac25dd8580bdc38f6e --- /dev/null +++ b/alfa-client/libs/admin/user/tsconfig.lib.json @@ -0,0 +1,19 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableResourceInlining": true + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts", "jest.config.ts"], + "include": ["**/*.ts"] +} diff --git a/alfa-client/libs/admin/user/tsconfig.spec.json b/alfa-client/libs/admin/user/tsconfig.spec.json new file mode 100644 index 0000000000000000000000000000000000000000..e637bf83b59243f9ebc9b37842cfbf3f159bba47 --- /dev/null +++ b/alfa-client/libs/admin/user/tsconfig.spec.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "target": "es2016", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"] +} diff --git a/alfa-client/libs/authentication/src/index.ts b/alfa-client/libs/authentication/src/index.ts index 1bc3bf0e46f9de1143d8940228f47bfec3cb5a66..66e83d4533b0b6a78c2d5d54cb276421de60237b 100644 --- a/alfa-client/libs/authentication/src/index.ts +++ b/alfa-client/libs/authentication/src/index.ts @@ -23,3 +23,4 @@ */ export * from './lib/authentication.module'; export * from './lib/authentication.service'; +export * from './lib/http-unauthorized.interceptor'; diff --git a/alfa-client/tsconfig.base.json b/alfa-client/tsconfig.base.json index 31d83c1b32d909a18934ccd5695464f05b160782..f6e9e575c23782986c485ac2912154cf9ed224a7 100644 --- a/alfa-client/tsconfig.base.json +++ b/alfa-client/tsconfig.base.json @@ -16,7 +16,15 @@ "skipDefaultLibCheck": true, "baseUrl": ".", "paths": { - "@admin-client/admin-settings": ["libs/admin/settings/src/index.ts"], + "@admin-client/configuration-shared": ["libs/admin/configuration-shared/src/index.ts"], + "@admin-client/organisations-einheit": ["libs/admin/organisations-einheit/src/index.ts"], + "@admin-client/organisations-einheit-shared": ["libs/admin/organisations-einheit-shared/src/index.ts"], + "@admin-client/postfach": ["libs/admin/postfach/src/index.ts"], + "@admin-client/postfach-shared": ["libs/admin/postfach-shared/src/index.ts"], + "@admin-client/settings-shared": ["libs/admin/settings-shared/src/index.ts"], + "@admin-client/shared": ["libs/admin/shared/src/index.ts"], + "@admin-client/user": ["libs/admin/user/src/index.ts"], + "@admin-client/user-shared": ["libs/admin/user-shared/src/index.ts"], "@alfa-client/api-root-shared": ["libs/api-root-shared/src/index.ts"], "@alfa-client/app-shared": ["libs/app-shared/src/index.ts"], "@alfa-client/bescheid": ["libs/bescheid/src/index.ts"],