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.

151 lines (118 loc) 4.97 kB
'use strict'; var _urlQueryDecoder = require('../urlQueryDecoder'); var _urlQueryDecoder2 = _interopRequireDefault(_urlQueryDecoder); var _UrlQueryParamTypes = require('../UrlQueryParamTypes'); var _UrlQueryParamTypes2 = _interopRequireDefault(_UrlQueryParamTypes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } it('works with basic configuration', function () { var urlPropsQueryConfig = { foo: { type: _UrlQueryParamTypes2.default.number }, bar: { type: _UrlQueryParamTypes2.default.string } }; var decode = (0, _urlQueryDecoder2.default)(urlPropsQueryConfig); var decoded = decode({ foo: '137', bar: 'str' }); expect(decoded).toEqual({ foo: 137, bar: 'str' }); }); it('works with different named query param', function () { var urlPropsQueryConfig = { foo: { type: _UrlQueryParamTypes2.default.number, queryParam: 'fooInUrl' }, bar: { type: _UrlQueryParamTypes2.default.string } }; var decode = (0, _urlQueryDecoder2.default)(urlPropsQueryConfig); var decoded = decode({ fooInUrl: '137', bar: 'str' }); expect(decoded).toEqual({ foo: 137, bar: 'str' }); }); it('validate filters out invalid params', function () { var urlPropsQueryConfig = { foo: { type: _UrlQueryParamTypes2.default.number, validate: function validate(foo) { return foo > 100; } }, bar: { type: _UrlQueryParamTypes2.default.string } }; var decode = (0, _urlQueryDecoder2.default)(urlPropsQueryConfig); expect(decode({ foo: '137', bar: 'str' })).toEqual({ foo: 137, bar: 'str' }); expect(decode({ foo: '99', bar: 'str' })).toEqual({ bar: 'str' }); }); it('uses cached decoded values if encoded values have not changed', function () { var urlPropsQueryConfig = { foo: { type: _UrlQueryParamTypes2.default.array }, bar: { type: _UrlQueryParamTypes2.default.string } }; var decode = (0, _urlQueryDecoder2.default)(urlPropsQueryConfig); var decoded = decode({ foo: '137_94', bar: 'str' }); expect(decode({ foo: '137_94', bar: 'bar' }).foo).toBe(decoded.foo); expect(decode({ foo: '137_95', bar: 'bar' }).foo).not.toBe(decoded.foo); }); it('respects the `defaultValue` configuration', function () { var urlPropsQueryConfig = { foo: { type: _UrlQueryParamTypes2.default.number, defaultValue: 42 }, bar: { type: _UrlQueryParamTypes2.default.string } }; var decode = (0, _urlQueryDecoder2.default)(urlPropsQueryConfig); var decoded = decode({ bar: 'str' }); expect(decoded).toEqual({ foo: 42, bar: 'str' }); }); it('respects the `defaultValue` configuration for the properties with named `queryParam`', function () { var urlPropsQueryConfig = { foo: { type: _UrlQueryParamTypes2.default.number, queryParam: 'fooInUrl', defaultValue: 42 }, bar: { type: _UrlQueryParamTypes2.default.string } }; var decode = (0, _urlQueryDecoder2.default)(urlPropsQueryConfig); var decoded = decode({ bar: 'str' }); expect(decoded).toEqual({ foo: 42, bar: 'str' }); }); it('respects custom decoders', function () { var urlPropsQueryConfig = { foo: { type: function type(value) { return Number(value) + 1; } }, bar: { type: _UrlQueryParamTypes2.default.string } }; var decode = (0, _urlQueryDecoder2.default)(urlPropsQueryConfig); var decoded = decode({ foo: '137', bar: 'str' }); expect(decoded).toEqual({ foo: 138, bar: 'str' }); }); it('respects custom decoders with named `queryParam`', function () { var urlPropsQueryConfig = { foo: { type: function type(value) { return Number(value) + 1; }, queryParam: 'fooInUrl' }, bar: { type: _UrlQueryParamTypes2.default.string } }; var decode = (0, _urlQueryDecoder2.default)(urlPropsQueryConfig); var decoded = decode({ fooInUrl: '137', bar: 'str' }); expect(decoded).toEqual({ foo: 138, bar: 'str' }); }); it('respects the `defaultValue` configuration with a custom decoder', function () { var urlPropsQueryConfig = { foo: { type: function type(value, defaultValue) { return value === '137' ? defaultValue : Number(value); }, defaultValue: 42 }, bar: { type: _UrlQueryParamTypes2.default.string } }; var decode = (0, _urlQueryDecoder2.default)(urlPropsQueryConfig); var decoded = decode({ foo: '137', bar: 'str' }); expect(decoded).toEqual({ foo: 42, bar: 'str' }); }); it('respects the `defaultValue` configuration with a custom decoder and a named `queryParam`', function () { var urlPropsQueryConfig = { foo: { type: function type(value, defaultValue) { return value === '137' ? defaultValue : Number(value); }, defaultValue: 42, queryParam: 'fooInUrl' }, bar: { type: _UrlQueryParamTypes2.default.string } }; var decode = (0, _urlQueryDecoder2.default)(urlPropsQueryConfig); var decoded = decode({ fooInUrl: '137', bar: 'str' }); expect(decoded).toEqual({ foo: 42, bar: 'str' }); });