You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
5.3 KiB
127 lines
5.3 KiB
"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; } }))); |
|
}); |
|
});
|
|
|