twreporter-redux
Version:
redux actions and reducers for twreporter website
186 lines (151 loc) • 5.79 kB
JavaScript
;
var _reduxStateFields = require('../../constants/redux-state-fields');
var _reduxStateFields2 = _interopRequireDefault(_reduxStateFields);
var _entities = require('../entities');
var _entities2 = _interopRequireDefault(_entities);
var _actionTypes = require('../../constants/action-types');
var _actionTypes2 = _interopRequireDefault(_actionTypes);
var _cloneDeep = require('lodash/cloneDeep');
var _cloneDeep2 = _interopRequireDefault(_cloneDeep);
var _merge = require('lodash/merge');
var _merge2 = _interopRequireDefault(_merge);
var _chai = require('chai');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /* global describe, it*/
// lodash
var _ = {
cloneDeep: _cloneDeep2.default,
merge: _merge2.default
};
var post1 = {
id: 'post-id-1',
slug: 'post-slug-1'
};
var post2 = {
id: 'post-id-2',
slug: 'post-slug-2'
};
var post3 = {
id: 'post-id-3',
slug: 'post-slug-3'
};
var post4 = {
id: 'post-id-4',
slug: 'post-slug-4'
};
var fullTopic = {
id: 'topic-id-1',
slug: 'topic-slug-1',
relateds: [post3, post4],
full: true
};
var nonFullTopic = {
id: 'topic-id-2',
slug: 'topic-slug-2',
full: false
};
describe('entities reducer', function () {
it('should return the initial state', function () {
(0, _chai.expect)((0, _entities2.default)({}, {})).to.deep.equal({});
});
it('should handle GET_CONTENT_FOR_INDEX_PAGE', function () {
var _payload;
(0, _chai.expect)((0, _entities2.default)({
posts: _defineProperty({}, post1.slug, _.cloneDeep(post1)),
topics: _defineProperty({}, fullTopic.slug, _.cloneDeep(fullTopic))
}, {
type: _actionTypes2.default.GET_CONTENT_FOR_INDEX_PAGE,
payload: (_payload = {}, _defineProperty(_payload, _reduxStateFields2.default.latest, _.cloneDeep([post1, post2])), _defineProperty(_payload, _reduxStateFields2.default.editorPicks, _.cloneDeep([post1])), _defineProperty(_payload, _reduxStateFields2.default.reviews, _.cloneDeep([post3])), _defineProperty(_payload, _reduxStateFields2.default.latestTopic, _.cloneDeep(fullTopic)), _defineProperty(_payload, _reduxStateFields2.default.topics, _.cloneDeep([nonFullTopic])), _defineProperty(_payload, _reduxStateFields2.default.photos, _.cloneDeep([post1, post4])), _defineProperty(_payload, _reduxStateFields2.default.infographics, _.cloneDeep([post2, post3])), _payload)
})).to.deep.equal({
posts: {
'post-slug-1': post1,
'post-slug-2': post2,
'post-slug-3': post3,
'post-slug-4': post4
},
topics: {
'topic-slug-1': _.merge({}, fullTopic, {
relateds: [post3.slug, post4.slug]
}),
'topic-slug-2': nonFullTopic
}
});
});
it('should handle GET_TOPICS_FOR_INDEX_PAGE', function () {
(0, _chai.expect)((0, _entities2.default)({}, {
type: _actionTypes2.default.GET_TOPICS_FOR_INDEX_PAGE,
payload: {
items: _.cloneDeep([nonFullTopic])
}
})).to.deep.equal({
topics: _defineProperty({}, nonFullTopic.slug, nonFullTopic)
});
});
it('should handle GET_EDITOR_PICKED_POSTS', function () {
(0, _chai.expect)((0, _entities2.default)({}, {
type: _actionTypes2.default.GET_EDITOR_PICKED_POSTS,
payload: {
items: _.cloneDeep([post1])
}
})).to.deep.equal({
posts: _defineProperty({}, post1.slug, post1)
});
});
it('should handle GET_PHOTOGRAPHY_POSTS_FOR_INDEX_PAGE', function () {
(0, _chai.expect)((0, _entities2.default)({}, {
type: _actionTypes2.default.GET_PHOTOGRAPHY_POSTS_FOR_INDEX_PAGE,
payload: {
items: _.cloneDeep([post1])
}
})).to.deep.equal({
posts: _defineProperty({}, post1.slug, post1)
});
});
it('should handle GET_INFOGRAPHIC_POSTS_FOR_INDEX_PAGE', function () {
(0, _chai.expect)((0, _entities2.default)({}, {
type: _actionTypes2.default.GET_INFOGRAPHIC_POSTS_FOR_INDEX_PAGE,
payload: {
items: _.cloneDeep([post1])
}
})).to.deep.equal({
posts: _defineProperty({}, post1.slug, post1)
});
});
it('should handle GET_LISTED_POSTS', function () {
(0, _chai.expect)((0, _entities2.default)({}, {
type: _actionTypes2.default.GET_LISTED_POSTS,
payload: {
items: _.cloneDeep([post1])
}
})).to.deep.equal({
posts: _defineProperty({}, post1.slug, post1)
});
});
it('should handle GET_A_FULL_POST', function () {
var _posts6;
var post = _.cloneDeep(post1);
post.relateds = [post2, post3];
post.topics = nonFullTopic;
(0, _chai.expect)((0, _entities2.default)({}, {
type: _actionTypes2.default.GET_A_FULL_POST,
payload: post
})).to.deep.equal({
posts: (_posts6 = {}, _defineProperty(_posts6, post1.slug, _.merge({}, post1, {
relateds: [post2.slug, post3.slug],
topics: nonFullTopic.slug
})), _defineProperty(_posts6, post2.slug, post2), _defineProperty(_posts6, post3.slug, post3), _posts6),
topics: _defineProperty({}, nonFullTopic.slug, nonFullTopic)
});
});
it('should handle GET_A_FULL_TOPIC', function () {
var _posts7;
var topic = _.cloneDeep(fullTopic);
(0, _chai.expect)((0, _entities2.default)({}, {
type: _actionTypes2.default.GET_A_FULL_TOPIC,
payload: topic
})).to.deep.equal({
posts: (_posts7 = {}, _defineProperty(_posts7, post3.slug, post3), _defineProperty(_posts7, post4.slug, post4), _posts7),
topics: _defineProperty({}, topic.slug, topic)
});
});
});