diff --git a/ng2-components/ng2-activiti-form/src/components/activiti-form.component.html b/ng2-components/ng2-activiti-form/src/components/activiti-form.component.html
index 36521d3c6b..f42f0b9900 100644
--- a/ng2-components/ng2-activiti-form/src/components/activiti-form.component.html
+++ b/ng2-components/ng2-activiti-form/src/components/activiti-form.component.html
@@ -10,7 +10,7 @@
+-
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/tabs/tabs.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/tabs/tabs.widget.ts
index cc73c08505..a3d8fbf149 100644
--- a/ng2-components/ng2-activiti-form/src/components/widgets/tabs/tabs.widget.ts
+++ b/ng2-components/ng2-activiti-form/src/components/widgets/tabs/tabs.widget.ts
@@ -15,8 +15,8 @@
* limitations under the License.
*/
-import { Component, Input, AfterViewInit } from '@angular/core';
-import { TabModel } from './../core/index';
+import { Component, Input, AfterViewInit, EventEmitter, Output } from '@angular/core';
+import { TabModel, FormFieldModel } from './../core/index';
declare let __moduleName: string;
declare var componentHandler;
@@ -31,6 +31,9 @@ export class TabsWidget implements AfterViewInit {
@Input()
tabs: TabModel[] = [];
+ @Output()
+ formTabChanged: EventEmitter = new EventEmitter();
+
hasTabs() {
return this.tabs && this.tabs.length > 0;
}
@@ -47,4 +50,9 @@ export class TabsWidget implements AfterViewInit {
}
return false;
}
+
+ tabChanged( field: FormFieldModel ) {
+ this.formTabChanged.emit(field);
+ }
+
}
diff --git a/ng2-components/ng2-activiti-form/src/services/widget-visibility.service.spec.ts b/ng2-components/ng2-activiti-form/src/services/widget-visibility.service.spec.ts
index a808c22642..301eaa1bb2 100644
--- a/ng2-components/ng2-activiti-form/src/services/widget-visibility.service.spec.ts
+++ b/ng2-components/ng2-activiti-form/src/services/widget-visibility.service.spec.ts
@@ -15,541 +15,567 @@
* limitations under the License.
*/
-/*
-import { it, describe, inject, beforeEach, beforeEachProviders } from '@angular/core/testing';
+
+import {
+ async, inject, TestBed
+} from '@angular/core/testing';
+
+import {
+ MockBackend,
+ MockConnection
+} from '@angular/http/testing';
+
+import {
+ HttpModule,
+ Http,
+ XHRBackend,
+ Response,
+ ResponseOptions
+} from '@angular/http';
import { WidgetVisibilityService } from './widget-visibility.service';
-import { AlfrescoSettingsService, AlfrescoAuthenticationService } from 'ng2-alfresco-core';
-import { HTTP_PROVIDERS } from '@angular/http';
-import { WidgetVisibilityModel } from '../models/widget-visibility.model';
+import { AlfrescoSettingsService } from 'ng2-alfresco-core';
import { TaskProcessVariableModel } from '../models/task-process-variable.model';
+import { WidgetVisibilityModel } from '../models/widget-visibility.model';
import { FormModel, FormValues, FormFieldModel } from '../components/widgets/core/index';
-declare let AlfrescoApi: any;
-declare let jasmine: any;
-describe('WidgetVisibilityService', () => {
- let service;
- let formTest = new FormModel({});
- let formValues: FormValues = { 'test_1': 'value_1', 'test_2': 'value_2', 'test_3': 'value_1' };
- let fakeTaskProcessVariableModels = [
- {id: 'TEST_VAR_1', type: 'string', value: 'test_value_1'},
- {id: 'TEST_VAR_2', type: 'string', value: 'test_value_2'},
- {id: 'TEST_VAR_3', type: 'string', value: 'test_value_3'}
- ];
+//////// Tests /////////////
+describe('WidgetVisibilityService (mockBackend)', () => {
+ let formTest = new FormModel({});
+ let fakeTaskProcessVariableModels = [
+ {id: 'TEST_VAR_1', type: 'string', value: 'test_value_1'},
+ {id: 'TEST_VAR_2', type: 'string', value: 'test_value_2'},
+ {id: 'TEST_VAR_3', type: 'string', value: 'test_value_3'}
+ ];
+ let formValues: FormValues = { 'test_1': 'value_1', 'test_2': 'value_2', 'test_3': 'value_1' };
+ let fakeFormJson = {
+ id: '9999',
+ name: 'FORM_VISIBILITY',
+ processDefinitionId: 'PROCESS_TEST:9:9999',
+ processDefinitionName: 'PROCESS_TEST',
+ processDefinitionKey: 'PROCESS_TEST',
+ taskId: '999',
+ taskName: 'TEST',
+ fields: [
+ {
+ fieldType: 'ContainerRepresentation',
+ id: '000000000000000000',
+ name: 'Label',
+ type: 'container',
+ value: null,
+ numberOfColumns: 2,
+ fields: {
+ 1: [
+ {
+ fieldType: 'FormFieldRepresentation',
+ id: 'FIELD_WITH_CONDITION',
+ name: 'FIELD_WITH_CONDITION',
+ type: 'text',
+ value: 'field_with_condition_value',
+ visibilityCondition: null
+ },
+ {
+ fieldType: 'FormFieldRepresentation',
+ id: 'LEFT_FORM_FIELD_ID',
+ name: 'LEFT_FORM_FIELD_NAME',
+ type: 'text',
+ value: 'LEFT_FORM_FIELD_VALUE',
+ visibilityCondition: null
+ }
+ ],
+ 2: [
+ {
+ fieldType: 'FormFieldRepresentation',
+ id: 'RIGHT_FORM_FIELD_ID',
+ name: 'RIGHT_FORM_FIELD_NAME',
+ type: 'text',
+ value: 'RIGHT_FORM_FIELD_VALUE',
+ visibilityCondition: null
+ }
+ ]
+ }
+ }
+ ]
+ };
- let fakeFormJson = {
- id: '9999',
- name: 'FORM_VISIBILITY',
- processDefinitionId: 'PROCESS_TEST:9:9999',
- processDefinitionName: 'PROCESS_TEST',
- processDefinitionKey: 'PROCESS_TEST',
- taskId: '999',
- taskName: 'TEST',
- fields: [
- {
- fieldType: 'ContainerRepresentation',
- id: '000000000000000000',
- name: 'Label',
- type: 'container',
- value: null,
- numberOfColumns: 2,
- fields: {
- 1: [
- {
- fieldType: 'FormFieldRepresentation',
- id: 'FIELD_WITH_CONDITION',
- name: 'FIELD_WITH_CONDITION',
- type: 'text',
- value: 'field_with_condition_value',
- visibilityCondition: null
- },
- {
- fieldType: 'FormFieldRepresentation',
- id: 'LEFT_FORM_FIELD_ID',
- name: 'LEFT_FORM_FIELD_NAME',
- type: 'text',
- value: 'LEFT_FORM_FIELD_VALUE',
- visibilityCondition: null
- }
- ],
- 2: [
- {
- fieldType: 'FormFieldRepresentation',
- id: 'RIGHT_FORM_FIELD_ID',
- name: 'RIGHT_FORM_FIELD_NAME',
- type: 'text',
- value: 'RIGHT_FORM_FIELD_VALUE',
- visibilityCondition: null
- }
- ]
- }
- }
- ]
- };
+ beforeEach( async(() => {
+ TestBed.configureTestingModule({
+ imports: [ HttpModule ],
+ providers: [
+ WidgetVisibilityService,
+ AlfrescoSettingsService,
+ { provide: XHRBackend, useClass: MockBackend }
+ ]
+ })
+ .compileComponents();
+ }));
- beforeEachProviders(() => {
- return [
- HTTP_PROVIDERS,
- AlfrescoSettingsService,
- AlfrescoAuthenticationService,
- WidgetVisibilityService
- ];
- });
+ it('can instantiate service when inject service',
+ inject([WidgetVisibilityService], (service: WidgetVisibilityService) => {
+ expect(service instanceof WidgetVisibilityService).toBe(true);
+ }));
- beforeEach(
- inject([WidgetVisibilityService], (activitiService: WidgetVisibilityService) => {
- jasmine.Ajax.install();
- service = activitiService;
- })
- );
+ it('can instantiate service with "new"', inject([Http], (http: Http) => {
+ expect(http).not.toBeNull('http should be provided');
+ let service = new WidgetVisibilityService(http, null);
+ expect(service instanceof WidgetVisibilityService).toBe(true, 'new service should be ok');
+ }));
- afterEach(() => {
- jasmine.Ajax.uninstall();
- });
- it('should return the process variables for task', (done) => {
- service.getTaskProcessVariableModelsForTask(9999).subscribe(
- (res: TaskProcessVariableModel[]) => {
- expect(res).toBeDefined();
- expect(res.length).toEqual(3);
- expect(res[0].id).toEqual('TEST_VAR_1');
- expect(res[0].type).toEqual('string');
- expect(res[0].value).toEqual('test_value_1');
- done();
- }
- );
+ it('can provide the mockBackend as XHRBackend',
+ inject([XHRBackend], (backend: MockBackend) => {
+ expect(backend).not.toBeNull('backend should be provided');
+ }));
- jasmine.Ajax.requests.mostRecent().respondWith({
- 'status': 200,
- contentType: 'application/json',
- responseText: JSON.stringify(fakeTaskProcessVariableModels)
+ describe('when service is ready', () => {
+ let backend: MockBackend;
+ let service: WidgetVisibilityService;
+
+ beforeEach(inject([Http, XHRBackend, AlfrescoSettingsService],
+ (http: Http,
+ be: MockBackend,
+ setting: AlfrescoSettingsService) => {
+ backend = be;
+ service = new WidgetVisibilityService(http, setting);
+ }));
+
+ it('should evaluate logic operation for two values', () => {
+ let res: boolean;
+
+ res = service.evaluateLogicalOperation( 'or', true, false);
+
+ expect(res).toBeTruthy();
+
+ res = service.evaluateLogicalOperation( 'and', true, true);
+
+ expect(res).toBeTruthy();
+
+ res = service.evaluateLogicalOperation( 'and-not', true, false);
+
+ expect(res).toBeTruthy();
+
+ res = service.evaluateLogicalOperation( 'or-not', true, true );
+
+ expect(res).toBeTruthy();
+
+ res = service.evaluateLogicalOperation( 'or', false, false );
+
+ expect(res).toBeFalsy();
+
+ res = service.evaluateLogicalOperation( 'and', true, false );
+
+ expect(res).toBeFalsy();
+
+ res = service.evaluateLogicalOperation( 'and-not', false, false );
+
+ expect(res).toBeFalsy();
+
+ res = service.evaluateLogicalOperation( 'or-not', false, true );
+
+ expect(res).toBeFalsy();
});
- });
- it('should evaluate logic operation for two values', () => {
- let res: boolean;
+ it('should evaluate string operation for two values', () => {
+ let res: boolean;
- res = service.evaluateLogicalOperation( 'or', true, false);
+ res = service.evaluateCondition( 'test', 'test', '==');
- expect(res).toBeTruthy();
+ expect(res).toBeTruthy();
- res = service.evaluateLogicalOperation( 'and', true, true);
+ res = service.evaluateCondition( 1, 2, '<');
- expect(res).toBeTruthy();
+ expect(res).toBeTruthy();
- res = service.evaluateLogicalOperation( 'and not', true, false);
+ res = service.evaluateCondition( true, false, '!=' );
- expect(res).toBeTruthy();
+ expect(res).toBeTruthy();
- res = service.evaluateLogicalOperation( 'or not', true, true );
+ res = service.evaluateCondition( 2, 3, '>' );
- expect(res).toBeTruthy();
+ expect(res).toBeFalsy();
- res = service.evaluateLogicalOperation( 'or', false, false );
+ res = service.evaluateCondition( 2, 2, '>=' );
- expect(res).toBeFalsy();
+ expect(res).toBeTruthy();
- res = service.evaluateLogicalOperation( 'and', true, false );
+ res = service.evaluateCondition( 4, 2, '<=' );
- expect(res).toBeFalsy();
+ expect(res).toBeFalsy();
- res = service.evaluateLogicalOperation( 'and not', false, false );
+ res = service.evaluateCondition( null, null, 'empty' );
- expect(res).toBeFalsy();
+ expect(res).toBeTruthy();
- res = service.evaluateLogicalOperation( 'or not', false, true );
+ res = service.evaluateCondition( '', '', 'empty' );
- expect(res).toBeFalsy();
- });
+ expect(res).toBeTruthy();
- it('should evaluate string operation for two values', () => {
- let res: boolean;
+ res = service.evaluateCondition( null, null, '!empty' );
- res = service.evaluateCondition( 'test', 'test', '==');
+ expect(res).toBeFalsy();
- expect(res).toBeTruthy();
+ res = service.evaluateCondition( '', '', '!empty' );
- res = service.evaluateCondition( 1, 2, '<');
+ expect(res).toBeFalsy();
+ });
- expect(res).toBeTruthy();
+ it('should return the process variables for task', (done) => {
+ let options = new ResponseOptions({status: 200,
+ body: fakeTaskProcessVariableModels });
+ let response = new Response(options);
+ backend.connections.subscribe((c: MockConnection) => c.mockRespond(response));
- res = service.evaluateCondition( true, false, '!=' );
- expect(res).toBeTruthy();
+ service.getTaskProcessVariableModelsForTask('9999').subscribe(
+ (res: TaskProcessVariableModel[]) => {
+ expect(res).toBeDefined();
+ expect(res.length).toEqual(3);
+ expect(res[0].id).toEqual('TEST_VAR_1');
+ expect(res[0].type).toEqual('string');
+ expect(res[0].value).toEqual('test_value_1');
+ done();
+ }
+ );
+ });
- res = service.evaluateCondition( 2, 3, '>' );
+ it('should be able to retrieve the value of a process variable', (done) => {
+ let options = new ResponseOptions({status: 200,
+ body: fakeTaskProcessVariableModels });
+ let response = new Response(options);
+ backend.connections.subscribe((c: MockConnection) => c.mockRespond(response));
- expect(res).toBeFalsy();
+ service.getTaskProcessVariableModelsForTask('9999').subscribe(
+ (res: TaskProcessVariableModel[]) => {
+ expect(res).toBeDefined();
+ let varValue = service.getValueFromVariable(formTest, 'TEST_VAR_1', res);
+ expect(varValue).not.toBeUndefined();
+ expect(varValue).toBe('test_value_1');
+ done();
+ }
+ );
+ });
- res = service.evaluateCondition( 2, 2, '>=' );
+ it('should be able to retrieve the value of a form variable', () => {
+ let fakeForm = new FormModel({variables: [
+ { name: 'FORM_VARIABLE_TEST',
+ type: 'string',
+ value: 'form_value_test' }
+ ]});
+ let varValue = service.getValueFromVariable(fakeForm, 'FORM_VARIABLE_TEST', null);
- expect(res).toBeTruthy();
+ expect(varValue).not.toBeUndefined();
+ expect(varValue).toBe('form_value_test');
+ });
- res = service.evaluateCondition( 4, 2, '<=' );
+ it('should return undefined if the variable does not exist', (done) => {
+ let options = new ResponseOptions({status: 200,
+ body: fakeTaskProcessVariableModels });
+ let response = new Response(options);
+ backend.connections.subscribe((c: MockConnection) => c.mockRespond(response));
- expect(res).toBeFalsy();
+ service.getTaskProcessVariableModelsForTask('9999').subscribe(
+ (res: TaskProcessVariableModel[]) => {
+ let varValue = service.getValueFromVariable(formTest, 'TEST_MYSTERY_VAR', res);
+ expect(varValue).toBeUndefined();
+ done();
+ }
+ );
+ });
- res = service.evaluateCondition( null, null, 'empty' );
+ it('should be able to retrieve a field value searching in the form', () => {
+ let stubFormWithFields = new FormModel(fakeFormJson);
+ let formValue = service.getFormValueByName(stubFormWithFields, 'FIELD_WITH_CONDITION');
- expect(res).toBeTruthy();
+ expect(formValue).not.toBeNull();
+ expect(formValue).toBe('field_with_condition_value');
+ });
- res = service.evaluateCondition( '', '', 'empty' );
+ it('should return undefined if the field value is not in the form', () => {
+ let stubFormWithFields = new FormModel(fakeFormJson);
- expect(res).toBeTruthy();
+ let formValue = service.getFormValueByName(stubFormWithFields, 'FIELD_MYSTERY');
- res = service.evaluateCondition( null, null, '!empty' );
+ expect(formValue).toBeUndefined();
+ });
- expect(res).toBeFalsy();
+ it('should take the value from form values if it is present', () => {
+ formTest.values = formValues;
- res = service.evaluateCondition( '', '', '!empty' );
+ let formValue = service.getValueOField(formTest, 'test_1');
- expect(res).toBeFalsy();
- });
+ expect(formValue).not.toBeNull();
+ expect(formValue).toBe('value_1');
+ });
+
+ it('should search in the form if element value is not in form values', () => {
+ let fakeFormWithField = new FormModel(fakeFormJson);
+ fakeFormWithField.values = formValues;
+
+ let value = service.getValueOField(fakeFormWithField, 'FIELD_WITH_CONDITION');
+
+ expect(value).not.toBeNull();
+ expect(value).toBe('field_with_condition_value');
+ });
+
+ it('should return undefined if the element is not present anywhere', () => {
+ let fakeFormWithField = new FormModel(fakeFormJson);
+ fakeFormWithField.values = formValues;
+
+ let formValue = service.getValueOField(fakeFormWithField, 'FIELD_MYSTERY');
+
+ expect(formValue).toBeUndefined();
+ });
+
+ it('should retrieve the value for the right field when it is a value', () => {
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.rightValue = '100';
+
+ let rightValue = service.getRightValue(formTest, visibilityObjTest);
+
+ expect(rightValue).toBe('100');
+ });
+
+ it('should retrieve the value for the right field when it is a process variable', (done) => {
+ let options = new ResponseOptions({status: 200,
+ body: fakeTaskProcessVariableModels });
+ let response = new Response(options);
+ backend.connections.subscribe((c: MockConnection) => c.mockRespond(response));
+
+ service.getTaskProcessVariableModelsForTask('9999').subscribe(
+ (res: TaskProcessVariableModel[]) => {
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.rightRestResponseId = 'TEST_VAR_2';
+
+ let rightValue = service.getRightValue(formTest, visibilityObjTest);
+
+ expect(rightValue).not.toBeNull();
+ expect(rightValue).toBe('test_value_2');
+ done();
+ }
+ );
+ });
+ it('should retrieve the value for the right field when it is a form variable', () => {
+ let fakeFormWithField = new FormModel(fakeFormJson);
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.rightFormFieldId = 'RIGHT_FORM_FIELD_ID';
- it('should be able to retrieve the value of a process variable', (done) => {
- service.getTaskProcessVariableModelsForTask(9999).subscribe(
- (res: TaskProcessVariableModel[]) => {
- expect(res).toBeDefined();
- let varValue = service.getValueFromVariable(formTest, 'TEST_VAR_1', res);
- expect(varValue).not.toBeUndefined();
- expect(varValue).toBe('test_value_1');
- done();
- }
- );
- jasmine.Ajax.requests.mostRecent().respondWith({
- 'status': 200,
- contentType: 'application/json',
- responseText: JSON.stringify(fakeTaskProcessVariableModels)
- });
- });
+ let rightValue = service.getRightValue(fakeFormWithField, visibilityObjTest);
- it('should be able to retrieve the value of a form variable', () => {
- let fakeForm = new FormModel({variables: [
- { name: 'FORM_VARIABLE_TEST',
- type: 'string',
- value: 'form_value_test' }
- ]});
- let varValue = service.getValueFromVariable(fakeForm, 'FORM_VARIABLE_TEST', null);
+ expect(rightValue).not.toBeNull();
+ expect(rightValue).toBe('RIGHT_FORM_FIELD_VALUE');
+ });
- expect(varValue).not.toBeUndefined();
- expect(varValue).toBe('form_value_test');
- });
+ it('should retrieve right value from form values if it is present', () => {
+ formTest.values = formValues;
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.rightFormFieldId = 'test_2';
+ let rightValue = service.getRightValue(formTest, visibilityObjTest);
- it('should return undefined if the variable does not exist', (done) => {
- service.getTaskProcessVariableModelsForTask(9999).subscribe(
- (res: TaskProcessVariableModel[]) => {
- let varValue = service.getValueFromVariable(formTest, 'TEST_MYSTERY_VAR', res);
- expect(varValue).toBeUndefined();
- done();
- }
- );
- jasmine.Ajax.requests.mostRecent().respondWith({
- 'status': 200,
- contentType: 'application/json',
- responseText: JSON.stringify(fakeTaskProcessVariableModels)
- });
+ expect(rightValue).not.toBeNull();
+ expect(formTest.values).toEqual(formValues);
+ expect(rightValue).toBe('value_2');
+ });
+ it('should return undefined for a value that is not on variable or form', () => {
+ let fakeFormWithField = new FormModel(fakeFormJson);
+ fakeFormWithField.values = formValues;
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.rightFormFieldId = 'NO_FIELD_FORM';
- });
+ let rightValue = service.getRightValue(fakeFormWithField, visibilityObjTest);
+ expect(rightValue).toBeUndefined();
+ });
- it('should be able to retrieve a field value searching in the form', () => {
- let stubFormWithFields = new FormModel(fakeFormJson);
- let formValue = service.getFormValueByName(stubFormWithFields, 'FIELD_WITH_CONDITION');
+ it('should retrieve the value for the left field when it is a process variable', (done) => {
+ let options = new ResponseOptions({status: 200,
+ body: fakeTaskProcessVariableModels });
+ let response = new Response(options);
+ backend.connections.subscribe((c: MockConnection) => c.mockRespond(response));
- expect(formValue).not.toBeNull();
- expect(formValue).toBe('field_with_condition_value');
- });
-
- it('should return undefined if the field value is not in the form', () => {
- let stubFormWithFields = new FormModel(fakeFormJson);
-
- let formValue = service.getFormValueByName(stubFormWithFields, 'FIELD_MYSTERY');
-
- expect(formValue).toBeUndefined();
- });
-
- it('should take the value from form values if it is present', () => {
- formTest.values = formValues;
-
- let formValue = service.getValueOField(formTest, 'test_1');
-
- expect(formValue).not.toBeNull();
- expect(formValue).toBe('value_1');
- });
-
- it('should search in the form if element value is not in form values', () => {
- let fakeFormWithField = new FormModel(fakeFormJson);
- fakeFormWithField.values = formValues;
-
- let value = service.getValueOField(fakeFormWithField, 'FIELD_WITH_CONDITION');
-
- expect(value).not.toBeNull();
- expect(value).toBe('field_with_condition_value');
- });
-
- it('should return undefined if the element is not present anywhere', () => {
- let fakeFormWithField = new FormModel(fakeFormJson);
- fakeFormWithField.values = formValues;
-
- let formValue = service.getValueOField(fakeFormWithField, 'FIELD_MYSTERY');
-
- expect(formValue).toBeUndefined();
- });
-
- it('should retrieve the value for the right field when it is a value', () => {
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.rightValue = '100';
-
- let rightValue = service.getRightValue(formTest, visibilityObjTest);
-
- expect(rightValue).toBe('100');
- });
-
- it('should retrieve the value for the right field when it is a process variable', (done) => {
- service.getTaskProcessVariableModelsForTask(9999).subscribe(
- (res: TaskProcessVariableModel[]) => {
+ service.getTaskProcessVariableModelsForTask('9999').subscribe(
+ (res: TaskProcessVariableModel[]) => {
let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.rightRestResponseId = 'TEST_VAR_2';
+ visibilityObjTest.leftRestResponseId = 'TEST_VAR_2';
- let rightValue = service.getRightValue(formTest, visibilityObjTest);
+ let rightValue = service.getLeftValue(formTest, visibilityObjTest);
expect(rightValue).not.toBeNull();
expect(rightValue).toBe('test_value_2');
done();
- }
- );
- jasmine.Ajax.requests.mostRecent().respondWith({
- 'status': 200,
- contentType: 'application/json',
- responseText: JSON.stringify(fakeTaskProcessVariableModels)
- });
- });
+ }
+ );
+ });
- it('should retrieve the value for the right field when it is a form variable', () => {
- let fakeFormWithField = new FormModel(fakeFormJson);
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.rightFormFieldId = 'RIGHT_FORM_FIELD_ID';
+ it('should retrieve the value for the left field when it is a form variable', () => {
+ let fakeForm = new FormModel({variables: [
+ { name: 'FORM_VARIABLE_TEST',
+ type: 'string',
+ value: 'form_value_test' }
+ ]});
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.leftRestResponseId = 'FORM_VARIABLE_TEST';
- let rightValue = service.getRightValue(fakeFormWithField, visibilityObjTest);
+ let leftValue = service.getLeftValue(fakeForm, visibilityObjTest);
- expect(rightValue).not.toBeNull();
- expect(rightValue).toBe('RIGHT_FORM_FIELD_VALUE');
- });
+ expect(leftValue).not.toBeNull();
+ expect(leftValue).toBe('form_value_test');
+ });
- it('should retrieve right value from form values if it is present', () => {
- formTest.values = formValues;
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.rightFormFieldId = 'test_2';
+ it('should retrieve the value for the left field when it is a form value', () => {
+ let fakeFormWithField = new FormModel(fakeFormJson);
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.leftFormFieldId = 'FIELD_WITH_CONDITION';
- let rightValue = service.getRightValue(formTest, visibilityObjTest);
+ let leftValue = service.getLeftValue(fakeFormWithField, visibilityObjTest);
- expect(rightValue).not.toBeNull();
- expect(formTest.values).toEqual(formValues);
- expect(rightValue).toBe('value_2');
- });
+ expect(leftValue).not.toBeNull();
+ expect(leftValue).toBe('field_with_condition_value');
+ });
- it('should return undefined for a value that is not on variable or form', () => {
- let fakeFormWithField = new FormModel(fakeFormJson);
- fakeFormWithField.values = formValues;
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.rightFormFieldId = 'NO_FIELD_FORM';
+ it('should retrieve left value from form values if it is present', () => {
+ formTest.values = formValues;
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.leftFormFieldId = 'test_2';
- let rightValue = service.getRightValue(fakeFormWithField, visibilityObjTest);
+ let leftValue = service.getLeftValue(formTest, visibilityObjTest);
- expect(rightValue).toBeUndefined();
- });
+ expect(leftValue).not.toBeNull();
+ expect(leftValue).toBe('value_2');
+ });
- it('should retrieve the value for the left field when it is a process variable', (done) => {
- service.getTaskProcessVariableModelsForTask(9999).subscribe(
- (res: TaskProcessVariableModel[]) => {
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.leftRestResponseId = 'TEST_VAR_2';
+ it('should return undefined for a value that is not on variable or form', () => {
+ let fakeFormWithField = new FormModel(fakeFormJson);
+ let visibilityObjTest = new WidgetVisibilityModel();
- let rightValue = service.getLeftValue(formTest, visibilityObjTest);
+ let leftValue = service.getLeftValue(fakeFormWithField, visibilityObjTest);
- expect(rightValue).not.toBeNull();
- expect(rightValue).toBe('test_value_2');
- done();
- }
- );
- jasmine.Ajax.requests.mostRecent().respondWith({
- 'status': 200,
- contentType: 'application/json',
- responseText: JSON.stringify(fakeTaskProcessVariableModels)
- });
- });
+ expect(leftValue).toBeUndefined();
+ });
- it('should retrieve the value for the left field when it is a form variable', () => {
- let fakeForm = new FormModel({variables: [
- { name: 'FORM_VARIABLE_TEST',
- type: 'string',
- value: 'form_value_test' }
- ]});
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.leftRestResponseId = 'FORM_VARIABLE_TEST';
+ it('should evaluate the visibility for the field with single visibility condition between two field values', () => {
+ formTest.values = formValues;
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.leftFormFieldId = 'test_1';
+ visibilityObjTest.operator = '==';
+ visibilityObjTest.rightFormFieldId = 'test_3';
- let leftValue = service.getLeftValue(fakeForm, visibilityObjTest);
+ let isVisible = service.evaluateVisibilityForField(formTest, visibilityObjTest);
- expect(leftValue).not.toBeNull();
- expect(leftValue).toBe('form_value_test');
- });
+ expect(isVisible).toBeTruthy();
+ });
- it('should retrieve the value for the left field when it is a form value', () => {
- let fakeFormWithField = new FormModel(fakeFormJson);
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.leftFormFieldId = 'FIELD_WITH_CONDITION';
+ it('should evaluate true visibility for the field with single visibility condition between a field and a value', () => {
+ formTest.values = formValues;
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.leftFormFieldId = 'test_1';
+ visibilityObjTest.operator = '==';
+ visibilityObjTest.rightValue = 'value_1';
- let leftValue = service.getLeftValue(fakeFormWithField, visibilityObjTest);
+ let isVisible = service.evaluateVisibilityForField(formTest, visibilityObjTest);
- expect(leftValue).not.toBeNull();
- expect(leftValue).toBe('field_with_condition_value');
- });
+ expect(isVisible).toBeTruthy();
+ });
- it('should retrieve left value from form values if it is present', () => {
- formTest.values = formValues;
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.leftFormFieldId = 'test_2';
+ it('should evaluate the visibility for the field with single visibility condition between form values', () => {
+ let fakeFormWithField = new FormModel(fakeFormJson);
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.leftFormFieldId = 'LEFT_FORM_FIELD_ID';
+ visibilityObjTest.operator = '!=';
+ visibilityObjTest.rightFormFieldId = 'RIGHT_FORM_FIELD_ID';
- let leftValue = service.getLeftValue(formTest, visibilityObjTest);
+ let isVisible = service.evaluateVisibilityForField(fakeFormWithField, visibilityObjTest);
- expect(leftValue).not.toBeNull();
- expect(leftValue).toBe('value_2');
- });
+ expect(isVisible).toBeTruthy();
+ });
- it('should return undefined for a value that is not on variable or form', () => {
- let fakeFormWithField = new FormModel(fakeFormJson);
- let visibilityObjTest = new WidgetVisibilityModel();
+ it('should evaluate the visibility for the field between form value and process var', (done) => {
+ let options = new ResponseOptions({status: 200,
+ body: fakeTaskProcessVariableModels });
+ let response = new Response(options);
+ backend.connections.subscribe((c: MockConnection) => c.mockRespond(response));
- let leftValue = service.getLeftValue(fakeFormWithField, visibilityObjTest);
+ service.getTaskProcessVariableModelsForTask('9999').subscribe(
+ (res: TaskProcessVariableModel[]) => {
+ let fakeFormWithField = new FormModel(fakeFormJson);
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.leftFormFieldId = 'LEFT_FORM_FIELD_ID';
+ visibilityObjTest.operator = '!=';
+ visibilityObjTest.rightRestResponseId = 'TEST_VAR_2';
- expect(leftValue).toBeUndefined();
- });
+ let isVisible = service.evaluateVisibilityForField(fakeFormWithField, visibilityObjTest);
- it('should evaluate the visibility for the field with single visibility condition between two field values', () => {
- formTest.values = formValues;
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.leftFormFieldId = 'test_1';
- visibilityObjTest.operator = '==';
- visibilityObjTest.rightFormFieldId = 'test_3';
+ expect(isVisible).toBeTruthy();
+ done();
+ }
+ );
+ });
- let isVisible = service.evaluateVisibilityForField(formTest, visibilityObjTest);
+ it('should evaluate visibility with multiple conditions', (done) => {
+ let options = new ResponseOptions({status: 200,
+ body: fakeTaskProcessVariableModels });
+ let response = new Response(options);
+ backend.connections.subscribe((c: MockConnection) => c.mockRespond(response));
- expect(isVisible).toBeTruthy();
- });
+ service.getTaskProcessVariableModelsForTask('9999').subscribe(
+ (res: TaskProcessVariableModel[]) => {
+ let fakeFormWithField = new FormModel(fakeFormJson);
+ let visibilityObjTest = new WidgetVisibilityModel();
+ let chainedVisibilityObj = new WidgetVisibilityModel();
+ visibilityObjTest.leftFormFieldId = 'LEFT_FORM_FIELD_ID';
+ visibilityObjTest.operator = '!=';
+ visibilityObjTest.rightRestResponseId = 'TEST_VAR_2';
+ visibilityObjTest.nextConditionOperator = 'and';
+ chainedVisibilityObj.leftRestResponseId = 'TEST_VAR_2';
+ chainedVisibilityObj.operator = '!empty';
+ visibilityObjTest.nextCondition = chainedVisibilityObj;
- it('should evaluate true visibility for the field with single visibility condition between a field and a value', () => {
- formTest.values = formValues;
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.leftFormFieldId = 'test_1';
- visibilityObjTest.operator = '==';
- visibilityObjTest.rightValue = 'value_1';
+ let isVisible = service.evaluateVisibilityForField(fakeFormWithField, visibilityObjTest);
- let isVisible = service.evaluateVisibilityForField(formTest, visibilityObjTest);
+ expect(isVisible).toBeTruthy();
+ done();
+ }
+ );
+ });
- expect(isVisible).toBeTruthy();
- });
+ it('should return true when the visibility condition is not valid', () => {
+ let visibilityObjTest = new WidgetVisibilityModel();
+ visibilityObjTest.leftFormFieldId = '';
+ visibilityObjTest.leftRestResponseId = '';
+ visibilityObjTest.operator = '!=';
- it('should evaluate the visibility for the field with single visibility condition between form values', () => {
- let fakeFormWithField = new FormModel(fakeFormJson);
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.leftFormFieldId = 'LEFT_FORM_FIELD_ID';
- visibilityObjTest.operator = '!=';
- visibilityObjTest.rightFormFieldId = 'RIGHT_FORM_FIELD_ID';
+ let isVisible = service.getVisiblityForField(formTest, visibilityObjTest);
- let isVisible = service.evaluateVisibilityForField(fakeFormWithField, visibilityObjTest);
+ expect(isVisible).toBeTruthy();
+ });
- expect(isVisible).toBeTruthy();
- });
+ it('should refresh the visibility for a form field object', () => {
+ let fakeFormWithField = new FormModel(fakeFormJson);
+ let visibilityObjTest = new WidgetVisibilityModel();
+ fakeFormWithField.values = formValues;
+ visibilityObjTest.leftFormFieldId = 'test_1';
+ visibilityObjTest.operator = '!=';
+ visibilityObjTest.rightFormFieldId = 'test_3';
+ let jsonFieldFake = {id: 'FAKE_FORM_FIELD_ID', value: 'FAKE_FORM_FIELD_VALUE', visibilityCondition: visibilityObjTest};
+ let fakeFormField: FormFieldModel = new FormFieldModel(fakeFormWithField, jsonFieldFake);
- it('should evaluate the visibility for the field between form value and process var', (done) => {
- service.getTaskProcessVariableModelsForTask(9999).subscribe(
- (res: TaskProcessVariableModel[]) => {
- let fakeFormWithField = new FormModel(fakeFormJson);
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.leftFormFieldId = 'LEFT_FORM_FIELD_ID';
- visibilityObjTest.operator = '!=';
- visibilityObjTest.rightRestResponseId = 'TEST_VAR_2';
+ service.refreshVisibilityForField(fakeFormField);
- let isVisible = service.evaluateVisibilityForField(fakeFormWithField, visibilityObjTest);
+ expect(fakeFormField.isVisible).toBeFalsy();
+ });
- expect(isVisible).toBeTruthy();
- done();
- }
- );
- jasmine.Ajax.requests.mostRecent().respondWith({
- 'status': 200,
- contentType: 'application/json',
- responseText: JSON.stringify(fakeTaskProcessVariableModels)
- });
- });
-
-
- it('should evaluate visibility with multiple conditions', (done) => {
- service.getTaskProcessVariableModelsForTask(9999).subscribe(
- (res: TaskProcessVariableModel[]) => {
- let fakeFormWithField = new FormModel(fakeFormJson);
- let visibilityObjTest = new WidgetVisibilityModel();
- let chainedVisibilityObj = new WidgetVisibilityModel();
- visibilityObjTest.leftFormFieldId = 'LEFT_FORM_FIELD_ID';
- visibilityObjTest.operator = '!=';
- visibilityObjTest.rightRestResponseId = 'TEST_VAR_2';
- visibilityObjTest.nextConditionOperator = 'and';
- chainedVisibilityObj.leftRestResponseId = 'TEST_VAR_2';
- chainedVisibilityObj.operator = '!empty';
- visibilityObjTest.nextCondition = chainedVisibilityObj;
-
- let isVisible = service.evaluateVisibilityForField(fakeFormWithField, visibilityObjTest);
-
- expect(isVisible).toBeTruthy();
- done();
- }
- );
- jasmine.Ajax.requests.mostRecent().respondWith({
- 'status': 200,
- contentType: 'application/json',
- responseText: JSON.stringify(fakeTaskProcessVariableModels)
- });
- });
-
- it('should return true when the visibility condition is not valid', () => {
- let visibilityObjTest = new WidgetVisibilityModel();
- visibilityObjTest.leftFormFieldId = '';
- visibilityObjTest.leftRestResponseId = '';
- visibilityObjTest.operator = '!=';
-
- let isVisible = service.getVisiblityForField(formTest, visibilityObjTest);
-
- expect(isVisible).toBeTruthy();
- });
-
- it('should refresh the visibility for a form field object', () => {
- let fakeFormWithField = new FormModel(fakeFormJson);
- let visibilityObjTest = new WidgetVisibilityModel();
- fakeFormWithField.values = formValues;
- visibilityObjTest.leftFormFieldId = 'test_1';
- visibilityObjTest.operator = '!=';
- visibilityObjTest.rightFormFieldId = 'test_3';
- let jsonFieldFake = {id: 'FAKE_FORM_FIELD_ID', value: 'FAKE_FORM_FIELD_VALUE', visibilityCondition: visibilityObjTest};
- let fakeFormField: FormFieldModel = new FormFieldModel(fakeFormWithField, jsonFieldFake);
-
- service.refreshVisibilityForField(fakeFormField);
-
- expect(fakeFormField.isVisible).toBeFalsy();
- });
-
- it('should not change the isVisible if field does not have visibility condition', () => {
- let fakeFormWithField = new FormModel(fakeFormJson);
- let jsonFieldFake = {id: 'FAKE_FORM_FIELD_ID',
- value: 'FAKE_FORM_FIELD_VALUE',
- visibilityCondition: null
- };
- let fakeFormField: FormFieldModel = new FormFieldModel(fakeFormWithField, jsonFieldFake);
- fakeFormField.isVisible = false;
- service.refreshVisibilityForField(fakeFormField);
- expect(fakeFormField.isVisible).toBeFalsy();
- });
+ it('should not change the isVisible if field does not have visibility condition', () => {
+ let fakeFormWithField = new FormModel(fakeFormJson);
+ let jsonFieldFake = {id: 'FAKE_FORM_FIELD_ID',
+ value: 'FAKE_FORM_FIELD_VALUE',
+ visibilityCondition: null
+ };
+ let fakeFormField: FormFieldModel = new FormFieldModel(fakeFormWithField, jsonFieldFake);
+ fakeFormField.isVisible = false;
+ service.refreshVisibilityForField(fakeFormField);
+ expect(fakeFormField.isVisible).toBeFalsy();
+ });
+ });
});
-*/
diff --git a/ng2-components/ng2-activiti-form/src/services/widget-visibility.service.ts b/ng2-components/ng2-activiti-form/src/services/widget-visibility.service.ts
index ae7a235960..92fe09b032 100644
--- a/ng2-components/ng2-activiti-form/src/services/widget-visibility.service.ts
+++ b/ng2-components/ng2-activiti-form/src/services/widget-visibility.service.ts
@@ -19,7 +19,7 @@ import { Injectable } from '@angular/core';
import { Response, Http, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import { AlfrescoSettingsService } from 'ng2-alfresco-core';
-import { FormModel, FormFieldModel } from '../components/widgets/core/index';
+import { FormModel, FormFieldModel, TabModel } from '../components/widgets/core/index';
import { WidgetVisibilityModel } from '../models/widget-visibility.model';
import { TaskProcessVariableModel } from '../models/task-process-variable.model';
@@ -33,6 +33,9 @@ export class WidgetVisibilityService {
}
public updateVisibilityForForm(form: FormModel) {
+ if ( form && form.tabs && form.tabs.length > 0) {
+ form.tabs.map( tabModel => this.refreshVisibilityForTab(tabModel) );
+ }
if ( form && form.fields.length > 0 ) {
form.fields
.map(
@@ -55,16 +58,22 @@ export class WidgetVisibilityService {
}
}
+ public refreshVisibilityForTab(tab: TabModel) {
+ if ( tab.visibilityCondition ) {
+ tab.isVisible = this.getVisiblityForField(tab.form, tab.visibilityCondition);
+ }
+ }
+
public getVisiblityForField(form: FormModel, visibilityObj: WidgetVisibilityModel): boolean {
let isLeftFieldPresent = visibilityObj.leftFormFieldId || visibilityObj.leftRestResponseId;
- if ( !isLeftFieldPresent ) {
+ if ( !isLeftFieldPresent || isLeftFieldPresent === 'null' ) {
return true;
}else {
return this.evaluateVisibilityForField(form, visibilityObj);
}
}
- private evaluateVisibilityForField(form: FormModel, visibilityObj: WidgetVisibilityModel): boolean {
+ evaluateVisibilityForField(form: FormModel, visibilityObj: WidgetVisibilityModel): boolean {
let leftValue = this.getLeftValue(form, visibilityObj);
let rightValue = this.getRightValue(form, visibilityObj);
let actualResult = this.evaluateCondition(leftValue, rightValue, visibilityObj.operator);
@@ -79,14 +88,14 @@ export class WidgetVisibilityService {
}
}
- private getLeftValue(form: FormModel, visibilityObj: WidgetVisibilityModel) {
+ getLeftValue(form: FormModel, visibilityObj: WidgetVisibilityModel) {
if ( visibilityObj.leftRestResponseId ) {
return this.getValueFromVariable(form, visibilityObj.leftRestResponseId, this.processVarList);
}
return this.getValueOField(form, visibilityObj.leftFormFieldId);
}
- private getRightValue(form: FormModel, visibilityObj: WidgetVisibilityModel) {
+ getRightValue(form: FormModel, visibilityObj: WidgetVisibilityModel) {
let valueFound = null;
if ( visibilityObj.rightRestResponseId ) {
valueFound = this.getValueFromVariable(form, visibilityObj.rightRestResponseId, this.processVarList);
@@ -98,14 +107,14 @@ export class WidgetVisibilityService {
return valueFound;
}
- private getValueOField(form: FormModel, field: string) {
+ getValueOField(form: FormModel, field: string) {
let value = form.values[field] ?
form.values[field] :
this.getFormValueByName(form, field);
return value;
}
- private getFormValueByName(form: FormModel, name: string) {
+ getFormValueByName(form: FormModel, name: string) {
for (let columns of form.json.fields) {
for ( let i in columns.fields ) {
if ( columns.fields.hasOwnProperty( i ) ) {
@@ -118,7 +127,7 @@ export class WidgetVisibilityService {
}
}
- private getValueFromVariable( form: FormModel, name: string, processVarList: TaskProcessVariableModel[] ) {
+ getValueFromVariable( form: FormModel, name: string, processVarList: TaskProcessVariableModel[] ) {
return this.getFormVariableValue(form, name) ||
this.getProcessVariableValue(name, processVarList);
}
@@ -141,30 +150,30 @@ export class WidgetVisibilityService {
}
}
- private evaluateLogicalOperation(logicOp, previousValue, newValue): boolean {
+ evaluateLogicalOperation(logicOp, previousValue, newValue): boolean {
switch ( logicOp ) {
case 'and':
return previousValue && newValue;
case 'or' :
return previousValue || newValue;
- case 'and not':
+ case 'and-not':
return previousValue && !newValue;
- case 'or not':
+ case 'or-not':
return previousValue || !newValue;
default:
- console.error( 'NO valid operation!' );
+ console.error( 'NO valid operation! wrong op request : ' + logicOp );
break;
}
}
- private evaluateCondition(leftValue, rightValue, operator): boolean {
+ evaluateCondition(leftValue, rightValue, operator): boolean {
switch ( operator ) {
case '==':
- return leftValue + '' === rightValue;
+ return String(leftValue) === String(rightValue);
case '<':
return leftValue < rightValue;
case '!=':
- return leftValue + '' !== rightValue;
+ return String(leftValue) !== String(rightValue);
case '>':
return leftValue > rightValue;
case '>=':