clone of github.com/decent-newsroom/newsroom
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

"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; } })));
});
});