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
JavaScript
;
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);
});