occsn-checkout
Version:
Occasion checkout experience boilerplate component built using React-Redux and Mitragyna
54 lines (40 loc) • 1.66 kB
JavaScript
import configureMockStore from 'redux-mock-store'
import thunk from 'redux-thunk';
import ActiveResource from 'active-resource';
import Immutable from 'immutable';
import occsn from '../../app/libs/Occasion'
import * as actions from '../../app/actions/calendarActions'
import types from '../../app/constants/calendarConstants'
import axios from 'axios';
import productFixture from '../fixtures/products/cash.json';
import blankQuestionsFixture from '../fixtures/blank.json';
import timeSlotsFixture from '../fixtures/products/time_slots/index.json';
const middlewares = [thunk];
const mockStore = configureMockStore(middlewares);
describe('calendar actions', () => {
beforeEach(() => {
axios._setMockResponses({
'/products/:id/': { status: 200, data: productFixture },
'/products/:id/time_slots/': { status: 200, data: timeSlotsFixture },
});
});
describe('loadProductTimeSlots', () => {
let store, product;
beforeEach(async () => {
store = mockStore({
$$calendarStore: Immutable.fromJS({ activeTimeSlotsCollection: ActiveResource.Collection.build() })
});
product = await occsn.Product.find('1');
await store.dispatch(actions.loadProductTimeSlots(product));
});
it('filters by status bookable when requesting time slots', async () => {
expect(axios.requests[1].params).toEqual({ filter: { status: 'bookable' } });
});
it('creates appropriate actions', async () => {
expect(typesForActions(store.getActions())).toEqual([
types.OCCSN_LOAD_PRODUCT_TIME_SLOTS_REQUEST,
types.OCCSN_SET_ACTIVE_TIME_SLOTS_COLLECTION
]);
});
});
});