From d1805226fce78fa44a63dd192d225b3bc188fca1 Mon Sep 17 00:00:00 2001 From: Ardit Domi <32884230+arditdomi@users.noreply.github.com> Date: Wed, 12 Oct 2022 08:43:41 +0100 Subject: [PATCH] =?UTF-8?q?[AAE-10896]=20-=20Fix=20attach=20file=20widget?= =?UTF-8?q?=20destinationFolderPath=20is=20broken=20=E2=80=A6=20(#7888)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [AAE-10896] - Fix attach file widget destinationFolderPath is broken when using string variables * Fix unit tests * Add unit test * Fix linting problems --- .../widgets/core/form-field.model.ts | 27 ++++++------------- .../widgets/core/form.model.spec.ts | 10 +++---- .../components/widgets/core/form.model.ts | 21 ++++++++++----- .../services/widget-visibility.service.ts | 2 +- ...attach-file-cloud-widget.component.spec.ts | 24 ++++++++++++++--- .../attach-file/upload-cloud.widget.ts | 2 +- .../mocks/attach-file-cloud-widget.mock.ts | 5 ++-- 7 files changed, 51 insertions(+), 40 deletions(-) diff --git a/lib/core/src/lib/form/components/widgets/core/form-field.model.ts b/lib/core/src/lib/form/components/widgets/core/form-field.model.ts index f3dfb87db2..921849a1db 100644 --- a/lib/core/src/lib/form/components/widgets/core/form-field.model.ts +++ b/lib/core/src/lib/form/components/widgets/core/form-field.model.ts @@ -201,25 +201,7 @@ export class FormFieldModel extends FormWidgetModel { if (FormFieldTypes.isReadOnlyType(this.type)) { if (this.params && this.params.field) { - let valueFound = false; - - if (form.processVariables) { - const processVariable = this.getProcessVariableValue(this.params.field, form); - - if (processVariable) { - valueFound = true; - this.value = processVariable; - } - } - - if (!valueFound && this.params.responseVariable) { - const defaultValue = form.getFormVariableValue(this.params.field.name); - - if (defaultValue) { - valueFound = true; - this.value = defaultValue; - } - } + this.setValueForReadonlyType(form); } } @@ -244,6 +226,13 @@ export class FormFieldModel extends FormWidgetModel { this.updateForm(); } + private setValueForReadonlyType(form: any) { + const value = this.getProcessVariableValue(this.params.field, form); + if (value) { + this.value = value; + } + } + private getDefaultDateFormat(jsonField: any): string { let originalType = jsonField.type; if (FormFieldTypes.isReadOnlyType(jsonField.type) && diff --git a/lib/core/src/lib/form/components/widgets/core/form.model.spec.ts b/lib/core/src/lib/form/components/widgets/core/form.model.spec.ts index c65760fc7c..6a3755c965 100644 --- a/lib/core/src/lib/form/components/widgets/core/form.model.spec.ts +++ b/lib/core/src/lib/form/components/widgets/core/form.model.spec.ts @@ -540,25 +540,25 @@ describe('FormModel', () => { }); it('should find a form variable value', () => { - const result1 = form.getFormVariableValue('name1'); - const result2 = form.getFormVariableValue('bfca9766-7bc1-45cc-8ecf-cdad551e36e2'); + const result1 = form.getDefaultFormVariableValue('name1'); + const result2 = form.getDefaultFormVariableValue('bfca9766-7bc1-45cc-8ecf-cdad551e36e2'); expect(result1).toEqual(result2); expect(result1).toEqual('hello'); }); it('should convert the date variable value', () => { - const value = form.getFormVariableValue('name2'); + const value = form.getDefaultFormVariableValue('name2'); expect(value).toBe('29.09.2019T00:00:00.000Z'); }); it('should convert the boolean variable value', () => { - const value = form.getFormVariableValue('bool'); + const value = form.getDefaultFormVariableValue('bool'); expect(value).toEqual(true); }); it('should not find variable value', () => { - const value = form.getFormVariableValue('missing'); + const value = form.getDefaultFormVariableValue('missing'); expect(value).toBeUndefined(); }); diff --git a/lib/core/src/lib/form/components/widgets/core/form.model.ts b/lib/core/src/lib/form/components/widgets/core/form.model.ts index 7f86243dfc..a9eb5f2e79 100644 --- a/lib/core/src/lib/form/components/widgets/core/form.model.ts +++ b/lib/core/src/lib/form/components/widgets/core/form.model.ts @@ -264,7 +264,7 @@ export class FormModel implements ProcessFormModel { * * @param identifier The `name` or `id` value */ - getFormVariableValue(identifier: string): any { + getDefaultFormVariableValue(identifier: string): any { const variable = this.getFormVariable(identifier); if (variable && variable.hasOwnProperty('value')) { @@ -276,23 +276,30 @@ export class FormModel implements ProcessFormModel { /** * Returns a process variable value. + * When mapping a process variable with a form variable the mapping + * is already resolved by the rest API with the name of variables.formVariableName * * @param name Variable name */ getProcessVariableValue(name: string): any { - if (this.processVariables) { - const names = [`variables.${name}`, name]; + let value; + if (this.processVariables?.length) { + const names = [`variables.${ name }`, name]; - const variable = this.processVariables.find( + const processVariable = this.processVariables.find( entry => names.includes(entry.name) ); - if (variable) { - return this.parseValue(variable.type, variable.value); + if (processVariable) { + value = this.parseValue(processVariable.type, processVariable.value); } } - return undefined; + if (!value) { + value = this.getDefaultFormVariableValue(name); + } + + return value; } protected parseValue(type: string, value: any): any { diff --git a/lib/core/src/lib/form/services/widget-visibility.service.ts b/lib/core/src/lib/form/services/widget-visibility.service.ts index 763ac40ef4..434710f5e1 100644 --- a/lib/core/src/lib/form/services/widget-visibility.service.ts +++ b/lib/core/src/lib/form/services/widget-visibility.service.ts @@ -283,7 +283,7 @@ export class WidgetVisibilityService { getVariableValue(form: FormModel, name: string, processVarList: TaskProcessVariableModel[]): string { const processVariableValue = this.getProcessVariableValue(name, processVarList); - const variableDefaultValue = form.getFormVariableValue(name); + const variableDefaultValue = form.getDefaultFormVariableValue(name); return (processVariableValue === undefined) ? variableDefaultValue : processVariableValue; } diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.spec.ts b/lib/process-services-cloud/src/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.spec.ts index 76088e894d..4ece93306c 100644 --- a/lib/process-services-cloud/src/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.spec.ts +++ b/lib/process-services-cloud/src/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.spec.ts @@ -330,8 +330,7 @@ describe('AttachFileCloudWidgetComponent', () => { it('should be able to use mapped string variable value if the destinationFolderPath set to string type variable', async () => { const getNodeIdFromPathSpy = spyOn(contentCloudNodeSelectorService, 'getNodeIdFromPath').and.returnValue(mockNodeIdBasedOnStringVariableValue); - const variables = formVariables; - const form = new FormModel({ variables, formVariables, processVariables }); + const form = new FormModel({ formVariables, processVariables }); createUploadWidgetField(form, 'attach-file-alfresco', [], mockAllFileSourceWithStringVariablePathType); fixture.detectChanges(); await fixture.whenStable(); @@ -791,10 +790,9 @@ describe('AttachFileCloudWidgetComponent', () => { describe('Upload widget with destination folder path params', () => { let form: FormModel; - const variables = formVariables; + beforeEach(() => { form = new FormModel({ - variables, formVariables, processVariables }); @@ -808,6 +806,24 @@ describe('AttachFileCloudWidgetComponent', () => { expect(widget.field.params.fileSource.destinationFolderPath.value).toBe('-root-/pathBasedOnStringvariablevalue'); }); + it('should be able to fetch the destinationFolderPath from the default value of a form variable', () => { + form.processVariables = []; + form.variables = formVariables; + + createUploadWidgetField(form, 'attach-file-attach', [], mockAllFileSourceWithStringVariablePathType); + fixture.detectChanges(); + + expect(widget.field.params.fileSource.destinationFolderPath.value).toBe('mock destination folder path'); + }); + + it('it should get a destination folder path value from a folder variable', () => { + createUploadWidgetField(form, 'attach-file-attach', [], mockAllFileSourceWithFolderVariablePathType); + fixture.detectChanges(); + + expect(widget.field.params.fileSource.destinationFolderPath.type).toBe('folder'); + expect(widget.field.params.fileSource.destinationFolderPath.value).toBe('mock-folder-id'); + }); + it('it should get a destination folder path value from a folder variable', () => { createUploadWidgetField(form, 'attach-file-attach', [], mockAllFileSourceWithFolderVariablePathType); fixture.detectChanges(); diff --git a/lib/process-services-cloud/src/lib/form/components/widgets/attach-file/upload-cloud.widget.ts b/lib/process-services-cloud/src/lib/form/components/widgets/attach-file/upload-cloud.widget.ts index ab398bee4d..6bfb5ba066 100644 --- a/lib/process-services-cloud/src/lib/form/components/widgets/attach-file/upload-cloud.widget.ts +++ b/lib/process-services-cloud/src/lib/form/components/widgets/attach-file/upload-cloud.widget.ts @@ -204,6 +204,6 @@ export class UploadCloudWidgetComponent extends WidgetComponent implements OnIni } private getDestinationFolderPathValue(): any { - return this.field.form.getFormVariableValue(this.field.params.fileSource?.destinationFolderPath?.name); + return this.field.form.getProcessVariableValue(this.field.params.fileSource?.destinationFolderPath?.name); } } diff --git a/lib/process-services-cloud/src/lib/form/mocks/attach-file-cloud-widget.mock.ts b/lib/process-services-cloud/src/lib/form/mocks/attach-file-cloud-widget.mock.ts index 77a36cbfd9..75df6bb736 100644 --- a/lib/process-services-cloud/src/lib/form/mocks/attach-file-cloud-widget.mock.ts +++ b/lib/process-services-cloud/src/lib/form/mocks/attach-file-cloud-widget.mock.ts @@ -397,13 +397,12 @@ export const formVariables = [ id: 'bfca9766-7bc1-45cc-8ecf-cdad551e36e2', name: 'name1', type: 'string', - value: '-root-/pathBasedOnStringvariablevalue' + value: 'mock destination folder path' }, { id: '3ed9f28a-dbae-463f-b991-47ef06658bb6', name: 'name2', - type: 'folder', - value: [{ id: 'mock-folder-id'}] + type: 'folder' }, { id: 'booleanVar',