"use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; var React = require("react"); var enzyme_1 = require("enzyme"); var redux_1 = require("redux"); var react_redux_1 = require("react-redux"); var enhanceComponent_1 = require("../enhanceComponent"); ; ; ; ; ; ; var HelloWorld = function (_a) { var name = _a.name; return React.createElement("div", null, "Hello ", name, "!"); }; var FooBar = function (_a) { var onClick = _a.onClick, name = _a.name; return React.createElement("button", { onClick: onClick }, name); }; var EnhancedHelloWorld = enhanceComponent_1["default"](react_redux_1.connect(function (state) { return ({ name: state.name }); })(HelloWorld)); var EnhancedFooBar = enhanceComponent_1["default"](react_redux_1.connect(function (_a) { var name = _a.name; return ({ name: name }); }, { onClick: function () { return ({ type: 'Bar' }); } })(FooBar)); describe('enhanceComponent', function () { it('should render the content of enhanceable component', function () { var component = enzyme_1.shallow(React.createElement(HelloWorld, { name: "Tomas Weiss" })); expect(component.text()).toEqual('Hello Tomas Weiss!'); }); it('should allow connect nesting by providing selector', function () { var initialState = { nested: { name: 'Tomas Weiss' } }; var identityReducer = function (value) { if (value === void 0) { value = initialState; } return value; }; var store = redux_1.createStore(identityReducer); var component = enzyme_1.mount(React.createElement(react_redux_1.Provider, { store: store }, React.createElement(EnhancedHelloWorld, { selector: function (state) { return state.nested; }, wrapper: function (type) { return "Foo." + type; } }))); expect(component.text()).toEqual('Hello Tomas Weiss!'); }); it('should allow wrapping all the outgoing actions in redux store context', function () { var store = redux_1.createStore(function (state, _a) { if (state === void 0) { state = { nested: { name: '' } }; } var type = _a.type; if (type === 'Foo.Bar') { return __assign({}, state, { nested: __assign({}, state.nested, { name: '42' }) }); } else { return state; } }); var component = enzyme_1.mount(React.createElement(react_redux_1.Provider, { store: store }, React.createElement(EnhancedFooBar, { selector: function (value) { return value.nested; }, wrapper: function (type) { return "Foo." + type; } }))); component.find('button').simulate('click'); expect(store.getState()).toEqual({ nested: { name: '42' } }); }); it('should allow nested wrapping & selectors', function () { var appState = { foo: { nested: { name: 'Tomas Weiss' } } }; var store = redux_1.createStore(function (state, action) { if (state === void 0) { state = appState; } if (action.type === 'Root.Sub.Bar') { return __assign({}, state, { foo: __assign({}, state.foo, { nested: { name: 'John Doe' } }) }); } return state; }); var Root = function () { return (React.createElement(EnhancedFooBar, { wrapper: function (type) { return "Sub." + type; }, selector: function (state) { return state.nested; } })); }; var EnhancedRoot = enhanceComponent_1["default"](react_redux_1.connect(function (state) { return state; })(Root)); var component = enzyme_1.mount(React.createElement(react_redux_1.Provider, { store: store }, React.createElement(EnhancedRoot, { wrapper: function (type) { return "Root." + type; }, selector: function (state) { return state.foo; } }))); var button = component.find('button'); expect(button.text()).toEqual('Tomas Weiss'); button.simulate('click'); expect(button.text()).toEqual('John Doe'); }); it('should not pass down selector and wrapper to enhanced Component', function (done) { var identityReducer = function (value) { if (value === void 0) { value = 42; } return value; }; var store = redux_1.createStore(identityReducer); ; var EnhancedHelloWorld = enhanceComponent_1["default"](react_redux_1.connect(function (state) { return ({}); })(function (props) { expect(props.selector).toBeUndefined(); expect(props.wrapper).toBeUndefined(); done(); return React.createElement("div", null); })); var component = enzyme_1.mount(React.createElement(react_redux_1.Provider, { store: store }, React.createElement(EnhancedHelloWorld, { wrapper: function (type) { return type; }, selector: function (state) { return state; } }))); }); });