From ce0194108f2e60169183e9f2cd230dd88eafb20c Mon Sep 17 00:00:00 2001 From: Kim Shepherd Date: Mon, 7 Mar 2022 14:03:17 +1300 Subject: [PATCH] [TLC-254] ITs, mocking type bind relation service --- ...c-form-control-container.component.spec.ts | 39 ++++++++++++++++--- .../form/builder/form-builder.service.spec.ts | 10 +++-- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts index 34d23ef719..8f6584b0ac 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts @@ -14,7 +14,7 @@ import { DynamicEditorModel, DynamicFileUploadModel, DynamicFormArrayModel, - DynamicFormControlModel, + DynamicFormControlModel, DynamicFormControlRelation, DynamicFormGroupModel, DynamicFormsCoreModule, DynamicFormService, @@ -25,7 +25,7 @@ import { DynamicSliderModel, DynamicSwitchModel, DynamicTextAreaModel, - DynamicTimePickerModel + DynamicTimePickerModel, MATCH_VISIBLE, OR_OPERATOR } from '@ng-dynamic-forms/core'; import { DynamicNGBootstrapCalendarComponent, @@ -83,10 +83,26 @@ import { NgxMaskModule } from 'ngx-mask'; function getMockDsDynamicTypeBindRelationService(): DsDynamicTypeBindRelationService { return jasmine.createSpyObj('DsDynamicTypeBindRelationService', { getRelatedFormModel: jasmine.createSpy('getRelatedFormModel'), - isFormControlToBeHidden: jasmine.createSpy('isFormControlToBeHidden') + matchesCondition: jasmine.createSpy('matchesCondition'), + subscribeRelations: jasmine.createSpy('subscribeRelations') }); } +function getTypeBindRelations(configuredTypeBindValues: string[]): DynamicFormControlRelation[] { + const bindValues = []; + configuredTypeBindValues.forEach((value) => { + bindValues.push({ + id: 'dc.type', + value: value + }); + }); + return [{ + match: MATCH_VISIBLE, + operator: OR_OPERATOR, + when: bindValues + }]; +} + describe('DsDynamicFormControlContainerComponent test suite', () => { const vocabularyOptions: VocabularyOptions = { @@ -119,7 +135,8 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { metadataFields: [], repeatable: false, submissionId: '1234', - hasSelectableMetadata: false + hasSelectableMetadata: false, + typeBindRelations: getTypeBindRelations(['Book']) }), new DynamicScrollableDropdownModel({ id: 'scrollableDropdown', @@ -178,6 +195,7 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { ]; const testModel = formModel[8]; let formGroup: FormGroup; + let formBuilderService: FormBuilderService; let fixture: ComponentFixture; let component: DsDynamicFormControlContainerComponent; let debugElement: DebugElement; @@ -240,7 +258,7 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { }); })); - beforeEach(inject([DynamicFormService], (service: DynamicFormService) => { + beforeEach(inject([DynamicFormService, FormBuilderService], (service: DynamicFormService, formBuilderService: FormBuilderService) => { formGroup = service.createFormGroup(formModel); @@ -366,4 +384,15 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { expect(testFn(formModel[25])).toEqual(DsDynamicFormGroupComponent); }); + it('should display a type-bound field when dc.type matcher set to Book', () => { + const rels: any = getMockDsDynamicTypeBindRelationService().getRelatedFormModel(formModel[16]); + const isVisible = getMockDsDynamicTypeBindRelationService().matchesCondition(rels.typeBindRelations, rels.matcher); + expect(isVisible).toBeTruthy(); + }); + + it('Should successfully subscribe type bind relations for component', () => { + const subscriptions = getMockDsDynamicTypeBindRelationService().subscribeRelations(component.model, component.control); + expect(subscriptions).toBeDefined(); + }); + }); diff --git a/src/app/shared/form/builder/form-builder.service.spec.ts b/src/app/shared/form/builder/form-builder.service.spec.ts index 254db8a539..2d2b335038 100644 --- a/src/app/shared/form/builder/form-builder.service.spec.ts +++ b/src/app/shared/form/builder/form-builder.service.spec.ts @@ -48,7 +48,11 @@ import { DynamicConcatModel } from './ds-dynamic-form-ui/models/ds-dynamic-conca import { DynamicLookupNameModel } from './ds-dynamic-form-ui/models/lookup/dynamic-lookup-name.model'; import { DynamicRowArrayModel } from './ds-dynamic-form-ui/models/ds-dynamic-row-array-model'; import { FormRowModel } from '../../../core/config/models/config-submission-form.model'; -import {DsDynamicTypeBindRelationService} from "./ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service"; +import { DsDynamicTypeBindRelationService } from './ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service'; +import {of as observableOf} from "rxjs"; +import {MenuSection} from "../../menu/menu.reducer"; +import {MenuID} from "../../menu/initial-menus-state"; +import {cold} from "jasmine-marbles"; describe('FormBuilderService test suite', () => { @@ -60,7 +64,7 @@ describe('FormBuilderService test suite', () => { function getMockDsDynamicTypeBindRelationService(): DsDynamicTypeBindRelationService { return jasmine.createSpyObj('DsDynamicTypeBindRelationService', { getRelatedFormModel: jasmine.createSpy('getRelatedFormModel'), - isFormControlToBeHidden: jasmine.createSpy('isFormControlToBeHidden') + matchesCondition: jasmine.createSpy('matchesCondition') }); } @@ -895,7 +899,7 @@ describe('FormBuilderService test suite', () => { it('should hide on type bind', () => { const model = service.findById('testFormArray', testModel) as DynamicFormArrayModel; typeBindRelationService.getRelatedFormModel(model); - service.getTypeBindModel(); + const formArray = service.createFormArray(model); }); });