twreporter-redux
Version:
redux actions and reducers for twreporter website
139 lines (105 loc) • 6.48 kB
JavaScript
var _chai = require('chai');
var _chai2 = _interopRequireDefault(_chai);
var _chaiAsPromised = require('chai-as-promised');
var _chaiAsPromised2 = _interopRequireDefault(_chaiAsPromised);
var _reduxMockStore = require('redux-mock-store');
var _reduxMockStore2 = _interopRequireDefault(_reduxMockStore);
var _reduxStateFields = require('../../constants/redux-state-fields');
var _reduxStateFields2 = _interopRequireDefault(_reduxStateFields);
var _nock = require('nock');
var _nock2 = _interopRequireDefault(_nock);
var _reduxThunk = require('redux-thunk');
var _reduxThunk2 = _interopRequireDefault(_reduxThunk);
var _actionTypes = require('../../constants/action-types');
var _actionTypes2 = _interopRequireDefault(_actionTypes);
var _indexPage = require('../index-page');
var actions = _interopRequireWildcard(_indexPage);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
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, context, it, afterEach */
/*
Testing functions:
fetchIndexPageContent
*/
_chai2.default.use(_chaiAsPromised2.default);
var expect = _chai2.default.expect;
var middlewares = [_reduxThunk2.default];
var mockStore = (0, _reduxMockStore2.default)(middlewares);
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-1',
slug: 'topic-slug-1',
full: false
};
process.env.NODE_ENV = 'development';
/* Fetch a full post, whose assets like relateds, leading_video ...etc are all complete,
* @param {string} slug - slug of post
*/
/*
========= Testing fetchAFullPost ==========
*/
describe('Testing fetchIndexPageContent:', function () {
afterEach(function () {
_nock2.default.cleanAll();
});
context('Contents are already existed', function () {
it('Should dispatch no actions and return Promise.resolve()', function () {
var _fieldNames$indexPage;
var store = mockStore(_defineProperty({}, _reduxStateFields2.default.indexPage, (_fieldNames$indexPage = {}, _defineProperty(_fieldNames$indexPage, _reduxStateFields2.default.latest, [post1, post2]), _defineProperty(_fieldNames$indexPage, _reduxStateFields2.default.editorPicks, [post3]), _defineProperty(_fieldNames$indexPage, _reduxStateFields2.default.latestTopic, fullTopic), _defineProperty(_fieldNames$indexPage, _reduxStateFields2.default.reviews, [post4]), _defineProperty(_fieldNames$indexPage, _reduxStateFields2.default.topics, [nonFullTopic]), _defineProperty(_fieldNames$indexPage, _reduxStateFields2.default.photos, [post2]), _defineProperty(_fieldNames$indexPage, _reduxStateFields2.default.infographics, [post3]), _fieldNames$indexPage)));
store.dispatch(actions.fetchIndexPageContent());
expect(store.getActions().length).to.equal(0); // no action is dispatched
return expect(store.dispatch(actions.fetchIndexPageContent())).eventually.equal(undefined);
});
});
context('Lacks of contents', function () {
it('Should dispatch types.GET_CONTENT_FOR_INDEX_PAGE', function () {
var _records;
var store = mockStore();
var mockApiResponse = {
records: (_records = {}, _defineProperty(_records, _reduxStateFields2.default.latest, [post1, post2]), _defineProperty(_records, _reduxStateFields2.default.editorPicks, [post3]), _defineProperty(_records, _reduxStateFields2.default.latestTopic, [fullTopic]), _defineProperty(_records, _reduxStateFields2.default.reviews, [post4]), _defineProperty(_records, _reduxStateFields2.default.topics, [nonFullTopic]), _defineProperty(_records, _reduxStateFields2.default.photos, [post2]), _defineProperty(_records, _reduxStateFields2.default.infographics, [post3]), _records)
};
(0, _nock2.default)('http://localhost:8080').get(encodeURI('/v1/index_page')).reply(200, mockApiResponse);
return store.dispatch(actions.fetchIndexPageContent()).then(function () {
var _expect$to$deep$equal;
expect(store.getActions().length).to.equal(2); // 2 actions: REQUEST && SUCCESS
expect(store.getActions()[0].type).to.deep.equal(_actionTypes2.default.START_TO_GET_INDEX_PAGE_CONTENT);
expect(store.getActions()[1].type).to.equal(_actionTypes2.default.GET_CONTENT_FOR_INDEX_PAGE);
expect(store.getActions()[1].payload).to.deep.equal((_expect$to$deep$equal = {}, _defineProperty(_expect$to$deep$equal, _reduxStateFields2.default.latest, [post1, post2]), _defineProperty(_expect$to$deep$equal, _reduxStateFields2.default.editorPicks, [post3]), _defineProperty(_expect$to$deep$equal, _reduxStateFields2.default.latestTopic, [fullTopic]), _defineProperty(_expect$to$deep$equal, _reduxStateFields2.default.reviews, [post4]), _defineProperty(_expect$to$deep$equal, _reduxStateFields2.default.topics, [nonFullTopic]), _defineProperty(_expect$to$deep$equal, _reduxStateFields2.default.photos, [post2]), _defineProperty(_expect$to$deep$equal, _reduxStateFields2.default.infographics, [post3]), _expect$to$deep$equal));
});
});
});
context('If the api returns a failure', function () {
it('Should dispatch types.ERROR_TO_GET_INDEX_PAGE_CONTENT', function () {
var store = mockStore();
(0, _nock2.default)('http://localhost:8080').get('/v1/index_Page').reply(404);
return store.dispatch(actions.fetchIndexPageContent()).then(function () {
expect(store.getActions().length).to.equal(2); // 2 actions: REQUEST && FAILURE
expect(store.getActions()[0].type).to.deep.equal(_actionTypes2.default.START_TO_GET_INDEX_PAGE_CONTENT);
expect(store.getActions()[1].type).to.equal(_actionTypes2.default.ERROR_TO_GET_INDEX_PAGE_CONTENT);
expect(store.getActions()[1].errorMsg).to.not.equal('');
});
});
});
});
;