diff --git a/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.spec.ts b/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.spec.ts index 83811229f6..fe504f2257 100644 --- a/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.spec.ts +++ b/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.spec.ts @@ -389,6 +389,27 @@ describe('ContentMetadataComponent', () => { flush(); })); + it('should revert changes on unsuccessful save', fakeAsync(() => { + component.readOnly = false; + const property = { key: 'properties.property-key', value: 'original-value' } as CardViewBaseItemModel; + spyOn(nodesApiService, 'updateNode').and.returnValue(throwError(new Error('error message'))); + spyOn(component, 'revertChanges').and.callThrough(); + updateService.update(property, 'new-value'); + tick(600); + + fixture.detectChanges(); + toggleEditModeForGeneralInfo(); + tick(100); + clickOnGeneralInfoSave(); + tick(100); + + expect(component.revertChanges).toHaveBeenCalled(); + expect(component.changedProperties).toEqual({}); + expect(component.hasMetadataChanged).toBeFalse(); + discardPeriodicTasks(); + flush(); + })); + it('should open the confirm dialog when content type is changed', fakeAsync(() => { component.readOnly = false; const property = { key: 'nodeType', value: 'ft:sbiruli' } as CardViewBaseItemModel; diff --git a/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.ts b/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.ts index 89976e71a0..c3acb82a0b 100644 --- a/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.ts +++ b/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.ts @@ -409,6 +409,7 @@ export class ContentMetadataComponent implements OnChanges, OnInit { this.cardViewContentUpdateService.updateElement(this.targetProperty); this.handleUpdateError(err); this._saving = false; + this.revertChanges(); this.loadProperties(this.node); return of(null); }) diff --git a/lib/content-services/src/lib/content-metadata/services/basic-properties.service.ts b/lib/content-services/src/lib/content-metadata/services/basic-properties.service.ts index 5530fef7d8..74fd9686a2 100644 --- a/lib/content-services/src/lib/content-metadata/services/basic-properties.service.ts +++ b/lib/content-services/src/lib/content-metadata/services/basic-properties.service.ts @@ -45,7 +45,7 @@ export class BasicPropertiesService { key: 'properties.cm:name', editable: true, validators: [ - new CardViewItemMatchValidator('[\\/\\*\\\\"\\\\]') + new CardViewItemMatchValidator('[\\/\\*\\\\"\\\\:]') ] }), new CardViewTextItemModel({