UNPKG

nexshop-web-contents

Version:

Nexshop Web Contents Project

113 lines (93 loc) 4.43 kB
import React from 'react'; import {expect} from 'chai'; import {shallow} from 'enzyme'; import configureStore from 'redux-mock-store'; import sinon from "sinon"; import * as Redux from "redux"; import {previewActions, contentItemModel} from "nexshop-web-store"; import PlaylistPreview from '../../../../src/component/preview/playlist/playlist-preview'; import PlaylistPreviewListView from "../../../../src/component/preview/playlist/playlist-preview-list-view"; import PlaylistPreviewHeaderView from "../../../../src/component/preview/playlist/playlist-preview-header-view"; import PlaylistPreviewDetailView from "../../../../src/component/preview/playlist/playlist-preview-detail-view"; describe('Playlist Preview Spec', () => { const contentItems = [ contentItemModel.createContentItem({contentUrl: 'some url'}), contentItemModel.createContentItem({contentUrl: 'contentUrl2'}) ]; const {selectPreviewItem} = previewActions; let wrapper; let mockStore; let spySelectPreviewItem; let spyDeletePreviewPreviousIndex; let mockHistory = { goBack: sinon.spy() }; beforeEach(() => { spySelectPreviewItem = sinon.spy(); spyDeletePreviewPreviousIndex = sinon.spy(); sinon.stub(Redux, "bindActionCreators").returns({ selectPreviewItem: spySelectPreviewItem, deletePreviewPreviousIndex: spyDeletePreviewPreviousIndex, }); mockStore = configureStore()({ preview: { name: 'X-Men Begins', contentItems: contentItems, selectedPreviewItemIndex: 1, selectedPreviewPreviousItemIndex: 0, previewWindowSize: {width: 2560, height: 1440}, resolution: '16x9' } }); wrapper = shallow(<PlaylistPreview store={mockStore} history={mockHistory}/>).dive(); }); afterEach(() => { mockHistory.goBack.reset(); Redux.bindActionCreators.restore(); }); describe('Mapping props', () => { it('has playlist name', () => { expect(wrapper.instance().props.name).to.equal('X-Men Begins'); }); it('has selectedPreviewItemIndex', () => { expect(wrapper.instance().props.selectedPreviewItemIndex).to.equal(1); }); it('bindActionCreators', () => { let actions = Redux.bindActionCreators.lastCall.args[0]; const actionsKeys = Object.keys(actions); expect(actionsKeys).to.deep.equal(['selectPreviewItem','deletePreviewPreviousIndex']); expect(actions.selectPreviewItem).to.equal(selectPreviewItem); }); it('has action selectPreviewItem', () => { expect(wrapper.instance().props.actions).to.deep.equal({ selectPreviewItem: spySelectPreviewItem, deletePreviewPreviousIndex: spyDeletePreviewPreviousIndex, }); }); }); describe('passes props', () => { it('passes name and onClickClose props to PlaylistPreviewHeaderView', () => { expect(wrapper.find(PlaylistPreviewHeaderView).prop('name')).to.equal('X-Men Begins'); expect(wrapper.find(PlaylistPreviewHeaderView).prop('onClickClose')).to.equal(wrapper.instance().onClickClose); }); it('passes playlist, selectedPreviewItemIndex and onSelectPreviewItem props to PlaylistPreviewListView', () => { expect(wrapper.find(PlaylistPreviewListView).prop('contentItems')).to.equal(contentItems); expect(wrapper.find(PlaylistPreviewListView).prop('selectedPreviewItemIndex')).to.equal(1); expect(wrapper.find(PlaylistPreviewListView).prop('onSelectPreviewItem')).to.equal(spySelectPreviewItem); }); it('passes contentUrl props to PlaylistPreviewDetailView', () => { expect(wrapper.find(PlaylistPreviewDetailView).prop('contentItem').contents.contentUrl).to.equal(contentItems[1].contents.contentUrl); }); }); describe('onClickClose', () => { beforeEach(() => { wrapper.instance().onClickClose(); }); it('calls history.goBack', () => { expect(mockHistory.goBack.called).to.be.true; }); it('dispatches selectPreviewItem with zero', () => { expect(spySelectPreviewItem.calledWith(0)).to.be.true; }); }); });