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) {
|
||||
event.stopPropagation();
|
||||
this.rule.isEnabled = !this.rule.isEnabled;
|
||||
this.enabledChanged.emit(isEnabled);
|
||||
}
|
||||
}
|
||||
|
@@ -23,7 +23,7 @@
|
||||
*/
|
||||
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { CoreTestingModule, NotificationService } from '@alfresco/adf-core';
|
||||
import { of } from 'rxjs';
|
||||
import { FolderRulesService } from './folder-rules.service';
|
||||
import {
|
||||
@@ -42,6 +42,7 @@ import { AlfrescoApiService, AlfrescoApiServiceMock } from '@alfresco/adf-conten
|
||||
|
||||
describe('FolderRulesService', () => {
|
||||
let folderRulesService: FolderRulesService;
|
||||
let notificationService: NotificationService;
|
||||
|
||||
let callApiSpy: jasmine.Spy;
|
||||
|
||||
@@ -60,7 +61,8 @@ describe('FolderRulesService', () => {
|
||||
providers: [FolderRulesService, { provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock }]
|
||||
});
|
||||
|
||||
folderRulesService = TestBed.inject<FolderRulesService>(FolderRulesService);
|
||||
folderRulesService = TestBed.inject(FolderRulesService);
|
||||
notificationService = TestBed.inject(NotificationService);
|
||||
|
||||
callApiSpy = spyOn<any>(folderRulesService, 'callApi');
|
||||
});
|
||||
@@ -148,6 +150,17 @@ describe('FolderRulesService', () => {
|
||||
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 () => {
|
||||
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 { RuleSimpleCondition } from '../model/rule-simple-condition.model';
|
||||
import { RuleSet } from '../model/rule-set.model';
|
||||
import { NotificationService } from '@alfresco/adf-core';
|
||||
|
||||
interface GetRulesResult {
|
||||
rules: Rule[];
|
||||
@@ -90,7 +91,10 @@ export class FolderRulesService {
|
||||
selectedRule$ = this.selectedRuleSource.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> {
|
||||
// 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> {
|
||||
const response = await this.callApi(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules/${ruleId}`, 'PUT', { ...rule });
|
||||
return this.formatRule(response.entry);
|
||||
const response = await this.callApi(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules/${ruleId}`, 'PUT', { ...rule }).catch((error) => {
|
||||
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-') {
|
||||
|
Reference in New Issue
Block a user