diff --git a/src/app/shared/sidebar/filter/sidebar-filter.service.spec.ts b/src/app/shared/sidebar/filter/sidebar-filter.service.spec.ts new file mode 100644 index 0000000000..83eee3aad5 --- /dev/null +++ b/src/app/shared/sidebar/filter/sidebar-filter.service.spec.ts @@ -0,0 +1,109 @@ +import { async, TestBed } from '@angular/core/testing'; +import * as ngrx from '@ngrx/store'; +import { Store, StoreModule } from '@ngrx/store'; +import { provideMockStore } from '@ngrx/store/testing'; +import { cold } from 'jasmine-marbles'; + +import { sidebarFilterReducer } from './sidebar-filter.reducer'; +import { SidebarFilterService } from './sidebar-filter.service'; +import { + FilterCollapseAction, + FilterExpandAction, + FilterInitializeAction, + FilterToggleAction +} from './sidebar-filter.actions'; + +describe('SidebarFilterService', () => { + let service: SidebarFilterService; + let selectSpy; + let store: any; + let initialState; + + function init() { + + initialState = { + sidebarFilter: { + filter_1 : { + filterCollapsed: true + }, + filter_2 : { + filterCollapsed: false + }, + filter_3 : { + filterCollapsed: true + } + } + }; + + } + + beforeEach(async(() => { + init(); + TestBed.configureTestingModule({ + imports: [ + StoreModule.forRoot({ sidebarFilter: sidebarFilterReducer }) + ], + providers: [ + provideMockStore({ initialState }), + { provide: SidebarFilterService, useValue: service } + ] + }).compileComponents(); + })); + + beforeEach(() => { + store = TestBed.get(Store); + service = new SidebarFilterService(store); + selectSpy = spyOnProperty(ngrx, 'select').and.callThrough(); + spyOn(store, 'dispatch'); + }); + + describe('initializeFilter', () => { + it('should dispatch an FilterInitializeAction with the correct arguments', () => { + service.initializeFilter('fakeFilter', true); + expect(store.dispatch).toHaveBeenCalledWith(new FilterInitializeAction('fakeFilter', true)); + }); + }); + + describe('collapse', () => { + it('should dispatch an FilterInitializeAction with the correct arguments', () => { + service.collapse('fakeFilter'); + expect(store.dispatch).toHaveBeenCalledWith(new FilterCollapseAction('fakeFilter')); + }); + }); + + describe('expand', () => { + it('should dispatch an FilterInitializeAction with the correct arguments', () => { + service.expand('fakeFilter'); + expect(store.dispatch).toHaveBeenCalledWith(new FilterExpandAction('fakeFilter')); + }); + }); + + describe('toggle', () => { + it('should dispatch an FilterInitializeAction with the correct arguments', () => { + service.toggle('fakeFilter'); + expect(store.dispatch).toHaveBeenCalledWith(new FilterToggleAction('fakeFilter')); + }); + }); + + describe('isCollapsed', () => { + it('should return true', () => { + + const result = service.isCollapsed('filter_1'); + const expected = cold('b', { + b: true + }); + + expect(result).toBeObservable(expected); + }); + + it('should return false', () => { + + const result = service.isCollapsed('filter_2'); + const expected = cold('b', { + b: false + }); + + expect(result).toBeObservable(expected); + }); + }); +});