[TLC-254] ITs, mocking type bind relation service

This commit is contained in:
Kim Shepherd
2022-03-07 14:03:17 +13:00
parent 96774971de
commit ce0194108f
2 changed files with 41 additions and 8 deletions

View File

@@ -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<DsDynamicFormControlContainerComponent>;
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();
});
});

View File

@@ -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);
});
});