Merge pull request #1322 from Alfresco/dev-valbano-1301

#1301 - Improve the process variables evaluation
This commit is contained in:
Mario Romano 2016-12-16 17:42:10 +00:00 committed by GitHub
commit c712cc2c82
11 changed files with 90 additions and 88 deletions

View File

@ -35,11 +35,10 @@ describe('ActivitiForm', () => {
componentHandler = jasmine.createSpyObj('componentHandler', [
'upgradeAllRegistered'
]);
visibilityService = jasmine.createSpyObj('WidgetVisibilityService', [
'refreshVisibility', 'getTaskProcessVariable'
]);
window['componentHandler'] = componentHandler;
visibilityService = new WidgetVisibilityService(null);
spyOn(visibilityService, 'refreshVisibility').and.stub();
formService = new FormService(null, null);
nodeService = new NodeService(null, null);
formComponent = new ActivitiForm(formService, visibilityService, null, nodeService);
@ -139,6 +138,7 @@ describe('ActivitiForm', () => {
it('should get form by task id on load', () => {
spyOn(formComponent, 'getFormByTaskId').and.stub();
spyOn(visibilityService, 'getTaskProcessVariable').and.returnValue(Observable.of({}));
const taskId = '123';
formComponent.taskId = taskId;

View File

@ -280,7 +280,7 @@ export class ActivitiForm implements OnInit, AfterViewChecked, OnChanges {
loadForm() {
if (this.taskId) {
this.getFormByTaskId(this.taskId);
this.visibilityService.getTaskProcessVariable(this.taskId);
this.visibilityService.getTaskProcessVariable(this.taskId).subscribe();
return;
}

View File

@ -38,7 +38,7 @@ describe('DisplayValueWidget', () => {
beforeEach(() => {
settingsService = new AlfrescoSettingsService();
formService = new FormService(null, null);
visibilityService = new WidgetVisibilityService(null, null, null);
visibilityService = new WidgetVisibilityService(null);
widget = new DisplayValueWidget(formService, visibilityService, settingsService);
});

View File

@ -34,7 +34,7 @@ describe('DropdownWidget', () => {
beforeEach(() => {
formService = new FormService(null, null);
visibilityService = new WidgetVisibilityService(null, null, null);
visibilityService = new WidgetVisibilityService(null);
widget = new DropdownWidget(formService, visibilityService);
widget.field = new FormFieldModel(new FormModel());
});

View File

@ -28,7 +28,7 @@ describe('DynamicTableWidget', () => {
beforeEach(() => {
table = new DynamicTableModel(null);
visibilityService = new WidgetVisibilityService(null, null, null);
visibilityService = new WidgetVisibilityService(null);
widget = new DynamicTableWidget(null, visibilityService);
widget.content = table;
});

View File

@ -36,7 +36,7 @@ describe('RadioButtonsWidget', () => {
beforeEach(() => {
formService = new FormService(null, null);
visibilityService = new WidgetVisibilityService(null, null, null);
visibilityService = new WidgetVisibilityService(null);
widget = new RadioButtonsWidget(formService, visibilityService);
widget.field = new FormFieldModel(new FormModel(), { restUrl: '<url>' });
});

View File

@ -35,7 +35,7 @@ describe('TypeaheadWidget', () => {
beforeEach(() => {
formService = new FormService(null, null);
visibilityService = new WidgetVisibilityService(null, null, null);
visibilityService = new WidgetVisibilityService(null);
widget = new TypeaheadWidget(formService, visibilityService);
widget.field = new FormFieldModel(new FormModel({ taskId: 'task-id' }));
});

View File

@ -15,8 +15,8 @@
* limitations under the License.
*/
import { HttpModule } from '@angular/http';
import { TestBed } from '@angular/core/testing';
import { ReflectiveInjector } from '@angular/core';
import { AlfrescoApi } from 'alfresco-js-api';
import {
formTest,
fakeTaskProcessVariableModels,
@ -24,31 +24,41 @@ import {
fakeFormJson
} from './assets/widget-visibility.service.mock';
import { WidgetVisibilityService } from './widget-visibility.service';
import { CoreModule } from 'ng2-alfresco-core';
import {
AlfrescoAuthenticationService,
AlfrescoSettingsService,
AlfrescoApiService,
StorageService
} from 'ng2-alfresco-core';
import { TaskProcessVariableModel } from '../models/task-process-variable.model';
import { WidgetVisibilityModel } from '../models/widget-visibility.model';
import { FormModel, FormFieldModel, TabModel, ContainerModel, FormFieldTypes } from '../components/widgets/core/index';
import { FormService } from './form.service';
declare let jasmine: any;
describe('WidgetVisibilityService', () => {
let service: WidgetVisibilityService;
let service, injector;
let authenticationService: AlfrescoAuthenticationService;
let apiService: AlfrescoApiService;
let alfrescoApi: AlfrescoApi;
let booleanResult: boolean;
let stubFormWithFields = new FormModel(fakeFormJson);
beforeAll(() => {
TestBed.configureTestingModule({
imports: [ HttpModule, CoreModule ],
providers: [
beforeEach(() => {
injector = ReflectiveInjector.resolveAndCreate([
WidgetVisibilityService,
FormService
]
});
service = TestBed.get(WidgetVisibilityService);
AlfrescoSettingsService,
AlfrescoApiService,
AlfrescoAuthenticationService,
StorageService
]);
});
beforeEach(() => {
service = injector.get(WidgetVisibilityService);
authenticationService = injector.get(AlfrescoAuthenticationService);
apiService = injector.get(AlfrescoApiService);
alfrescoApi = apiService.getInstance();
jasmine.Ajax.install();
});
@ -193,7 +203,7 @@ describe('WidgetVisibilityService', () => {
it('should return the process variables for task', (done) => {
service.getTaskProcessVariable('9999').subscribe(
(res: TaskProcessVariableModel[]) => {
(res) => {
expect(res).toBeDefined();
expect(res.length).toEqual(3);
expect(res[0].id).toEqual('TEST_VAR_1');
@ -444,11 +454,10 @@ describe('WidgetVisibilityService', () => {
expect(leftValue).toBe('value_2');
});
it('should return empty string for a value that is not on variable or form', () => {
it('should return undefined for a value that is not on variable or form', () => {
let leftValue = service.getLeftValue(fakeFormWithField, visibilityObjTest);
expect(leftValue).not.toBeUndefined();
expect(leftValue).toBe('');
expect(leftValue).toBeUndefined();
});
it('should evaluate the visibility for the field with single visibility condition between two field values', () => {

View File

@ -16,9 +16,8 @@
*/
import { Injectable } from '@angular/core';
import { Response, Http, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import { AlfrescoSettingsService, AlfrescoAuthenticationService } from 'ng2-alfresco-core';
import { AlfrescoApiService } from 'ng2-alfresco-core';
import {
FormModel,
FormFieldModel,
@ -35,9 +34,7 @@ export class WidgetVisibilityService {
private processVarList: TaskProcessVariableModel[];
constructor(private http: Http,
private alfrescoSettingsService: AlfrescoSettingsService,
private authService: AlfrescoAuthenticationService) {
constructor(private apiService: AlfrescoApiService) {
}
public refreshVisibility(form: FormModel) {
@ -80,10 +77,14 @@ export class WidgetVisibilityService {
}
getLeftValue(form: FormModel, visibilityObj: WidgetVisibilityModel) {
let leftValue = '';
if (visibilityObj.leftRestResponseId && visibilityObj.leftRestResponseId !== 'null') {
return this.getVariableValue(form, visibilityObj.leftRestResponseId, this.processVarList);
leftValue = this.getVariableValue(form, visibilityObj.leftRestResponseId, this.processVarList);
} else {
leftValue = this.getFormValue(form, visibilityObj.leftFormFieldId);
leftValue = leftValue ? leftValue : this.getVariableValue(form, visibilityObj.leftFormFieldId, this.processVarList);
}
return this.getFormValue(form, visibilityObj.leftFormFieldId);
return leftValue;
}
getRightValue(form: FormModel, visibilityObj: WidgetVisibilityModel) {
@ -231,29 +232,21 @@ export class WidgetVisibilityService {
}
getTaskProcessVariable(taskId: string): Observable<TaskProcessVariableModel[]> {
let url = `${this.alfrescoSettingsService.getBPMApiBaseUrl()}/app/rest/task-forms/${taskId}/variables`;
let options = this.getRequestOptions();
return this.http
.get(url, options)
.map((response: Response) => this.processVarList = <TaskProcessVariableModel[]> response.json())
return Observable.fromPromise(this.apiService.getInstance().activiti.taskFormsApi.getTaskFormVariables(taskId))
.map(res => {
let jsonRes = this.toJson(res);
this.processVarList = <TaskProcessVariableModel[]>jsonRes;
return jsonRes;
})
.catch(this.handleError);
}
private getHeaders(): Headers {
return new Headers({
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': this.authService.getTicketBpm()
});
toJson(res: any) {
return res || {};
}
private getRequestOptions(): RequestOptions {
let headers = this.getHeaders();
return new RequestOptions({headers: headers});
}
private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
private handleError() {
console.error('Error while performing a call');
return Observable.throw('Error while performing a call - Server error');
}
}

View File

@ -17,7 +17,6 @@
import { ReflectiveInjector } from '@angular/core';
import { BpmUserService } from '../services/bpm-user.service';
// import { BpmUserModel } from '../models/bpm-user.model';
import { AlfrescoAuthenticationService, AlfrescoApiService, AlfrescoSettingsService, StorageService } from 'ng2-alfresco-core';
import { fakeBpmUser } from '../assets/fake-bpm-user.service.mock';