UNPKG

twreporter-redux

Version:

redux actions and reducers for twreporter website

139 lines (105 loc) 6.48 kB
'use strict'; 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(''); }); }); }); });