Files
dspace-angular/src/app/shared/object-list/selectable-list/selectable-list.service.spec.ts
2019-12-17 13:47:09 +01:00

99 lines
3.1 KiB
TypeScript

import { Store } from '@ngrx/store';
import { async, TestBed } from '@angular/core/testing';
import { SelectableListService } from './selectable-list.service';
import { SelectableListsState } from './selectable-list.reducer';
import { ListableObject } from '../../object-collection/shared/listable-object.model';
import { hasValue } from '../../empty.util';
import { SelectableListDeselectAction, SelectableListDeselectSingleAction, SelectableListSelectAction, SelectableListSelectSingleAction } from './selectable-list.actions';
class SelectableObject extends ListableObject {
constructor(private value: string) {
super();
}
equals(other: SelectableObject): boolean {
return hasValue(this.value) && hasValue(other.value) && this.value === other.value;
}
getRenderTypes() {
return ['selectable'];
}
}
describe('SelectableListService', () => {
const listID1 = 'id1';
const value1 = 'Selected object';
const value2 = 'Another selected object';
const value3 = 'Selection';
const value4 = 'Selected object numero 4';
const selected1 = new SelectableObject(value1);
const selected2 = new SelectableObject(value2);
const selected3 = new SelectableObject(value3);
const selected4 = new SelectableObject(value4);
let service: SelectableListService;
const store: Store<SelectableListsState> = jasmine.createSpyObj('store', {
/* tslint:disable:no-empty */
dispatch: {},
/* tslint:enable:no-empty */
});
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
{
provide: Store, useValue: store
}
]
}).compileComponents();
}));
beforeEach(() => {
service = new SelectableListService(store);
});
describe('when the selectSingle method is triggered', () => {
beforeEach(() => {
service.selectSingle(listID1, selected3);
});
it('SelectableListSelectSingleAction should be dispatched to the store', () => {
expect(store.dispatch).toHaveBeenCalledWith(new SelectableListSelectSingleAction(listID1, selected3));
});
});
describe('when the select method is triggered', () => {
beforeEach(() => {
service.select(listID1, [selected1, selected4]);
});
it('SelectableListSelectAction should be dispatched to the store', () => {
expect(store.dispatch).toHaveBeenCalledWith(new SelectableListSelectAction(listID1, [selected1, selected4]));
});
});
describe('when the deselectSingle method is triggered', () => {
beforeEach(() => {
service.deselectSingle(listID1, selected4);
});
it('SelectableListDeselectSingleAction should be dispatched to the store', () => {
expect(store.dispatch).toHaveBeenCalledWith(new SelectableListDeselectSingleAction(listID1, selected4));
});
});
describe('when the deselect method is triggered', () => {
beforeEach(() => {
service.deselect(listID1, [selected2, selected4]);
});
it('SelectableListDeselectAction should be dispatched to the store', () => {
expect(store.dispatch).toHaveBeenCalledWith(new SelectableListDeselectAction(listID1, [selected2, selected4]));
});
});
});