From 8d43155c144a308aae56909dc8795a011e8f1db5 Mon Sep 17 00:00:00 2001 From: Mercy Chrysolite <48274621+mcchrys@users.noreply.github.com> Date: Mon, 27 Jul 2020 02:43:18 +0530 Subject: [PATCH] [ACA-3678] Disable save & delete buttons for default process filters (#5896) * [ACA-3678] Disable save & delete buttons for default process filters * Added unit test * Added types for params * Updated e2e * Updated test --- .../edit-process-filters-component.e2e.ts | 2 +- .../edit-process-filter-cloud.component.html | 2 +- ...dit-process-filter-cloud.component.spec.ts | 44 +++++++++++++++++++ .../edit-process-filter-cloud.component.ts | 17 ++++++- .../process-filter-cloud.service.spec.ts | 8 ++++ .../services/process-filter-cloud.service.ts | 18 ++++++-- 6 files changed, 84 insertions(+), 7 deletions(-) diff --git a/e2e/process-services-cloud/edit-process-filters-component.e2e.ts b/e2e/process-services-cloud/edit-process-filters-component.e2e.ts index 57eb200fb3..04b9c8074c 100644 --- a/e2e/process-services-cloud/edit-process-filters-component.e2e.ts +++ b/e2e/process-services-cloud/edit-process-filters-component.e2e.ts @@ -81,7 +81,7 @@ describe('Edit process filters cloud', () => { await processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsDisplayed(); await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveButtonIsEnabled()).toEqual(false); await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkSaveAsButtonIsEnabled()).toEqual(false); - await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(true); + await expect(await processCloudDemoPage.editProcessFilterCloudComponent().checkDeleteButtonIsEnabled()).toEqual(false); await processCloudDemoPage.editProcessFilterCloudComponent().openFilter(); }); diff --git a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.html b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.html index 7b27d0feef..e502036de6 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.html +++ b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.html @@ -7,7 +7,7 @@ {{ 'ADF_CLOUD_EDIT_PROCESS_FILTER.TITLE' | translate}}
- diff --git a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts index 803694cb16..359430782d 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.spec.ts @@ -153,6 +153,50 @@ describe('EditProcessFilterCloudComponent', () => { }); })); + it('should disable save and delete button for default process filters', () => { + getProcessFilterByIdSpy.and.returnValue(of({ + id: 'filter-id', + processName: 'ADF_CLOUD_PROCESS_FILTERS.RUNNING_PROCESSES', + sort: 'my-custom-sort', + processDefinitionId: 'process-definition-id', + priority: '12' + })); + + const processFilterIdChange = new SimpleChange(null, 'filter-id', true); + component.ngOnChanges({ 'id': processFilterIdChange }); + fixture.detectChanges(); + + component.toggleFilterActions = true; + const expansionPanel = fixture.debugElement.nativeElement.querySelector('mat-expansion-panel-header'); + expansionPanel.click(); + fixture.detectChanges(); + fixture.whenStable().then(() => { + const saveButton = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-filter-action-save"]'); + expect(saveButton.disabled).toEqual(true); + const deleteButton = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-filter-action-delete"]'); + expect(deleteButton.disabled).toEqual(true); + }); + }); + + it('should enable save and delete button for custom process filters', () => { + const disableCheckSpy = spyOn(component, 'isDisabledAction'); + const processFilterIdChange = new SimpleChange(null, 'mock-process-filter-id', true); + component.ngOnChanges({ 'id': processFilterIdChange }); + fixture.detectChanges(); + + component.toggleFilterActions = true; + const expansionPanel = fixture.debugElement.nativeElement.querySelector('mat-expansion-panel-header'); + expansionPanel.click(); + fixture.detectChanges(); + expect(disableCheckSpy).toHaveBeenCalled(); + fixture.whenStable().then(() => { + const saveButton = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-filter-action-save"]'); + expect(saveButton.disabled).toEqual(false); + const deleteButton = fixture.debugElement.nativeElement.querySelector('[data-automation-id="adf-filter-action-delete"]'); + expect(deleteButton.disabled).toEqual(false); + }); + }); + describe('EditProcessFilter form', () => { beforeEach(() => { diff --git a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts index 9b1e22ba57..d0efe7dae0 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/components/edit-process-filter-cloud.component.ts @@ -103,6 +103,10 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes ]; directions = [{ label: 'ASC', value: 'ASC' }, { label: 'DESC', value: 'DESC' }]; + actionDisabledForDefault = [ + EditProcessFilterCloudComponent.ACTION_SAVE, + EditProcessFilterCloudComponent.ACTION_DELETE + ]; applicationNames: any[] = []; formHasBeenChanged = false; editProcessFilterForm: FormGroup; @@ -433,7 +437,18 @@ export class EditProcessFilterCloudComponent implements OnInit, OnChanges, OnDes return property.type === 'number'; } - hasFormChanged(action: any): boolean { + isDisabledAction(action: ProcessFilterAction): boolean { + return this.isDisabledForDefaultFilters(action) ? true : this.hasFormChanged(action); + } + + isDisabledForDefaultFilters(action: ProcessFilterAction): boolean { + return ( + this.processFilterCloudService.isDefaultFilter(this.processFilter.name) && + this.actionDisabledForDefault.includes(action.actionType) + ); + } + + hasFormChanged(action: ProcessFilterAction): boolean { if (action.actionType === EditProcessFilterCloudComponent.ACTION_SAVE) { return !this.formHasBeenChanged; } diff --git a/lib/process-services-cloud/src/lib/process/process-filters/services/process-filter-cloud.service.spec.ts b/lib/process-services-cloud/src/lib/process/process-filters/services/process-filter-cloud.service.spec.ts index 63f7613a73..ebb7b0e4b6 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/services/process-filter-cloud.service.spec.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/services/process-filter-cloud.service.spec.ts @@ -381,4 +381,12 @@ describe('ProcessFilterCloudService', () => { }); expect(updatePreferenceSpy).toHaveBeenCalled(); }); + + it('should check if given filter is a default filter', () => { + const fakeFilterName = 'fake-process-filter'; + const defaultFilterName = 'ADF_CLOUD_PROCESS_FILTERS.RUNNING_PROCESSES'; + + expect(service.isDefaultFilter(defaultFilterName)).toBe(true); + expect(service.isDefaultFilter(fakeFilterName)).toBe(false); + }); }); diff --git a/lib/process-services-cloud/src/lib/process/process-filters/services/process-filter-cloud.service.ts b/lib/process-services-cloud/src/lib/process/process-filters/services/process-filter-cloud.service.ts index 6ba09630e3..aab24f5f05 100644 --- a/lib/process-services-cloud/src/lib/process/process-filters/services/process-filter-cloud.service.ts +++ b/lib/process-services-cloud/src/lib/process/process-filters/services/process-filter-cloud.service.ts @@ -170,6 +170,16 @@ export class ProcessFilterCloudService { ); } + /** + * Checks if given filter is a default filter + * @param filterName Name of the target process filter + * @returns Boolean value for whether the filter is a default filter + */ + isDefaultFilter(filterName: string): boolean { + const defaultFilters = this.defaultProcessFilters(); + return defaultFilters.findIndex((filter) => filterName === filter.name) !== -1; + } + /** * Checks user preference are empty or not * @param preferences User preferences of the target app @@ -256,13 +266,13 @@ export class ProcessFilterCloudService { * @param appName Name of the target app * @returns Array of ProcessFilterCloudModel */ - private defaultProcessFilters(appName: string): ProcessFilterCloudModel[] { + private defaultProcessFilters(appName?: string): ProcessFilterCloudModel[] { return [ new ProcessFilterCloudModel({ name: 'ADF_CLOUD_PROCESS_FILTERS.RUNNING_PROCESSES', icon: 'inbox', key: 'running-processes', - appName: appName, + appName, sort: 'startDate', status: 'RUNNING', order: 'DESC' @@ -271,7 +281,7 @@ export class ProcessFilterCloudService { name: 'ADF_CLOUD_PROCESS_FILTERS.COMPLETED_PROCESSES', icon: 'done', key: 'completed-processes', - appName: appName, + appName, sort: 'startDate', status: 'COMPLETED', order: 'DESC' @@ -280,7 +290,7 @@ export class ProcessFilterCloudService { name: 'ADF_CLOUD_PROCESS_FILTERS.ALL_PROCESSES', key: 'all-processes', icon: 'adjust', - appName: appName, + appName, sort: 'startDate', status: '', order: 'DESC'