materialuiupgraded
Version:
Material-UI's workspace package
132 lines (114 loc) • 4.62 kB
JavaScript
import React from 'react';
import { assert } from 'chai';
import { spy } from 'sinon';
import { createShallow, createMount, getClasses } from '../test-utils';
import Collapse from '../Collapse';
import Paper from '../Paper';
import ExpansionPanel from './ExpansionPanel';
import ExpansionPanelSummary from '../ExpansionPanelSummary';
describe('<ExpansionPanel />', () => {
let mount;
let shallow;
let classes;
before(() => {
shallow = createShallow({ dive: true });
mount = createMount();
classes = getClasses(<ExpansionPanel>foo</ExpansionPanel>);
});
after(() => {
mount.cleanUp();
});
it('should render and have isControlled set to false', () => {
const wrapper = shallow(<ExpansionPanel>foo</ExpansionPanel>);
assert.strictEqual(wrapper.type(), Paper);
assert.strictEqual(wrapper.props().elevation, 1);
assert.strictEqual(wrapper.props().square, true);
assert.strictEqual(wrapper.instance().isControlled, false);
const collapse = wrapper.find(Collapse);
assert.strictEqual(collapse.props()['aria-hidden'], 'true');
wrapper.setProps({ expanded: true });
assert.strictEqual(wrapper.state().expanded, false);
});
it('should handle defaultExpanded prop', () => {
const wrapper = shallow(<ExpansionPanel defaultExpanded>foo</ExpansionPanel>);
assert.strictEqual(
wrapper.instance().isControlled,
false,
'should have isControlled state false',
);
assert.strictEqual(wrapper.state().expanded, true);
assert.strictEqual(wrapper.hasClass(classes.expanded), true);
});
it('should render the custom className and the root class', () => {
const wrapper = shallow(<ExpansionPanel className="test-class-name">foo</ExpansionPanel>);
assert.strictEqual(wrapper.hasClass('test-class-name'), true);
assert.strictEqual(wrapper.hasClass(classes.root), true);
});
it('should render the summary and collapse elements', () => {
const wrapper = shallow(
<ExpansionPanel>
<ExpansionPanelSummary />
<div>Hello</div>
</ExpansionPanel>,
);
assert.strictEqual(wrapper.childAt(0).type(), ExpansionPanelSummary);
const collapse = wrapper.childAt(1);
assert.strictEqual(collapse.type(), Collapse);
assert.strictEqual(collapse.children().length, 1, 'collapse should have 1 children div');
});
it('should handle the expanded prop', () => {
const wrapper = shallow(<ExpansionPanel expanded>foo</ExpansionPanel>);
assert.strictEqual(wrapper.state().expanded, undefined);
assert.strictEqual(wrapper.hasClass(classes.expanded), true);
assert.strictEqual(wrapper.instance().isControlled, true);
wrapper.setProps({ expanded: false });
assert.strictEqual(wrapper.hasClass(classes.expanded), false);
});
it('should call onChange when clicking the summary element', () => {
const handleChange = spy();
const wrapper = mount(
<ExpansionPanel onChange={handleChange}>
<ExpansionPanelSummary />
</ExpansionPanel>,
);
assert.strictEqual(wrapper.type(), ExpansionPanel);
wrapper.find(ExpansionPanelSummary).simulate('click');
assert.strictEqual(handleChange.callCount, 1);
});
it('when controlled should call the onChange', () => {
const handleChange = spy();
const wrapper = mount(
<ExpansionPanel onChange={handleChange} expanded>
<ExpansionPanelSummary />
</ExpansionPanel>,
);
wrapper.find(ExpansionPanelSummary).simulate('click');
assert.strictEqual(handleChange.callCount, 1);
assert.strictEqual(handleChange.args[0][1], false);
});
it('when undefined onChange and controlled should not call the onChange', () => {
const handleChange = spy();
const wrapper = mount(
<ExpansionPanel onChange={handleChange} expanded>
<ExpansionPanelSummary />
</ExpansionPanel>,
);
wrapper.setProps({ onChange: undefined });
wrapper.find(ExpansionPanelSummary).simulate('click');
assert.strictEqual(handleChange.callCount, 0);
});
it('when disabled should have the disabled class', () => {
const wrapper = shallow(<ExpansionPanel disabled>foo</ExpansionPanel>);
assert.strictEqual(wrapper.hasClass(classes.disabled), true);
});
describe('prop: children', () => {
it('should accept an empty child', () => {
shallow(
<ExpansionPanel>
<ExpansionPanelSummary />
{null}
</ExpansionPanel>,
);
});
});
});