UNPKG

react-url-query

Version:

A library for managing state through query parameters in the URL in React. Works well with or without Redux and React Router.

112 lines (93 loc) 3.89 kB
'use strict'; var _urlQueryMiddleware = require('../urlQueryMiddleware'); var _urlQueryMiddleware2 = _interopRequireDefault(_urlQueryMiddleware); var _urlQueryReducer = require('../urlQueryReducer'); var _urlQueryReducer2 = _interopRequireDefault(_urlQueryReducer); var _urlQueryConfig = require('../../urlQueryConfig'); var _urlQueryConfig2 = _interopRequireDefault(_urlQueryConfig); var _configureUrlQuery = require('../../configureUrlQuery'); var _configureUrlQuery2 = _interopRequireDefault(_configureUrlQuery); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } jest.mock('../urlQueryReducer'); it('only runs on url query actions', function () { var options = { reducer: jest.fn(), readLocationFromStore: false }; var store = { getState: function getState() { return {}; } }; var next = jest.fn(); var action = { type: 'ACTION_TYPE' }; (0, _urlQueryMiddleware2.default)(options)(store)(next)(action); expect(next).toBeCalledWith(action); expect(options.reducer).not.toBeCalled(); var action2 = { type: 'ACTION_TYPE', meta: { one: 1 } }; (0, _urlQueryMiddleware2.default)(options)(store)(next)(action2); expect(next).toBeCalledWith(action2); expect(options.reducer).not.toBeCalled(); var action3 = { type: 'ACTION_TYPE', meta: { urlQuery: true } }; (0, _urlQueryMiddleware2.default)(options)(store)(next)(action3); expect(next).not.toBeCalledWith(action3); expect(options.reducer).toBeCalledWith(action3); }); it('passes to next reducer if shortciruit is false', function () { var options = { reducer: jest.fn(), readLocationFromStore: false, shortcircuit: false }; var store = { getState: function getState() { return {}; } }; var next = jest.fn(); var action = { type: 'ACTION_TYPE', meta: { urlQuery: true } }; (0, _urlQueryMiddleware2.default)(options)(store)(next)(action); expect(options.reducer).toBeCalledWith(action); expect(next).toBeCalledWith(action); }); it('reads location from store', function () { var options = { reducer: jest.fn(), readLocationFromStore: function readLocationFromStore(state) { return state.location; } }; var store = { getState: function getState() { return { location: 'location' }; } }; var next = jest.fn(); var action = { type: 'ACTION_TYPE', meta: { urlQuery: true } }; (0, _urlQueryMiddleware2.default)(options)(store)(next)(action); expect(options.reducer).toBeCalledWith(action, 'location'); }); it('uses reducer from urlQueryConfig if not passed in', function () { (0, _configureUrlQuery2.default)({ reducer: jest.fn() }); var options = { readLocationFromStore: false }; var store = { getState: function getState() { return {}; } }; var next = jest.fn(); var action = { type: 'ACTION_TYPE', meta: { urlQuery: true } }; (0, _urlQueryMiddleware2.default)(options)(store)(next)(action); expect(_urlQueryConfig2.default.reducer).toBeCalledWith(action); // reset urlQueryConfig (0, _configureUrlQuery2.default)({ reducer: undefined }); }); it('uses default reducer if none in options or urlQueryConfig', function () { var options = { readLocationFromStore: false }; var store = { getState: function getState() { return {}; } }; var next = jest.fn(); var action = { type: 'ACTION_TYPE', meta: { urlQuery: true } }; (0, _urlQueryMiddleware2.default)(options)(store)(next)(action); expect(_urlQueryReducer2.default).toBeCalledWith(action); }); it('works given no options', function () { var options = undefined; var store = { getState: function getState() { return {}; } }; var next = jest.fn(); var action = { type: 'ACTION_TYPE', meta: { urlQuery: true } }; (0, _urlQueryMiddleware2.default)(options)(store)(next)(action); expect(_urlQueryReducer2.default).toBeCalledWith(action, undefined); });