diff --git a/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.html b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.html index ea4459162197ac7a91ea02431a23203ec3dccd51..fa88869240cab091c0f576ce8d75b3c238049b75 100644 --- a/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.html +++ b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.html @@ -1 +1,15 @@ -<p>admin-statistik-fields-form works!</p> +<h2 class="heading-2" data-test-id="statistik-fields-form-header-text">Felder zur Auswertung hinzufügen</h2> + +<ods-text-input + [fieldControl]="formEngineFormControl" + label="Formengine" + placeholder="Tragen Sie hier die Formengine des Formulars ein" + data-test-id="form-engine-input" +></ods-text-input> + +<ods-text-input + [fieldControl]="formIdFormControl" + label="FormID" + placeholder="Tragen Sie hier die FormID des Formulars ein" + data-test-id="form-id-input" +></ods-text-input> diff --git a/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.spec.ts b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.spec.ts index d53fa335ea3020ec2291ef32075256182a99f2af..652e4a4905147d4ba1a65f5db80993b6f9548951 100644 --- a/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.spec.ts +++ b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.spec.ts @@ -1,13 +1,28 @@ +import { existsAsHtmlElement, getElementComponentFromFixtureByCss } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { FormBuilder } from '@angular/forms'; +import { TextInputComponent } from '@ods/system'; +import { getDataTestIdOf } from '../../../../../../tech-shared/test/data-test'; import { AdminStatistikFieldsFormComponent } from './admin-statistik-fields-form.component'; +import { StatistikFieldsFormService } from './statistik-fields.formservice'; describe('AdminStatistikFieldsFormComponent', () => { let component: AdminStatistikFieldsFormComponent; let fixture: ComponentFixture<AdminStatistikFieldsFormComponent>; + const formEngineInputTestId: string = getDataTestIdOf('form-engine-input'); + const formIdInputTestId: string = getDataTestIdOf('form-id-input'); + + let formService: StatistikFieldsFormService; + + beforeEach(() => { + formService = new StatistikFieldsFormService(new FormBuilder()); + }); + beforeEach(async () => { await TestBed.configureTestingModule({ imports: [AdminStatistikFieldsFormComponent], + providers: [{ provide: StatistikFieldsFormService, useValue: formService }], }).compileComponents(); fixture = TestBed.createComponent(AdminStatistikFieldsFormComponent); @@ -15,7 +30,57 @@ describe('AdminStatistikFieldsFormComponent', () => { fixture.detectChanges(); }); - it('should create', () => { - expect(component).toBeTruthy(); + describe('component', () => { + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should set form controls', () => { + expect(component.formEngineFormControl).toBeDefined(); + expect(component.formIdFormControl).toBeDefined(); + expect(component.dataFieldsFormArray).toBeDefined(); + }); + }); + + describe('template', () => { + describe('form engine input', () => { + it('should exists', () => { + fixture.detectChanges(); + + existsAsHtmlElement(fixture, formEngineInputTestId); + }); + + it('should have been called with inputs', () => { + fixture.detectChanges(); + + const formEngineInput: TextInputComponent = getElementComponentFromFixtureByCss<TextInputComponent>( + fixture, + formEngineInputTestId, + ); + + expect(formEngineInput.fieldControl).toEqual(component.formEngineFormControl); + }); + }); + + describe('form id input', () => { + it('should exists', () => { + fixture.detectChanges(); + + existsAsHtmlElement(fixture, formIdInputTestId); + }); + + it('should have been called with inputs', () => { + fixture.detectChanges(); + + const formIdInput: TextInputComponent = getElementComponentFromFixtureByCss<TextInputComponent>( + fixture, + formIdInputTestId, + ); + + expect(formIdInput.fieldControl).toEqual(component.formIdFormControl); + }); + }); + + describe('data field input', () => {}); }); }); diff --git a/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.ts b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.ts index 2d5bbced355118f41d22250129b74a0bc8ea8c1a..d6a268624c29f3bd8e8d74f305778777c6330def 100644 --- a/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.ts +++ b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/admin-statistik-fields-form.component.ts @@ -1,10 +1,25 @@ import { CommonModule } from '@angular/common'; -import { Component } from '@angular/core'; +import { Component, inject } from '@angular/core'; +import { FormArray, FormControl } from '@angular/forms'; +import { TextInputComponent } from '@ods/system'; +import { StatistikFieldsFormService } from './statistik-fields.formservice'; @Component({ selector: 'admin-statistik-fields-form', standalone: true, - imports: [CommonModule], + imports: [CommonModule, TextInputComponent], templateUrl: './admin-statistik-fields-form.component.html', }) -export class AdminStatistikFieldsFormComponent {} +export class AdminStatistikFieldsFormComponent { + private readonly formService = inject(StatistikFieldsFormService); + + public readonly formEngineFormControl: FormControl = this.formService.form.controls[ + StatistikFieldsFormService.FIELD_FORM_ENGINE + ] as FormControl; + public readonly formIdFormControl: FormControl = this.formService.form.controls[ + StatistikFieldsFormService.FIELD_FORM_ID + ] as FormControl; + public readonly dataFieldsFormArray: FormArray = this.formService.form.controls[ + StatistikFieldsFormService.FIELD_DATA_FIELDS + ] as FormArray; +} diff --git a/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/statistik-fields.formservice.ts b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/statistik-fields.formservice.ts new file mode 100644 index 0000000000000000000000000000000000000000..78cc57f803ab5a4af7f0e7f27c910ef3eea26fb4 --- /dev/null +++ b/alfa-client/libs/admin/statistik/src/lib/statistik-container/statistik-fields-form/statistik-fields.formservice.ts @@ -0,0 +1,28 @@ +import { AbstractFormService, EMPTY_STRING, StateResource } from '@alfa-client/tech-shared'; +import { Injectable } from '@angular/core'; +import { FormArray, FormControl, UntypedFormGroup } from '@angular/forms'; +import { Resource } from '@ngxp/rest'; +import { EMPTY, Observable } from 'rxjs'; + +@Injectable() +export class StatistikFieldsFormService extends AbstractFormService { + public static readonly FIELD_FORM_ENGINE: string = 'formEngine'; + public static readonly FIELD_FORM_ID: string = 'formId'; + public static readonly FIELD_DATA_FIELDS: string = 'dataFields'; + + protected initForm(): UntypedFormGroup { + return this.formBuilder.group({ + [StatistikFieldsFormService.FIELD_FORM_ENGINE]: new FormControl(EMPTY_STRING), + [StatistikFieldsFormService.FIELD_FORM_ID]: new FormControl(EMPTY_STRING), + [StatistikFieldsFormService.FIELD_DATA_FIELDS]: new FormArray([new FormControl(EMPTY_STRING)]), + }); + } + + protected doSubmit(): Observable<StateResource<Resource>> { + return EMPTY; + } + + protected getPathPrefix(): string { + return 'settingBody'; + } +}