[ASD-2483] Validate folder name on change (#3088)

* notify service refactoring
get translate eliminitation in favor of instant
add error event where necessary
fix config problem during test

* fix delete notify test

* remove fdescribe

* fix core test

* errors

* fix types
This commit is contained in:
Eugenio Romano
2018-03-21 16:55:52 +00:00
committed by GitHub
parent de0fdd9ab4
commit 2951374cc0
25 changed files with 357 additions and 260 deletions

View File

@@ -15,36 +15,41 @@
* limitations under the License.
*/
import { Component, DebugElement } from '@angular/core';
import { Component, DebugElement, ViewChild } from '@angular/core';
import { async, ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { AlfrescoApiService } from '../services/alfresco-api.service';
import { NotificationService } from '../services/notification.service';
import { NodeDeleteDirective } from './node-delete.directive';
@Component({
template: `
<div [adf-delete]="selection"
(delete)="done()">
<div id="delete-component" [adf-delete]="selection"
(delete)="onDelete($event)">
</div>`
})
class TestComponent {
selection = [];
done = jasmine.createSpy('done');
@ViewChild(NodeDeleteDirective)
deleteDirective;
onDelete = jasmine.createSpy('onDelete');
}
@Component({
template: `
<div [adf-node-permission]="selection"
<div id="delete-component" [adf-node-permission]="selection"
[adf-delete]="selection"
(delete)="done()">
(delete)="onDelete($event)">
</div>`
})
class TestWithPermissionsComponent {
selection = [];
done = jasmine.createSpy('done');
@ViewChild(NodeDeleteDirective)
deleteDirective;
onDelete = jasmine.createSpy('onDelete');
}
@Component({
@@ -53,18 +58,21 @@ class TestWithPermissionsComponent {
<div id="delete-permanent"
[adf-delete]="selection"
[permanent]="permanent"
(delete)="done()">
(delete)="onDelete($event)">
</div>`
})
class TestDeletePermanentComponent {
selection = [];
@ViewChild(NodeDeleteDirective)
deleteDirective;
permanent = true;
done = jasmine.createSpy('done');
onDelete = jasmine.createSpy('onDelete');
}
describe('NodeDeleteDirective', () => {
describe('NodeleteDirective', () => {
let fixture: ComponentFixture<TestComponent>;
let fixtureWithPermissions: ComponentFixture<TestWithPermissionsComponent>;
let fixtureWithPermanentComponent: ComponentFixture<TestDeletePermanentComponent>;
@@ -75,7 +83,6 @@ describe('NodeDeleteDirective', () => {
let componentWithPermissions: TestWithPermissionsComponent;
let componentWithPermanentDelete: TestDeletePermanentComponent;
let alfrescoApi: AlfrescoApiService;
let notification: NotificationService;
let nodeApi;
beforeEach(async(() => {
@@ -103,54 +110,60 @@ describe('NodeDeleteDirective', () => {
alfrescoApi = TestBed.get(AlfrescoApiService);
nodeApi = alfrescoApi.getInstance().nodes;
notification = TestBed.get(NotificationService);
});
}));
describe('Delete', () => {
beforeEach(() => {
spyOn(notification, 'openSnackMessage');
});
it('should do nothing if selection is empty', () => {
spyOn(nodeApi, 'deleteNode');
component.selection = [];
fixture.detectChanges();
element.triggerEventHandler('click', null);
element.nativeElement.click();
expect(nodeApi.deleteNode).not.toHaveBeenCalled();
});
it('should process node successfully', fakeAsync(() => {
it('should process node successfully', (done) => {
spyOn(nodeApi, 'deleteNode').and.returnValue(Promise.resolve());
component.selection = <any> [{ entry: { id: '1', name: 'name1' } }];
component.deleteDirective.delete.subscribe((message) => {
expect(message).toBe(
'CORE.DELETE_NODE.SINGULAR'
);
done();
});
fixture.detectChanges();
element.triggerEventHandler('click', null);
tick();
expect(notification.openSnackMessage).toHaveBeenCalledWith(
'CORE.DELETE_NODE.SINGULAR'
);
}));
fixture.whenStable().then(() => {
element.nativeElement.click();
});
});
it('should notify failed node deletion', fakeAsync(() => {
it('should notify failed node deletion', (done) => {
spyOn(nodeApi, 'deleteNode').and.returnValue(Promise.reject('error'));
component.selection = [{ entry: { id: '1', name: 'name1' } }];
component.deleteDirective.delete.subscribe((message) => {
expect(message).toBe(
'CORE.DELETE_NODE.ERROR_SINGULAR'
);
done();
});
fixture.detectChanges();
element.triggerEventHandler('click', null);
tick();
expect(notification.openSnackMessage).toHaveBeenCalledWith(
'CORE.DELETE_NODE.ERROR_SINGULAR'
);
}));
fixture.whenStable().then(() => {
element.nativeElement.click();
});
});
it('should notify nodes deletion', fakeAsync(() => {
it('should notify nodes deletion', (done) => {
spyOn(nodeApi, 'deleteNode').and.returnValue(Promise.resolve());
component.selection = [
@@ -158,16 +171,21 @@ describe('NodeDeleteDirective', () => {
{ entry: { id: '2', name: 'name2' } }
];
component.deleteDirective.delete.subscribe((message) => {
expect(message).toBe(
'CORE.DELETE_NODE.PLURAL'
);
done();
});
fixture.detectChanges();
element.triggerEventHandler('click', null);
tick();
expect(notification.openSnackMessage).toHaveBeenCalledWith(
'CORE.DELETE_NODE.PLURAL'
);
}));
fixture.whenStable().then(() => {
element.nativeElement.click();
});
});
it('should notify failed nodes deletion', fakeAsync(() => {
it('should notify failed nodes deletion', (done) => {
spyOn(nodeApi, 'deleteNode').and.returnValue(Promise.reject('error'));
component.selection = [
@@ -175,16 +193,21 @@ describe('NodeDeleteDirective', () => {
{ entry: { id: '2', name: 'name2' } }
];
component.deleteDirective.delete.subscribe((message) => {
expect(message).toBe(
'CORE.DELETE_NODE.ERROR_PLURAL'
);
done();
});
fixture.detectChanges();
element.triggerEventHandler('click', null);
tick();
expect(notification.openSnackMessage).toHaveBeenCalledWith(
'CORE.DELETE_NODE.ERROR_PLURAL'
);
}));
fixture.whenStable().then(() => {
element.nativeElement.click();
});
});
it('should notify partial deletion when only one node is successful', fakeAsync(() => {
it('should notify partial deletion when only one node is successful', (done) => {
spyOn(nodeApi, 'deleteNode').and.callFake((id) => {
if (id === '1') {
return Promise.reject('error');
@@ -198,16 +221,21 @@ describe('NodeDeleteDirective', () => {
{ entry: { id: '2', name: 'name2' } }
];
component.deleteDirective.delete.subscribe((message) => {
expect(message).toBe(
'CORE.DELETE_NODE.PARTIAL_SINGULAR'
);
done();
});
fixture.detectChanges();
element.triggerEventHandler('click', null);
tick();
expect(notification.openSnackMessage).toHaveBeenCalledWith(
'CORE.DELETE_NODE.PARTIAL_SINGULAR'
);
}));
fixture.whenStable().then(() => {
element.nativeElement.click();
});
});
it('should notify partial deletion when some nodes are successful', fakeAsync(() => {
it('should notify partial deletion when some nodes are successful', (done) => {
spyOn(nodeApi, 'deleteNode').and.callFake((id) => {
if (id === '1') {
return Promise.reject(null);
@@ -228,26 +256,31 @@ describe('NodeDeleteDirective', () => {
{ entry: { id: '3', name: 'name3' } }
];
fixture.detectChanges();
element.triggerEventHandler('click', null);
tick();
component.deleteDirective.delete.subscribe((message) => {
expect(message).toBe(
'CORE.DELETE_NODE.PARTIAL_PLURAL'
);
done();
});
expect(notification.openSnackMessage).toHaveBeenCalledWith(
'CORE.DELETE_NODE.PARTIAL_PLURAL'
);
}));
fixture.detectChanges();
fixture.whenStable().then(() => {
element.nativeElement.click();
});
});
it('should emit event when delete is done', fakeAsync(() => {
component.done.calls.reset();
component.onDelete.calls.reset();
spyOn(nodeApi, 'deleteNode').and.returnValue(Promise.resolve());
component.selection = <any> [{ entry: { id: '1', name: 'name1' } }];
fixture.detectChanges();
element.triggerEventHandler('click', null);
element.nativeElement.click();
tick();
expect(component.done).toHaveBeenCalled();
expect(component.onDelete).toHaveBeenCalled();
}));
it('should disable the button if no node are selected', fakeAsync(() => {
@@ -303,12 +336,12 @@ describe('NodeDeleteDirective', () => {
fixtureWithPermanentComponent.detectChanges();
componentWithPermanentDelete.selection = [
{ entry: { id: '1', name: 'name1'}
{ entry: { id: '1', name: 'name1' }
];
fixtureWithPermanentComponent.detectChanges();
elementWithPermanentDelete.triggerEventHandler('click', null);
elementWithPermanentDelete.nativeElement.click();
tick();
expect(deleteApi).toHaveBeenCalledWith('1', { permanent: true });
@@ -325,7 +358,7 @@ describe('NodeDeleteDirective', () => {
fixtureWithPermanentComponent.detectChanges();
elementWithPermanentDelete.triggerEventHandler('click', null);
elementWithPermanentDelete.nativeElement.click();
tick();
expect(deleteApi).toHaveBeenCalledWith('1');