mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-07-24 17:31:52 +00:00
[ACS-5503] Folder rules rule update with correct error message when definition is invalid (#4610)
* [ACS-5503] Folder rules rule update with correct error message when definition is invalid * [ACS-5503] Sonarlint fixes * [ACS-5503] CR fixes
This commit is contained in:
@@ -51,7 +51,6 @@ export class RuleListItemUiComponent {
|
|||||||
|
|
||||||
onToggleClick(isEnabled: boolean, event: Event) {
|
onToggleClick(isEnabled: boolean, event: Event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
this.rule.isEnabled = !this.rule.isEnabled;
|
|
||||||
this.enabledChanged.emit(isEnabled);
|
this.enabledChanged.emit(isEnabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { TestBed } from '@angular/core/testing';
|
import { TestBed } from '@angular/core/testing';
|
||||||
import { CoreTestingModule } from '@alfresco/adf-core';
|
import { CoreTestingModule, NotificationService } from '@alfresco/adf-core';
|
||||||
import { of } from 'rxjs';
|
import { of } from 'rxjs';
|
||||||
import { FolderRulesService } from './folder-rules.service';
|
import { FolderRulesService } from './folder-rules.service';
|
||||||
import {
|
import {
|
||||||
@@ -42,6 +42,7 @@ import { AlfrescoApiService, AlfrescoApiServiceMock } from '@alfresco/adf-conten
|
|||||||
|
|
||||||
describe('FolderRulesService', () => {
|
describe('FolderRulesService', () => {
|
||||||
let folderRulesService: FolderRulesService;
|
let folderRulesService: FolderRulesService;
|
||||||
|
let notificationService: NotificationService;
|
||||||
|
|
||||||
let callApiSpy: jasmine.Spy;
|
let callApiSpy: jasmine.Spy;
|
||||||
|
|
||||||
@@ -60,7 +61,8 @@ describe('FolderRulesService', () => {
|
|||||||
providers: [FolderRulesService, { provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }]
|
providers: [FolderRulesService, { provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }]
|
||||||
});
|
});
|
||||||
|
|
||||||
folderRulesService = TestBed.inject<FolderRulesService>(FolderRulesService);
|
folderRulesService = TestBed.inject(FolderRulesService);
|
||||||
|
notificationService = TestBed.inject(NotificationService);
|
||||||
|
|
||||||
callApiSpy = spyOn<any>(folderRulesService, 'callApi');
|
callApiSpy = spyOn<any>(folderRulesService, 'callApi');
|
||||||
});
|
});
|
||||||
@@ -148,6 +150,17 @@ describe('FolderRulesService', () => {
|
|||||||
expect(result).toEqual(mockedRule);
|
expect(result).toEqual(mockedRule);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should display error message and revert enabled state when updating rule fails', async () => {
|
||||||
|
callApiSpy
|
||||||
|
.withArgs(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules/${ruleId}`, 'PUT', mockedRule)
|
||||||
|
.and.returnValue(Promise.reject(new Error(JSON.stringify({ error: { briefSummary: 'Error updating rule' } }))));
|
||||||
|
spyOn(notificationService, 'showError');
|
||||||
|
|
||||||
|
const result = await folderRulesService.updateRule(nodeId, ruleId, mockedRule, ruleSetId);
|
||||||
|
expect(notificationService.showError).toHaveBeenCalledWith('Error updating rule');
|
||||||
|
expect(result.isEnabled).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
it('should send correct GET request and return rule settings', async () => {
|
it('should send correct GET request and return rule settings', async () => {
|
||||||
callApiSpy.withArgs(`/nodes/${nodeId}/rule-settings/${key}`, 'GET').and.returnValue(Promise.resolve(mockedRuleSettingsEntry));
|
callApiSpy.withArgs(`/nodes/${nodeId}/rule-settings/${key}`, 'GET').and.returnValue(Promise.resolve(mockedRuleSettingsEntry));
|
||||||
|
|
||||||
|
@@ -30,6 +30,7 @@ import { Rule, RuleForForm, RuleOptions, RuleSettings } from '../model/rule.mode
|
|||||||
import { RuleCompositeCondition } from '../model/rule-composite-condition.model';
|
import { RuleCompositeCondition } from '../model/rule-composite-condition.model';
|
||||||
import { RuleSimpleCondition } from '../model/rule-simple-condition.model';
|
import { RuleSimpleCondition } from '../model/rule-simple-condition.model';
|
||||||
import { RuleSet } from '../model/rule-set.model';
|
import { RuleSet } from '../model/rule-set.model';
|
||||||
|
import { NotificationService } from '@alfresco/adf-core';
|
||||||
|
|
||||||
interface GetRulesResult {
|
interface GetRulesResult {
|
||||||
rules: Rule[];
|
rules: Rule[];
|
||||||
@@ -90,7 +91,10 @@ export class FolderRulesService {
|
|||||||
selectedRule$ = this.selectedRuleSource.asObservable();
|
selectedRule$ = this.selectedRuleSource.asObservable();
|
||||||
deletedRuleId$: Observable<string> = this.deletedRuleIdSource.asObservable();
|
deletedRuleId$: Observable<string> = this.deletedRuleIdSource.asObservable();
|
||||||
|
|
||||||
constructor(private apiService: AlfrescoApiService) {}
|
constructor(
|
||||||
|
private readonly apiService: AlfrescoApiService,
|
||||||
|
private readonly notificationService: NotificationService
|
||||||
|
) {}
|
||||||
|
|
||||||
private callApi(path: string, httpMethod: string, body: object = {}): Promise<any> {
|
private callApi(path: string, httpMethod: string, body: object = {}): Promise<any> {
|
||||||
// APIs used by this service are still private and not yet available for public use
|
// APIs used by this service are still private and not yet available for public use
|
||||||
@@ -136,8 +140,12 @@ export class FolderRulesService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async updateRule(nodeId: string, ruleId: string, rule: Rule, ruleSetId: string = '-default-'): Promise<Rule> {
|
async updateRule(nodeId: string, ruleId: string, rule: Rule, ruleSetId: string = '-default-'): Promise<Rule> {
|
||||||
const response = await this.callApi(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules/${ruleId}`, 'PUT', { ...rule });
|
const response = await this.callApi(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules/${ruleId}`, 'PUT', { ...rule }).catch((error) => {
|
||||||
return this.formatRule(response.entry);
|
this.notificationService.showError(JSON.parse(error.message).error.briefSummary);
|
||||||
|
rule.isEnabled = !rule.isEnabled;
|
||||||
|
return rule;
|
||||||
|
});
|
||||||
|
return this.formatRule(response.entry ?? response);
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteRule(nodeId: string, ruleId: string, ruleSetId: string = '-default-') {
|
deleteRule(nodeId: string, ruleId: string, ruleSetId: string = '-default-') {
|
||||||
|
Reference in New Issue
Block a user