Skip to content
Snippets Groups Projects
Commit d5f7b5f1 authored by Martin Küster's avatar Martin Küster
Browse files

Merge branch 'OZG-7510-statistic-edit-delete-fields' into 'main'

Ozg 7510 statistic edit delete fields

See merge request !63
parents fceb6a33 62c79051
Branches
Tags
1 merge request!63Ozg 7510 statistic edit delete fields
Showing
with 256 additions and 33 deletions
......@@ -7,3 +7,4 @@ packages/workspace/src/generators/**/files/**/*.json
.angular
/.nx/workspace-data
*.md
\ No newline at end of file
......@@ -21,15 +21,14 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
import { EnvironmentModule, loadEnvironment } from '@alfa-client/environment-shared';
import { enableProdMode, importProvidersFrom, Injectable } from '@angular/core';
import { isNil } from 'lodash-es';
import { AggregationMappingProvider } from '@admin-client/reporting-shared';
import { ApiRootModule } from '@alfa-client/api-root-shared';
import { EnvironmentModule, loadEnvironment } from '@alfa-client/environment-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 { enableProdMode, importProvidersFrom, Injectable } from '@angular/core';
import { bootstrapApplication, BrowserModule } from '@angular/platform-browser';
import { provideAnimations } from '@angular/platform-browser/animations';
import {
......@@ -49,6 +48,7 @@ import { ConfigurationsProviders } from 'libs/admin/configuration-shared/src/lib
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 { isNil } from 'lodash-es';
import { HttpBinaryFileInterceptor } from '../../../libs/tech-shared/src/lib/interceptor/http-binary-file.interceptor';
import { HttpXsrfInterceptor } from '../../../libs/tech-shared/src/lib/interceptor/http-xsrf.interceptor';
import { XhrInterceptor } from '../../../libs/tech-shared/src/lib/interceptor/xhr.interceptor';
......@@ -97,6 +97,7 @@ loadEnvironment(environment.environmentUrl).then((env) => {
PostfachProviders,
SettingsProviders,
UserProviders,
AggregationMappingProvider,
importProvidersFrom(
NavigationSharedModule,
BrowserModule,
......
import { AdminStatistikFieldsFormComponent } from '@admin-client/statistik';
import { existsAsHtmlElement } from '@alfa-client/test-utils';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MockComponent } from 'ng-mocks';
import { AdminStatistikFieldsFormComponent } from '../../../../../../libs/admin/statistik/src/lib/statistik-fields-form/admin-statistik-fields-form.component';
import { getDataTestIdOf } from '../../../../../../libs/tech-shared/test/data-test';
import { StatistikFieldsFormPageComponent } from './statistik-fields-form-page.component';
......
import { AdminStatistikFieldsFormComponent } from '@admin-client/statistik';
import { CommonModule } from '@angular/common';
import { Component } from '@angular/core';
import { AdminStatistikFieldsFormComponent } from '../../../../../../libs/admin/statistik/src/lib/statistik-fields-form/admin-statistik-fields-form.component';
@Component({
selector: 'statistik-fields-form-page',
......
......@@ -10,7 +10,7 @@
"executor": "@nx/jest:jest",
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
"options": {
"tsConfig": "libs/admin//postfach-shared/tsconfig.spec.json",
"tsConfig": "libs/admin/postfach-shared/tsconfig.spec.json",
"jestConfig": "libs/admin/postfach-shared/jest.config.ts"
}
},
......
......@@ -21,7 +21,7 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
import { SettingsService } from '@admin-client/settings-shared';
import { SettingName, 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';
......@@ -34,7 +34,7 @@ export function createPostfachResourceService(repository: ResourceRepository, se
function buildConfig(settingService: SettingsService): ResourceServiceConfig<PostfachResource> {
return {
resource: settingService.getPostfach(),
resource: settingService.get(SettingName.POSTFACH),
getLinkRel: PostfachLinkRel.SELF,
edit: { linkRel: PostfachLinkRel.SELF },
};
......
......@@ -21,8 +21,7 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
import { Resource } from '@ngxp/rest';
import { SettingName } from 'libs/admin/settings-shared/src/lib/settings.model';
import { SettingItemResource } from 'libs/admin/settings-shared/src/lib/settings.model';
export interface Absender {
name: string;
......@@ -37,9 +36,4 @@ export interface Postfach {
signatur: string;
}
export declare type PostfachSettingsItem = {
name: SettingName.POSTFACH;
settingBody: Postfach;
};
export declare type PostfachResource = Resource & PostfachSettingsItem;
export declare type PostfachResource = SettingItemResource<Postfach>;
......@@ -21,6 +21,7 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
import { SettingItem } from '@admin-client/settings-shared';
import { createEmptyStateResource, createStateResource, StateResource } from '@alfa-client/tech-shared';
import { Mock, mock } from '@alfa-client/test-utils';
import { SnackBarService } from '@alfa-client/ui';
......@@ -31,7 +32,7 @@ import { singleCold, singleHot } from 'libs/tech-shared/test/marbles';
import { Observable, of } from 'rxjs';
import { createPostfachResource, createPostfachSettingItem } from '../test/postfach';
import { PostfachResourceService } from './postfach-resource.service';
import { PostfachResource, PostfachSettingsItem } from './postfach.model';
import { Postfach, PostfachResource } from './postfach.model';
import { PostfachService } from './postfach.service';
describe('PostfachService', () => {
......@@ -78,7 +79,7 @@ describe('PostfachService', () => {
});
describe('save', () => {
const postfachSettingsItem: PostfachSettingsItem = createPostfachSettingItem();
const postfachSettingsItem: SettingItem<Postfach> = createPostfachSettingItem();
const postfachResource: PostfachResource = createPostfachResource();
const postfachStateResource: StateResource<PostfachResource> = createStateResource(postfachResource);
......
......@@ -21,13 +21,13 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
import { SettingName } from '@admin-client/settings-shared';
import { SettingItem, SettingName } from '@admin-client/settings-shared';
import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared';
import { SnackBarService } from '@alfa-client/ui';
import { inject, Injectable } from '@angular/core';
import { Observable, startWith, tap } from 'rxjs';
import { PostfachResourceService } from './postfach-resource.service';
import { Postfach, PostfachResource, PostfachSettingsItem } from './postfach.model';
import { Postfach, PostfachResource } from './postfach.model';
@Injectable()
export class PostfachService {
......@@ -51,7 +51,7 @@ export class PostfachService {
}
}
private buildPostfachSettingItem(postfach: Postfach): PostfachSettingsItem {
private buildPostfachSettingItem(postfach: Postfach): SettingItem<Postfach> {
return {
name: SettingName.POSTFACH,
settingBody: postfach,
......
......@@ -22,9 +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 { SettingItem, SettingName } from 'libs/admin/settings-shared/src/lib/settings.model';
import { toResource } from 'libs/tech-shared/test/resource';
import { Postfach, PostfachResource, PostfachSettingsItem } from '../lib/postfach.model';
import { Postfach, PostfachResource } from '../lib/postfach.model';
export function createPostfach(): Postfach {
return {
......@@ -39,7 +39,7 @@ export function createPostfach(): Postfach {
};
}
export function createPostfachSettingItem(): PostfachSettingsItem {
export function createPostfachSettingItem(): SettingItem<Postfach> {
return {
name: SettingName.POSTFACH,
settingBody: createPostfach(),
......@@ -49,10 +49,3 @@ export function createPostfachSettingItem(): PostfachSettingsItem {
export function createPostfachResource(): PostfachResource {
return toResource(createPostfachSettingItem());
}
export function createSettingItemResource(): SettingItemResource {
return toResource({
name: faker.word.sample(),
settingBody: {},
});
}
{
"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": {}
}
]
}
# admin-reporting-shared
This library was generated with [Nx](https://nx.dev).
## Running unit tests
Run `nx test admin-reporting-shared` to execute the unit tests.
export default {
displayName: 'admin-reporting-shared',
preset: '../../../jest.preset.js',
setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
coverageDirectory: '../../../coverage/libs/admin/reporting-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',
],
};
{
"name": "admin-reporting-shared",
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "libs/admin/reporting-shared/src",
"prefix": "admin",
"projectType": "library",
"tags": [],
"targets": {
"test": {
"executor": "@nx/jest:jest",
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
"options": {
"tsConfig": "libs/admin/reporting-shared/tsconfig.spec.json",
"jestConfig": "libs/admin/reporting-shared/jest.config.ts"
}
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": ["{options.outputFile}"]
}
}
}
export * from './lib/aggregation-mapping-resource.service';
export * from './lib/aggregation-mapping.model';
export * from './lib/aggregation-mapping.provider';
export * from './lib/aggregation-mapping.service';
import { ConfigurationLinkRel, ConfigurationResource, ConfigurationService } from '@admin-client/configuration-shared';
import { ListResourceServiceConfig, ResourceListService, ResourceRepository } from '@alfa-client/tech-shared';
import { AggregationMappingListLinkRel } from './aggregation-mapping.linkrel';
import { AggregationMappingListResource, AggregationMappingResource } from './aggregation-mapping.model';
export class AggregationMappingListResourceService extends ResourceListService<
ConfigurationResource,
AggregationMappingListResource,
AggregationMappingResource
> {}
export function createAggregationMappingResourceService(
repository: ResourceRepository,
configurationService: ConfigurationService,
) {
return new ResourceListService(buildConfig(configurationService), repository);
}
function buildConfig(configurationService: ConfigurationService): ListResourceServiceConfig<ConfigurationResource> {
return {
baseResource: configurationService.get(),
listLinkRel: ConfigurationLinkRel.AGGREGATION_MAPPINGS,
listResourceListLinkRel: AggregationMappingListLinkRel.LIST,
createLinkRel: AggregationMappingListLinkRel.SELF,
};
}
export enum AggregationMappingListLinkRel {
LIST = 'aggregationMappings',
SELF = 'self',
}
import { ListResource } from '@alfa-client/tech-shared';
import { Resource } from '@ngxp/rest';
export interface AggregationMapping {
formIdentifier: FormIdentifier;
mappings: FieldMapping[];
}
export interface FormIdentifier {
formEngineName: string;
formId: string;
}
export interface FieldMapping {
sourcePath: string;
targetPath: string;
}
export interface AggregationMappingResource extends AggregationMapping, Resource {}
export interface AggregationMappingListResource extends ListResource {}
import { ResourceRepository } from '@alfa-client/tech-shared';
import { Provider } from '@angular/core';
import { ConfigurationService } from 'libs/admin/configuration-shared/src/lib/configuration.service';
import {
AggregationMappingListResourceService,
createAggregationMappingResourceService,
} from './aggregation-mapping-resource.service';
import { AggregationMappingService } from './aggregation-mapping.service';
export const AggregationMappingProvider: Provider[] = [
{
provide: AggregationMappingListResourceService,
useFactory: createAggregationMappingResourceService,
deps: [ResourceRepository, ConfigurationService],
},
AggregationMappingService,
];
import { StateResource, 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 } from 'rxjs';
import {
createAggregationMapping,
createAggregationMappingListResource,
createAggregationMappingResource,
} from '../../test/aggregation-mapping';
import { AggregationMappingListResourceService } from './aggregation-mapping-resource.service';
import { AggregationMapping, AggregationMappingListResource, AggregationMappingResource } from './aggregation-mapping.model';
import { AggregationMappingService } from './aggregation-mapping.service';
describe('AggregationMappingService', () => {
let service: AggregationMappingService;
let listResourceService: Mock<AggregationMappingListResourceService>;
beforeEach(() => {
listResourceService = mock(AggregationMappingListResourceService);
TestBed.configureTestingModule({
providers: [AggregationMappingService, { provide: AggregationMappingListResourceService, useValue: listResourceService }],
});
service = TestBed.inject(AggregationMappingService);
});
it('should create', () => {
expect(service).toBeTruthy();
});
describe('get list', () => {
const aggregationMappingListResource: AggregationMappingListResource = createAggregationMappingListResource();
const aggregationMappingListStateResource: StateResource<AggregationMappingListResource> =
createStateResource(aggregationMappingListResource);
beforeEach(() => {
listResourceService.getList = jest.fn().mockReturnValue(singleCold(aggregationMappingListStateResource));
});
it('should call listResourceService', () => {
service.getList();
expect(listResourceService.getList).toHaveBeenCalled();
});
it('should return value', () => {
const loadedAggregationMappingListResource: Observable<StateResource<AggregationMappingListResource>> = service.getList();
expect(loadedAggregationMappingListResource).toBeObservable(singleCold(aggregationMappingListStateResource));
});
});
describe('create', () => {
const aggregationMappingResource: AggregationMappingResource = createAggregationMappingResource();
const aggregationMappingStateResource: StateResource<AggregationMappingResource> =
createStateResource(aggregationMappingResource);
const aggregationMapping: AggregationMapping = createAggregationMapping();
beforeEach(() => {
listResourceService.create = jest.fn().mockReturnValue(singleCold(aggregationMappingStateResource));
});
it('should call resourceService', () => {
service.create(aggregationMapping);
expect(listResourceService.create).toHaveBeenCalledWith(aggregationMapping);
});
it('should return value', () => {
const loadedAggregationMappingResource: Observable<StateResource<AggregationMappingResource>> =
service.create(aggregationMapping);
expect(loadedAggregationMappingResource).toBeObservable(singleCold(aggregationMappingStateResource));
});
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment