UNPKG

@aetherall/react-router-relative-link

Version:

A wrapper around react-router's Link that allows relative paths.

144 lines (131 loc) 6.33 kB
'use strict'; 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'); }); }); });