mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-05-19 17:14:45 +00:00
* remove notifications from files component * remove notifications from favorites page * remove irrelevant tests * snackbar effects * snackbar theme * improve permanent delete messaging * cleanup tests * strongly typed node delete directive, node actions * strongly-typed directives * test fixes * redux dev tools, migrate permanent delete directive * reload trashcan on service events * delete and restore nodes, snackbar effects with undo * wire viewer with store and effects * test fixes * migrate events * fix spelling * bug fixes * use notification effects on restore node * remove fdescribe * node-versions using snackbar actions * dispatch snackbars from node-move directive * store-enabled create folder * reduce dependency on ContentService for list reloads * favorites use unified preview api for files * simplify preview for shared files * remove test
283 lines
9.4 KiB
TypeScript
283 lines
9.4 KiB
TypeScript
/*!
|
|
* @license
|
|
* Alfresco Example Content Application
|
|
*
|
|
* Copyright (C) 2005 - 2018 Alfresco Software Limited
|
|
*
|
|
* This file is part of the Alfresco Example Content Application.
|
|
* If the software was purchased under a paid Alfresco license, the terms of
|
|
* the paid license agreement will prevail. Otherwise, the software is
|
|
* provided under the following open source license terms:
|
|
*
|
|
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
import { TestBed, ComponentFixture, fakeAsync, tick } from '@angular/core/testing';
|
|
import { By } from '@angular/platform-browser';
|
|
import { CoreModule, AlfrescoApiService } from '@alfresco/adf-core';
|
|
import { Component, DebugElement } from '@angular/core';
|
|
|
|
import { NodeDeleteDirective } from './node-delete.directive';
|
|
import { ContentManagementService } from '../services/content-management.service';
|
|
import { StoreModule } from '@ngrx/store';
|
|
import { appReducer } from '../../store/reducers/app.reducer';
|
|
import { INITIAL_STATE } from '../../store/states/app.state';
|
|
import { EffectsModule, Actions, ofType } from '@ngrx/effects';
|
|
import { NodeEffects } from '../../store/effects/node.effects';
|
|
import {
|
|
SnackbarInfoAction, SNACKBAR_INFO, SNACKBAR_ERROR,
|
|
SnackbarErrorAction, SnackbarWarningAction, SNACKBAR_WARNING
|
|
} from '../../store/actions';
|
|
import { map } from 'rxjs/operators';
|
|
|
|
@Component({
|
|
template: '<div [acaDeleteNode]="selection"></div>'
|
|
})
|
|
class TestComponent {
|
|
selection;
|
|
}
|
|
|
|
describe('NodeDeleteDirective', () => {
|
|
let component: TestComponent;
|
|
let fixture: ComponentFixture<TestComponent>;
|
|
let element: DebugElement;
|
|
let alfrescoApiService: AlfrescoApiService;
|
|
let actions$: Actions;
|
|
|
|
beforeEach(() => {
|
|
TestBed.configureTestingModule({
|
|
imports: [
|
|
CoreModule,
|
|
StoreModule.forRoot({ app: appReducer }, { initialState: INITIAL_STATE }),
|
|
EffectsModule.forRoot([NodeEffects])
|
|
],
|
|
declarations: [
|
|
NodeDeleteDirective,
|
|
TestComponent
|
|
],
|
|
providers: [
|
|
ContentManagementService
|
|
]
|
|
});
|
|
|
|
alfrescoApiService = TestBed.get(AlfrescoApiService);
|
|
alfrescoApiService.reset();
|
|
|
|
actions$ = TestBed.get(Actions);
|
|
|
|
fixture = TestBed.createComponent(TestComponent);
|
|
component = fixture.componentInstance;
|
|
element = fixture.debugElement.query(By.directive(NodeDeleteDirective));
|
|
});
|
|
|
|
describe('Delete action', () => {
|
|
it('should raise info message on successful single file deletion', fakeAsync(done => {
|
|
spyOn(alfrescoApiService.nodesApi, 'deleteNode').and.returnValue(Promise.resolve(null));
|
|
|
|
actions$.pipe(
|
|
ofType<SnackbarInfoAction>(SNACKBAR_INFO),
|
|
map(action => {
|
|
done();
|
|
})
|
|
);
|
|
|
|
component.selection = [{ entry: { id: '1', name: 'name1' } }];
|
|
|
|
fixture.detectChanges();
|
|
element.triggerEventHandler('click', null);
|
|
|
|
tick();
|
|
}));
|
|
|
|
it('should raise error message on failed single file deletion', fakeAsync(done => {
|
|
spyOn(alfrescoApiService.nodesApi, 'deleteNode').and.returnValue(Promise.reject(null));
|
|
|
|
actions$.pipe(
|
|
ofType<SnackbarErrorAction>(SNACKBAR_ERROR),
|
|
map(action => {
|
|
done();
|
|
})
|
|
);
|
|
|
|
component.selection = [{ entry: { id: '1', name: 'name1' } }];
|
|
|
|
fixture.detectChanges();
|
|
element.triggerEventHandler('click', null);
|
|
|
|
tick();
|
|
}));
|
|
|
|
it('should raise info message on successful multiple files deletion', fakeAsync(done => {
|
|
spyOn(alfrescoApiService.nodesApi, 'deleteNode').and.returnValue(Promise.resolve(null));
|
|
|
|
actions$.pipe(
|
|
ofType<SnackbarInfoAction>(SNACKBAR_INFO),
|
|
map(action => {
|
|
done();
|
|
})
|
|
);
|
|
|
|
component.selection = [
|
|
{ entry: { id: '1', name: 'name1' } },
|
|
{ entry: { id: '2', name: 'name2' } }
|
|
];
|
|
|
|
fixture.detectChanges();
|
|
element.triggerEventHandler('click', null);
|
|
|
|
tick();
|
|
}));
|
|
|
|
it('should raise error message failed multiple files deletion', fakeAsync(done => {
|
|
spyOn(alfrescoApiService.nodesApi, 'deleteNode').and.returnValue(Promise.reject(null));
|
|
|
|
actions$.pipe(
|
|
ofType<SnackbarErrorAction>(SNACKBAR_ERROR),
|
|
map(action => {
|
|
done();
|
|
})
|
|
);
|
|
|
|
component.selection = [
|
|
{ entry: { id: '1', name: 'name1' } },
|
|
{ entry: { id: '2', name: 'name2' } }
|
|
];
|
|
|
|
fixture.detectChanges();
|
|
element.triggerEventHandler('click', null);
|
|
|
|
tick();
|
|
}));
|
|
|
|
it('should raise warning message when only one file is successful', fakeAsync(done => {
|
|
spyOn(alfrescoApiService.nodesApi, 'deleteNode').and.callFake((id) => {
|
|
if (id === '1') {
|
|
return Promise.reject(null);
|
|
} else {
|
|
return Promise.resolve(null);
|
|
}
|
|
});
|
|
|
|
actions$.pipe(
|
|
ofType<SnackbarWarningAction>(SNACKBAR_WARNING),
|
|
map(action => {
|
|
done();
|
|
})
|
|
);
|
|
|
|
component.selection = [
|
|
{ entry: { id: '1', name: 'name1' } },
|
|
{ entry: { id: '2', name: 'name2' } }
|
|
];
|
|
|
|
fixture.detectChanges();
|
|
element.triggerEventHandler('click', null);
|
|
|
|
tick();
|
|
}));
|
|
|
|
it('should raise warning message when some files are successfully deleted', fakeAsync(done => {
|
|
spyOn(alfrescoApiService.nodesApi, 'deleteNode').and.callFake((id) => {
|
|
if (id === '1') {
|
|
return Promise.reject(null);
|
|
}
|
|
|
|
if (id === '2') {
|
|
return Promise.resolve(null);
|
|
}
|
|
|
|
if (id === '3') {
|
|
return Promise.resolve(null);
|
|
}
|
|
});
|
|
|
|
actions$.pipe(
|
|
ofType<SnackbarWarningAction>(SNACKBAR_WARNING),
|
|
map(action => {
|
|
done();
|
|
})
|
|
);
|
|
|
|
component.selection = [
|
|
{ entry: { id: '1', name: 'name1' } },
|
|
{ entry: { id: '2', name: 'name2' } },
|
|
{ entry: { id: '3', name: 'name3' } }
|
|
];
|
|
|
|
fixture.detectChanges();
|
|
element.triggerEventHandler('click', null);
|
|
|
|
tick();
|
|
}));
|
|
});
|
|
|
|
/*
|
|
describe('Restore action', () => {
|
|
beforeEach(() => {
|
|
spyOn(alfrescoApiService.nodesApi, 'deleteNode').and.returnValue(Promise.resolve(null));
|
|
});
|
|
|
|
it('notifies failed file on on restore', () => {
|
|
spyOn(alfrescoApiService.nodesApi, 'restoreNode').and.returnValue(Promise.reject(null));
|
|
|
|
component.selection = [
|
|
{ entry: { id: '1', name: 'name1' } }
|
|
];
|
|
|
|
fixture.detectChanges();
|
|
element.triggerEventHandler('click', null);
|
|
|
|
expect(spySnackBar.calls.mostRecent().args)
|
|
.toEqual((['APP.MESSAGES.ERRORS.NODE_RESTORE', '', 3000]));
|
|
});
|
|
|
|
it('notifies failed files on on restore', () => {
|
|
spyOn(alfrescoApiService.nodesApi, 'restoreNode').and.returnValue(Promise.reject(null));
|
|
|
|
component.selection = [
|
|
{ entry: { id: '1', name: 'name1' } },
|
|
{ entry: { id: '2', name: 'name2' } }
|
|
];
|
|
|
|
fixture.detectChanges();
|
|
element.triggerEventHandler('click', null);
|
|
|
|
expect(spySnackBar.calls.mostRecent().args)
|
|
.toEqual((['APP.MESSAGES.ERRORS.NODE_RESTORE_PLURAL', '', 3000]));
|
|
});
|
|
|
|
it('signals files restored', () => {
|
|
spyOn(contentService.nodeRestored, 'next');
|
|
spyOn(alfrescoApiService.nodesApi, 'restoreNode').and.callFake((id) => {
|
|
if (id === '1') {
|
|
return Promise.resolve(null);
|
|
} else {
|
|
return Promise.reject(null);
|
|
}
|
|
});
|
|
|
|
component.selection = [
|
|
{ entry: { id: '1', name: 'name1' } },
|
|
{ entry: { id: '2', name: 'name2' } }
|
|
];
|
|
|
|
fixture.detectChanges();
|
|
element.triggerEventHandler('click', null);
|
|
|
|
expect(contentService.nodeRestored.next).toHaveBeenCalled();
|
|
});
|
|
});
|
|
*/
|
|
});
|