parent
cdda52d799
commit
a146e5ebbc
@ -0,0 +1,97 @@ |
||||
import React from 'react' |
||||
import assert from 'assert' |
||||
import { shallow } from 'enzyme' |
||||
import sinon from 'sinon' |
||||
import ButtonGroup from '../button-group.component.js' |
||||
|
||||
const childButtonSpies = { |
||||
onClick: sinon.spy(), |
||||
} |
||||
|
||||
sinon.spy(ButtonGroup.prototype, 'handleButtonClick') |
||||
sinon.spy(ButtonGroup.prototype, 'renderButtons') |
||||
|
||||
const mockButtons = [ |
||||
<button onClick={childButtonSpies.onClick} key={'a'}><div className="mockClass" /></button>, |
||||
<button onClick={childButtonSpies.onClick} key={'b'}></button>, |
||||
<button onClick={childButtonSpies.onClick} key={'c'}></button>, |
||||
] |
||||
|
||||
describe('ButtonGroup Component', function () { |
||||
let wrapper |
||||
|
||||
beforeEach(() => { |
||||
wrapper = shallow(<ButtonGroup |
||||
defaultActiveButtonIndex={1} |
||||
disabled={false} |
||||
className="someClassName" |
||||
style={ { color: 'red' } } |
||||
>{mockButtons}</ButtonGroup>) |
||||
}) |
||||
|
||||
afterEach(() => { |
||||
childButtonSpies.onClick.resetHistory() |
||||
ButtonGroup.prototype.handleButtonClick.resetHistory() |
||||
ButtonGroup.prototype.renderButtons.resetHistory() |
||||
}) |
||||
|
||||
describe('handleButtonClick', () => { |
||||
it('should set the activeButtonIndex', () => { |
||||
assert.equal(wrapper.state('activeButtonIndex'), 1) |
||||
wrapper.instance().handleButtonClick(2) |
||||
assert.equal(wrapper.state('activeButtonIndex'), 2) |
||||
}) |
||||
}) |
||||
|
||||
describe('renderButtons', () => { |
||||
it('should render a button for each child', () => { |
||||
const childButtons = wrapper.find('.button-group__button') |
||||
assert.equal(childButtons.length, 3) |
||||
}) |
||||
|
||||
it('should render the correct button with an active state', () => { |
||||
const childButtons = wrapper.find('.button-group__button') |
||||
const activeChildButton = wrapper.find('.button-group__button--active') |
||||
assert.deepEqual(childButtons.get(1), activeChildButton.get(0)) |
||||
}) |
||||
|
||||
it('should call handleButtonClick and the respective button\'s onClick method when a button is clicked', () => { |
||||
assert.equal(ButtonGroup.prototype.handleButtonClick.callCount, 0) |
||||
assert.equal(childButtonSpies.onClick.callCount, 0) |
||||
const childButtons = wrapper.find('.button-group__button') |
||||
childButtons.at(0).props().onClick() |
||||
childButtons.at(1).props().onClick() |
||||
childButtons.at(2).props().onClick() |
||||
assert.equal(ButtonGroup.prototype.handleButtonClick.callCount, 3) |
||||
assert.equal(childButtonSpies.onClick.callCount, 3) |
||||
}) |
||||
|
||||
it('should render all child buttons as disabled if props.disabled is true', () => { |
||||
const childButtons = wrapper.find('.button-group__button') |
||||
childButtons.forEach(button => { |
||||
assert.equal(button.props().disabled, undefined) |
||||
}) |
||||
wrapper.setProps({ disabled: true }) |
||||
const disabledChildButtons = wrapper.find('[disabled=true]') |
||||
assert.equal(disabledChildButtons.length, 3) |
||||
}) |
||||
|
||||
it('should render the children of the button', () => { |
||||
const mockClass = wrapper.find('.mockClass') |
||||
assert.equal(mockClass.length, 1) |
||||
}) |
||||
}) |
||||
|
||||
describe('render', () => { |
||||
it('should render a div with the expected class and style', () => { |
||||
assert.equal(wrapper.find('div').at(0).props().className, 'someClassName') |
||||
assert.deepEqual(wrapper.find('div').at(0).props().style, { color: 'red' }) |
||||
}) |
||||
|
||||
it('should call renderButtons when rendering', () => { |
||||
assert.equal(ButtonGroup.prototype.renderButtons.callCount, 1) |
||||
wrapper.instance().render() |
||||
assert.equal(ButtonGroup.prototype.renderButtons.callCount, 2) |
||||
}) |
||||
}) |
||||
}) |
Loading…
Reference in new issue