import { enteredCalendarPage } from 'app/common/store/router/router.actions'; import { createCalendarEvents } from 'app/testUtils/mocks/calendar.mock'; import { calendarFetchEventsFailure, calendarFetchEventsRequest, calendarFetchEventsSuccess, calendarSetEvents, } from 'app/modules/calendar/store/calendar.actions'; import { of, throwError } from 'rxjs'; import { calendarFetchEventsEpic, enteredCalendarPageEpic } from './calendar.epic'; import { MiddlewareDependencies, StoreState } from '../../../common/store/store.types'; import { DeepPartial } from 'redux'; import { ActionsObservable, StateObservable } from 'redux-observable'; describe('Calendar epic tests', () => { let dependencies: MiddlewareDependencies; const mockCalendarEvents = createCalendarEvents(); beforeEach(() => { dependencies = ({ calendarService: { getCalendarEvents: jest.fn(() => { return of(mockCalendarEvents); }), }, } as DeepPartial) as MiddlewareDependencies; }); it('requests events fetch on calendar page enter', done => { const action$ = ActionsObservable.of(enteredCalendarPage()); const state$ = {} as StateObservable; const expectedOutputActions = calendarFetchEventsRequest(); enteredCalendarPageEpic(action$, state$, dependencies).subscribe( (actualOutputAction) => { expect(actualOutputAction).toEqual(expectedOutputActions); done(); }, () => { done('epic is in error state'); } ); }); it('fetches events', done => { const action$ = ActionsObservable.of(calendarFetchEventsRequest()); const state$ = {} as StateObservable; const expectedOutputActions = [ calendarSetEvents(mockCalendarEvents), calendarFetchEventsSuccess(), ]; calendarFetchEventsEpic(action$, state$, dependencies).subscribe( (actualOutputAction) => { expect(actualOutputAction).toEqual(expectedOutputActions); done(); }, () => { done('epic is in error state'); } ); }); it('returns error action on fetch events failure', done => { dependencies.calendarService.getCalendarEvents = jest.fn(() => { return throwError(''); }); const action$ = ActionsObservable.of(calendarFetchEventsRequest()); const state$ = {} as StateObservable; const expectedOutputActions = calendarFetchEventsFailure(); calendarFetchEventsEpic(action$, state$, dependencies).subscribe( (actualOutputAction) => { expect(actualOutputAction).toEqual(expectedOutputActions); done(); }, () => { done('epic is in error state'); } ); }); });