[ACS-6190] prefer-promise-reject-errors rule and fixes (#9021)

* fix promise rejections

* fix promise errors

* promise error fixes

* fix promise rejections

* [ci:force] fix formatting

* test fixes

* [ci:force] fix tests

* [ci:force] fix tests

* fix incorrect return types

* meaningful errors

* remove useless pipe

* fix accessing private members in the test
This commit is contained in:
Denys Vuika
2023-10-25 12:01:45 +01:00
committed by GitHub
parent 352e0e4933
commit 8bd24dbb7c
18 changed files with 155 additions and 189 deletions

View File

@@ -53,39 +53,39 @@ describe('LibraryFavoriteDirective', () => {
});
it('should not check for favorite if no selection exists', () => {
spyOn(component.directive['favoritesApi'], 'getFavoriteSite');
spyOn(component.directive.favoritesApi, 'getFavoriteSite');
fixture.detectChanges();
expect(component.directive['favoritesApi'].getFavoriteSite).not.toHaveBeenCalled();
expect(component.directive.favoritesApi.getFavoriteSite).not.toHaveBeenCalled();
});
it('should mark selection as favorite', async () => {
spyOn(component.directive['favoritesApi'], 'getFavoriteSite').and.returnValue(Promise.resolve(null));
spyOn(component.directive.favoritesApi, 'getFavoriteSite').and.returnValue(Promise.resolve(null));
delete selection.isFavorite;
fixture.detectChanges();
await fixture.whenStable();
expect(component.directive['favoritesApi'].getFavoriteSite).toHaveBeenCalled();
expect(component.directive.favoritesApi.getFavoriteSite).toHaveBeenCalled();
expect(component.directive.isFavorite()).toBe(true);
});
it('should mark selection not favorite', async () => {
spyOn(component.directive['favoritesApi'], 'getFavoriteSite').and.returnValue(Promise.reject());
spyOn(component.directive.favoritesApi, 'getFavoriteSite').and.returnValue(Promise.reject(new Error('error')));
delete selection.isFavorite;
fixture.detectChanges();
await fixture.whenStable();
expect(component.directive['favoritesApi'].getFavoriteSite).toHaveBeenCalled();
expect(component.directive.favoritesApi.getFavoriteSite).toHaveBeenCalled();
expect(component.directive.isFavorite()).toBe(false);
});
it('should call addFavorite() on click event when selection is not a favorite', async () => {
spyOn(component.directive['favoritesApi'], 'getFavoriteSite').and.returnValue(Promise.reject());
spyOn(component.directive['favoritesApi'], 'createFavorite').and.returnValue(Promise.resolve(null));
spyOn(component.directive.favoritesApi, 'getFavoriteSite').and.returnValue(Promise.reject(new Error('error')));
spyOn(component.directive.favoritesApi, 'createFavorite').and.returnValue(Promise.resolve(null));
fixture.detectChanges();
await fixture.whenStable();
@@ -94,12 +94,12 @@ describe('LibraryFavoriteDirective', () => {
fixture.nativeElement.querySelector('button').dispatchEvent(new MouseEvent('click'));
fixture.detectChanges();
expect(component.directive['favoritesApi'].createFavorite).toHaveBeenCalled();
expect(component.directive.favoritesApi.createFavorite).toHaveBeenCalled();
});
it('should call removeFavoriteSite() on click event when selection is favorite', async () => {
spyOn(component.directive['favoritesApi'], 'getFavoriteSite').and.returnValue(Promise.resolve(null));
spyOn(component.directive['favoritesApi'], 'deleteFavorite').and.returnValue(Promise.resolve());
spyOn(component.directive.favoritesApi, 'getFavoriteSite').and.returnValue(Promise.resolve(null));
spyOn(component.directive.favoritesApi, 'deleteFavorite').and.returnValue(Promise.resolve());
selection.isFavorite = true;
@@ -113,6 +113,6 @@ describe('LibraryFavoriteDirective', () => {
fixture.detectChanges();
await fixture.whenStable();
expect(component.directive['favoritesApi'].deleteFavorite).toHaveBeenCalled();
expect(component.directive.favoritesApi.deleteFavorite).toHaveBeenCalled();
});
});

View File

@@ -70,7 +70,7 @@ describe('LibraryMembershipDirective', () => {
describe('markMembershipRequest', () => {
beforeEach(() => {
getMembershipSpy = spyOn(directive['sitesApi'], 'getSiteMembershipRequestForPerson').and.returnValue(Promise.resolve({ entry: requestedMembershipResponse }));
getMembershipSpy = spyOn(directive.sitesApi, 'getSiteMembershipRequestForPerson').and.returnValue(Promise.resolve({ entry: requestedMembershipResponse }));
});
it('should not check membership requests if no entry is selected', fakeAsync(() => {
@@ -98,7 +98,7 @@ describe('LibraryMembershipDirective', () => {
}));
it('should remember when a membership request is not found for selected library', fakeAsync(() => {
getMembershipSpy.and.returnValue(Promise.reject());
getMembershipSpy.and.returnValue(Promise.reject(new Error('error')));
const selection = { entry: testSiteEntry };
const change = new SimpleChange(null, selection, true);
@@ -111,9 +111,9 @@ describe('LibraryMembershipDirective', () => {
describe('toggleMembershipRequest', () => {
beforeEach(() => {
mockSupportedVersion = false;
getMembershipSpy = spyOn(directive['sitesApi'], 'getSiteMembershipRequestForPerson').and.returnValue(Promise.resolve({ entry: requestedMembershipResponse }));
addMembershipSpy = spyOn(directive['sitesApi'], 'createSiteMembershipRequestForPerson').and.returnValue(Promise.resolve({ entry: requestedMembershipResponse }));
deleteMembershipSpy = spyOn(directive['sitesApi'], 'deleteSiteMembershipRequestForPerson').and.returnValue(Promise.resolve());
getMembershipSpy = spyOn(directive.sitesApi, 'getSiteMembershipRequestForPerson').and.returnValue(Promise.resolve({ entry: requestedMembershipResponse }));
addMembershipSpy = spyOn(directive.sitesApi, 'createSiteMembershipRequestForPerson').and.returnValue(Promise.resolve({ entry: requestedMembershipResponse }));
deleteMembershipSpy = spyOn(directive.sitesApi, 'deleteSiteMembershipRequestForPerson').and.returnValue(Promise.resolve());
});
it('should do nothing if there is no selected library ', fakeAsync(() => {

View File

@@ -111,10 +111,10 @@ describe('NodeDeleteDirective', () => {
element = fixture.debugElement.query(By.directive(NodeDeleteDirective));
elementWithPermanentDelete = fixtureWithPermanentComponent.debugElement.query(By.directive(NodeDeleteDirective));
deleteNodeSpy = spyOn(component.deleteDirective['nodesApi'], 'deleteNode').and.returnValue(Promise.resolve());
deleteNodeSpy = spyOn(component.deleteDirective.nodesApi, 'deleteNode').and.returnValue(Promise.resolve());
deleteNodePermanentSpy = spyOn(componentWithPermanentDelete.deleteDirective['nodesApi'], 'deleteNode').and.returnValue(Promise.resolve());
purgeDeletedNodePermanentSpy = spyOn(componentWithPermanentDelete.deleteDirective['trashcanApi'], 'deleteDeletedNode').and.returnValue(Promise.resolve());
deleteNodePermanentSpy = spyOn(componentWithPermanentDelete.deleteDirective.nodesApi, 'deleteNode').and.returnValue(Promise.resolve());
purgeDeletedNodePermanentSpy = spyOn(componentWithPermanentDelete.deleteDirective.trashcanApi, 'deleteDeletedNode').and.returnValue(Promise.resolve());
});
@@ -152,7 +152,7 @@ describe('NodeDeleteDirective', () => {
});
it('should notify failed node deletion', async () => {
deleteNodeSpy.and.returnValue(Promise.reject('error'));
deleteNodeSpy.and.returnValue(Promise.reject(new Error('error')));
component.selection = [{ entry: { id: '1', name: 'name1' } }];
fixture.detectChanges();
@@ -187,7 +187,7 @@ describe('NodeDeleteDirective', () => {
});
it('should notify failed nodes deletion', async () => {
deleteNodeSpy.and.returnValue(Promise.reject('error'));
deleteNodeSpy.and.returnValue(Promise.reject(new Error('error')));
component.selection = [
{ entry: { id: '1', name: 'name1' } },
@@ -209,7 +209,7 @@ describe('NodeDeleteDirective', () => {
it('should notify partial deletion when only one node is successful', async () => {
deleteNodeSpy.and.callFake((id) => {
if (id === '1') {
return Promise.reject('error');
return Promise.reject(new Error('error'));
} else {
return Promise.resolve();
}
@@ -235,7 +235,7 @@ describe('NodeDeleteDirective', () => {
it('should notify partial deletion when some nodes are successful', async () => {
deleteNodeSpy.and.callFake((id) => {
if (id === '1') {
return Promise.reject(null);
return Promise.reject(new Error('error'));
}
return Promise.resolve();

View File

@@ -69,7 +69,7 @@ describe('NodeFavoriteDirective', () => {
});
it('should reset favorites if selection is empty', fakeAsync(() => {
spyOn(directive['favoritesApi'], 'getFavorite').and.returnValue(Promise.resolve(null));
spyOn(directive.favoritesApi, 'getFavorite').and.returnValue(Promise.resolve(null));
const selection = [
{ entry: { id: '1', name: 'name1' } }
@@ -90,11 +90,10 @@ describe('NodeFavoriteDirective', () => {
});
describe('markFavoritesNodes()', () => {
let favoritesApiSpy;
let favoritesApiSpy: jasmine.Spy;
beforeEach(() => {
favoritesApiSpy = spyOn(directive['favoritesApi'], 'getFavorite')
.and.returnValue(Promise.resolve(null));
favoritesApiSpy = spyOn(directive.favoritesApi, 'getFavorite').and.returnValue(Promise.resolve(null));
});
it('should check each selected node if it is a favorite', fakeAsync(() => {
@@ -108,7 +107,6 @@ describe('NodeFavoriteDirective', () => {
tick();
expect(favoritesApiSpy.calls.count()).toBe(2);
}));
it('should not check processed node when another is unselected', fakeAsync(() => {
@@ -170,12 +168,12 @@ describe('NodeFavoriteDirective', () => {
});
describe('toggleFavorite()', () => {
let removeFavoriteSpy;
let addFavoriteSpy;
let removeFavoriteSpy: jasmine.Spy;
let addFavoriteSpy: jasmine.Spy;
beforeEach(() => {
removeFavoriteSpy = spyOn(directive['favoritesApi'], 'deleteFavorite').and.callThrough();
addFavoriteSpy = spyOn(directive['favoritesApi'], 'createFavorite').and.callThrough();
removeFavoriteSpy = spyOn(directive.favoritesApi, 'deleteFavorite').and.callThrough();
addFavoriteSpy = spyOn(directive.favoritesApi, 'createFavorite').and.callThrough();
});
afterEach(() => {
@@ -266,7 +264,8 @@ describe('NodeFavoriteDirective', () => {
}));
it('should emit error event when removeFavoriteSite() fails', fakeAsync(() => {
removeFavoriteSpy.and.returnValue(Promise.reject('error'));
const error = new Error('error');
removeFavoriteSpy.and.returnValue(Promise.reject(error));
spyOn(directive.error, 'emit');
directive.favorites = [
@@ -276,11 +275,12 @@ describe('NodeFavoriteDirective', () => {
directive.toggleFavorite();
tick();
expect(directive.error.emit).toHaveBeenCalledWith('error');
expect(directive.error.emit).toHaveBeenCalledWith(error);
}));
it('should emit error event when addFavorite() fails', fakeAsync(() => {
addFavoriteSpy.and.returnValue(Promise.reject('error'));
const error = new Error('error');
addFavoriteSpy.and.returnValue(Promise.reject(error));
spyOn(directive.error, 'emit');
directive.favorites = [
@@ -290,7 +290,7 @@ describe('NodeFavoriteDirective', () => {
directive.toggleFavorite();
tick();
expect(directive.error.emit).toHaveBeenCalledWith('error');
expect(directive.error.emit).toHaveBeenCalledWith(error);
}));
it('should set isFavorites items to false', fakeAsync(() => {
@@ -323,7 +323,7 @@ describe('NodeFavoriteDirective', () => {
describe('getFavorite()', () => {
it('should not hit server when using 6.x api', fakeAsync(() => {
spyOn(directive['favoritesApi'], 'getFavorite').and.callThrough();
spyOn(directive.favoritesApi, 'getFavorite').and.callThrough();
const selection = [
{ entry: { id: '1', name: 'name1', isFavorite: true } }
@@ -334,11 +334,11 @@ describe('NodeFavoriteDirective', () => {
tick();
expect(directive.favorites[0].entry.isFavorite).toBe(true);
expect(directive['favoritesApi'].getFavorite).not.toHaveBeenCalled();
expect(directive.favoritesApi.getFavorite).not.toHaveBeenCalled();
}));
it('should process node as favorite', fakeAsync(() => {
spyOn(directive['favoritesApi'], 'getFavorite').and.returnValue(Promise.resolve(null));
spyOn(directive.favoritesApi, 'getFavorite').and.returnValue(Promise.resolve(null));
const selection = [
{ entry: { id: '1', name: 'name1' } }
@@ -352,7 +352,7 @@ describe('NodeFavoriteDirective', () => {
}));
it('should not process node as favorite', fakeAsync(() => {
spyOn(directive['favoritesApi'], 'getFavorite').and.returnValue(Promise.reject({}));
spyOn(directive.favoritesApi, 'getFavorite').and.returnValue(Promise.reject(new Error('error')));
const selection = [
{ entry: { id: '1', name: 'name1' } }