From 1f72317e93c0bce124c5be3209d5a4e9029974ec Mon Sep 17 00:00:00 2001 From: Maurizio Vitale Date: Wed, 25 Apr 2018 09:28:27 +0100 Subject: [PATCH] Fix form visibility related to the process variables (#3232) --- .../widget-visibility.service.spec.ts | 70 +++++++++++++++++++ .../services/widget-visibility.service.ts | 4 +- 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/lib/core/form/services/widget-visibility.service.spec.ts b/lib/core/form/services/widget-visibility.service.spec.ts index acfe065dcc..8f2fe00057 100644 --- a/lib/core/form/services/widget-visibility.service.spec.ts +++ b/lib/core/form/services/widget-visibility.service.spec.ts @@ -651,6 +651,76 @@ describe('WidgetVisibilityService', () => { expect(fakeFormWithField.tabs[0].isVisible).toBeFalsy(); }); + it('should use the form value to evaluate the visibility condition if the form value is defined', (done) => { + service.getTaskProcessVariable('9999').subscribe( + (res: TaskProcessVariableModel[]) => { + expect(res).toBeDefined(); + let varValue = service.getVariableValue(formTest, 'FIELD_TEST', res); + expect(varValue).not.toBeUndefined(); + expect(varValue).toBe('process_variable_value'); + + visibilityObjTest.leftFormFieldId = 'FIELD_TEST'; + visibilityObjTest.operator = '=='; + visibilityObjTest.rightValue = 'RIGHT_FORM_FIELD_VALUE'; + + const fieldWithoutVisibility = fakeFormWithField.getFieldById('FIELD_WITH_CONDITION'); + fieldWithoutVisibility.isVisible = false; + fieldWithoutVisibility.visibilityCondition = visibilityObjTest; + + let contModel = new ContainerModel(new FormFieldModel(fakeFormWithField)); + + fakeFormWithField.fields.push(contModel); + service.refreshVisibility(fakeFormWithField); + + const fieldWithVisibilityAttached = contModel.form.getFieldById('FIELD_WITH_CONDITION'); + expect(fieldWithVisibilityAttached.isVisible).toBeTruthy(); + done(); + } + ); + jasmine.Ajax.requests.mostRecent().respondWith({ + status: 200, + contentType: 'json', + responseText: [{id: 'FIELD_TEST', type: 'string', value: 'process_variable_value'}] + }); + }); + + it('should use the process value to evaluate the visibility condition if the form value is not defined', (done) => { + + service.getTaskProcessVariable('9999').subscribe( + (res: TaskProcessVariableModel[]) => { + expect(res).toBeDefined(); + let varValue = service.getVariableValue(formTest, 'FIELD_TEST', res); + expect(varValue).not.toBeUndefined(); + expect(varValue).toBe('process_variable_value'); + + visibilityObjTest.leftFormFieldId = 'FIELD_TEST'; + visibilityObjTest.operator = '=='; + visibilityObjTest.rightValue = 'RIGHT_FORM_FIELD_VALUE'; + + const fieldRelatedToCondition = fakeFormWithField.getFieldById('FIELD_TEST'); + fieldRelatedToCondition.value = ''; + + const fieldWithoutVisibility = fakeFormWithField.getFieldById('FIELD_WITH_CONDITION'); + fieldWithoutVisibility.isVisible = false; + fieldWithoutVisibility.visibilityCondition = visibilityObjTest; + + let contModel = new ContainerModel(new FormFieldModel(fakeFormWithField)); + + fakeFormWithField.fields.push(contModel); + service.refreshVisibility(fakeFormWithField); + + const fieldWithVisibilityAttached = contModel.form.getFieldById('FIELD_WITH_CONDITION'); + expect(fieldWithVisibilityAttached.isVisible).toBeFalsy(); + done(); + } + ); + jasmine.Ajax.requests.mostRecent().respondWith({ + status: 200, + contentType: 'json', + responseText: [{id: 'FIELD_TEST', type: 'string', value: 'process_variable_value'}] + }); + }); + it('should refresh the visibility for single tab', () => { visibilityObjTest.leftFormFieldId = 'FIELD_TEST'; visibilityObjTest.operator = '!='; diff --git a/lib/core/form/services/widget-visibility.service.ts b/lib/core/form/services/widget-visibility.service.ts index a25441ab42..56beb41fb4 100644 --- a/lib/core/form/services/widget-visibility.service.ts +++ b/lib/core/form/services/widget-visibility.service.ts @@ -78,8 +78,8 @@ export class WidgetVisibilityService { if (visibilityObj.leftRestResponseId && visibilityObj.leftRestResponseId !== 'null') { leftValue = this.getVariableValue(form, visibilityObj.leftRestResponseId, this.processVarList); } else { - leftValue = this.getVariableValue(form, visibilityObj.leftFormFieldId, this.processVarList); - leftValue = leftValue ? leftValue : this.getFormValue(form, visibilityObj.leftFormFieldId); + leftValue = this.getFormValue(form, visibilityObj.leftFormFieldId); + leftValue = leftValue ? leftValue : this.getVariableValue(form, visibilityObj.leftFormFieldId, this.processVarList); } return leftValue; }