@aetherall/react-router-relative-link
Version:
A wrapper around react-router's Link that allows relative paths.
144 lines (131 loc) • 6.33 kB
JavaScript
;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _enzyme = require('enzyme');
var _CoreLink = require('./CoreLink');
var _CoreLink2 = _interopRequireDefault(_CoreLink);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var noop = function noop() {
return null;
};
var Component = function Component(props) {
return _react2.default.createElement(_CoreLink2.default, _extends({ BaseComponent: noop }, props));
};
describe('CoreLink', function () {
describe('when the current path is "/zoo"', function () {
var match = { url: '/zoo' };
var baseLinkSpy = void 0;
beforeEach(function () {
baseLinkSpy = jest.fn().mockImplementation(noop);
});
afterEach(function () {
baseLinkSpy.mockRestore();
});
it('should call the base Link once when rendered', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: 'lions' }));
expect(baseLinkSpy).toHaveBeenCalledTimes(1);
});
it('should not pass "match" to the base Link', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: 'lions' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.match).toBe(undefined);
});
it('resolves to "/zoo/lions" when given "lions"', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: 'lions' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/zoo/lions');
});
it('resolves to "/zoo/lions" when given "./lions"', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: './lions' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/zoo/lions');
});
it('resolves to "/" when given "/"', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: '/' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/');
});
it('resolves to "/bar" when given "/bar"', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: '/bar' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/bar');
});
});
describe('when the current path is "/zoo/lions"', function () {
var match = { url: '/zoo/lions' };
var baseLinkSpy = void 0;
beforeEach(function () {
baseLinkSpy = jest.fn().mockImplementation(noop);
});
afterEach(function () {
baseLinkSpy.mockRestore();
});
it('resolves to "/zoo/giraffes" when given "../giraffes"', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: '../giraffes' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/zoo/giraffes');
});
it('resolves to "/zoo/lions/mountain" when given "../giraffes"', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: 'mountain' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/zoo/lions/mountain');
});
it('resolves to "/zoo" when given ".."', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: '..' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/zoo');
});
it('resolves to "/zoo/lions" when given "."', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: '.' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/zoo/lions');
});
});
describe('when the current path is "/"', function () {
var match = { url: '/' };
var baseLinkSpy = void 0;
beforeEach(function () {
baseLinkSpy = jest.fn().mockImplementation(noop);
});
afterEach(function () {
baseLinkSpy.mockRestore();
});
it('resolves to "/zoo" when given "zoo"', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: 'zoo' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/zoo');
});
it('resolves to "/zoo" when given "/zoo"', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: '/zoo' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/zoo');
});
it('resolves to "/zoo" when given "/zoo/"', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: '/zoo/' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/zoo');
});
it('resolves to "/zoo" when given "zoo/"', function () {
(0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: 'zoo/' }));
var props = baseLinkSpy.mock.calls[0][0];
expect(props.to).toBe('/zoo');
});
});
describe('when changing props', function () {
var match = { url: '/foo' };
var baseLinkSpy = void 0;
beforeEach(function () {
baseLinkSpy = jest.fn().mockImplementation(noop);
});
afterEach(function () {
baseLinkSpy.mockRestore();
});
it('respects the new value of "match"', function () {
var wrapper = (0, _enzyme.mount)(_react2.default.createElement(Component, { BaseComponent: baseLinkSpy, match: match, to: 'bar' }));
wrapper.setProps({ match: { url: '/baz' }, to: 'bar' });
var props = baseLinkSpy.mock.calls[1][0];
expect(props.to).toBe('/baz/bar');
});
});
});