nexshop-web-contents
Version:
Nexshop Web Contents Project
113 lines (93 loc) • 4.43 kB
JavaScript
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;
});
});
});