// Copyright 2015, 2016 Parity Technologies (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see . import { shallow } from 'enzyme'; import React, { PropTypes } from 'react'; import sinon from 'sinon'; import muiTheme from '../Theme'; import ConfirmDialog from './'; let component; let instance; let onConfirm; let onDeny; function createRedux () { return { dispatch: sinon.stub(), subscribe: sinon.stub(), getState: () => { return { settings: { backgroundSeed: 'xyz' } }; } }; } function render (props = {}) { onConfirm = sinon.stub(); onDeny = sinon.stub(); if (props.visible === undefined) { props.visible = true; } const baseComponent = shallow(
some test content
); instance = baseComponent.instance(); component = baseComponent.find('Connect(Modal)').shallow({ childContextTypes: { muiTheme: PropTypes.object, store: PropTypes.object }, context: { muiTheme, store: createRedux() } }); return component; } describe('ui/ConfirmDialog', () => { it('renders defaults', () => { expect(render()).to.be.ok; }); it('renders the body as provided', () => { expect(render().find('div[id="testContent"]').text()).to.equal('some test content'); }); describe('properties', () => { let props; beforeEach(() => { props = render().props(); }); it('passes the actions', () => { expect(props.actions).to.deep.equal(instance.renderActions()); }); it('passes title', () => { expect(props.title).to.equal('test title'); }); it('passes visiblity flag', () => { expect(props.visible).to.be.true; }); }); describe('renderActions', () => { describe('defaults', () => { let buttons; beforeEach(() => { render(); buttons = instance.renderActions(); }); it('renders with supplied onConfim/onDeny callbacks', () => { expect(buttons[0].props.onClick).to.deep.equal(onDeny); expect(buttons[1].props.onClick).to.deep.equal(onConfirm); }); it('renders default labels', () => { expect(buttons[0].props.label.props.id).to.equal('ui.confirmDialog.no'); expect(buttons[1].props.label.props.id).to.equal('ui.confirmDialog.yes'); }); it('renders default icons', () => { expect(buttons[0].props.icon.type.displayName).to.equal('ContentClear'); expect(buttons[1].props.icon.type.displayName).to.equal('NavigationCheck'); }); }); describe('overrides', () => { let buttons; beforeEach(() => { render({ labelConfirm: 'labelConfirm', labelDeny: 'labelDeny', iconConfirm: 'iconConfirm', iconDeny: 'iconDeny' }); buttons = instance.renderActions(); }); it('renders supplied labels', () => { expect(buttons[0].props.label).to.equal('labelDeny'); expect(buttons[1].props.label).to.equal('labelConfirm'); }); it('renders supplied icons', () => { expect(buttons[0].props.icon).to.equal('iconDeny'); expect(buttons[1].props.icon).to.equal('iconConfirm'); }); }); }); });