materialuiupgraded
Version:
Material-UI's workspace package
247 lines (222 loc) • 7.67 kB
JavaScript
import React from 'react';
import { assert } from 'chai';
import CheckCircle from '../internal/svg-icons/CheckCircle';
import { createShallow, createMount } from '../test-utils';
import Paper from '../Paper';
import Step from '../Step';
import StepLabel from '../StepLabel';
import StepConnector from '../StepConnector';
import StepContent from '../StepContent';
import Stepper from './Stepper';
describe('<Stepper />', () => {
let shallow;
let mount;
before(() => {
shallow = createShallow({ dive: true });
mount = createMount();
});
after(() => {
mount.cleanUp();
});
it('merges user className into the root node', () => {
const wrapper = shallow(
<Stepper className="foo">
<Step />
</Stepper>,
);
assert.include(wrapper.props().className, 'foo');
});
it('should render a Paper component', () => {
const wrapper = shallow(
<Stepper>
<Step />
</Stepper>,
);
assert.strictEqual(wrapper.type(), Paper);
assert.strictEqual(wrapper.props().elevation, 0, 'should have no elevation');
});
describe('rendering children', () => {
it('renders 3 children with connectors as separators', () => {
const wrapper = shallow(
<Stepper>
<div />
<div />
<div />
</Stepper>,
);
const children = wrapper.children();
assert.strictEqual(children.length, 5);
assert.strictEqual(wrapper.childAt(1).find(StepConnector).length, 1);
assert.strictEqual(wrapper.childAt(3).find(StepConnector).length, 1);
});
});
describe('controlling child props', () => {
it('controls children linearly based on the activeStep prop', () => {
const wrapper = shallow(
<Stepper activeStep={0}>
<div className="child-0" />
<div className="child-1" />
<div className="child-2" />
</Stepper>,
);
assert.strictEqual(wrapper.find('.child-0').props().active, true);
assert.strictEqual(wrapper.find('.child-1').props().active, false);
assert.strictEqual(wrapper.find('.child-2').props().active, false);
assert.strictEqual(wrapper.find('.child-1').props().disabled, true);
assert.strictEqual(wrapper.find('.child-2').props().disabled, true);
wrapper.setProps({ activeStep: 1 });
assert.strictEqual(wrapper.find('.child-0').props().completed, true);
assert.strictEqual(wrapper.find('.child-0').props().active, false);
assert.strictEqual(wrapper.find('.child-1').props().active, true);
assert.strictEqual(wrapper.find('.child-2').props().active, false);
assert.strictEqual(wrapper.find('.child-2').props().disabled, true);
});
it('controls children non-linearly based on the activeStep prop', () => {
const wrapper = shallow(
<Stepper linear={false} activeStep={0}>
<div className="child-0" />
<div className="child-1" />
<div className="child-2" />
</Stepper>,
);
assert.strictEqual(wrapper.find('.child-0').props().active, true);
assert.strictEqual(wrapper.find('.child-1').props().active, false);
assert.strictEqual(wrapper.find('.child-2').props().active, false);
wrapper.setProps({ activeStep: 1 });
assert.strictEqual(wrapper.find('.child-0').props().active, false);
assert.strictEqual(wrapper.find('.child-1').props().active, true);
assert.strictEqual(wrapper.find('.child-2').props().active, false);
wrapper.setProps({ activeStep: 2 });
assert.strictEqual(wrapper.find('.child-0').props().active, false);
assert.strictEqual(wrapper.find('.child-1').props().active, false);
assert.strictEqual(wrapper.find('.child-2').props().active, true);
});
it('passes index down correctly when rendering children containing arrays', () => {
const wrapper = shallow(
<Stepper linear={false}>
<div />
{[<div key={1} />, <div key={2} />]}
</Stepper>,
);
const steps = wrapper.children().find('div');
assert.strictEqual(steps.at(0).props().index, 0);
assert.strictEqual(steps.at(1).props().index, 1);
assert.strictEqual(steps.at(2).props().index, 2);
});
});
describe('step connector', () => {
it('should have a default step connector', () => {
const wrapper = shallow(
<Stepper>
<Step />
<Step />
</Stepper>,
);
assert.strictEqual(
wrapper.find(StepConnector).length,
1,
'should contain a <StepConnector /> child',
);
});
it('should allow the developer to specify a custom step connector', () => {
const wrapper = shallow(
<Stepper connector={<CheckCircle />}>
<Step />
<Step />
</Stepper>,
);
assert.strictEqual(
wrapper.find(CheckCircle).length,
1,
'should contain a <CheckCircle /> child',
);
assert.strictEqual(
wrapper.find(StepConnector).length,
0,
'should not contain a <StepConnector /> child',
);
});
it('should allow the step connector to be removed', () => {
const wrapper = shallow(
<Stepper connector={null}>
<Step />
<Step />
</Stepper>,
);
assert.strictEqual(
wrapper.find(StepConnector).length,
0,
'should not contain a <StepConnector /> child',
);
});
it('should pass active prop to connector when second step is active', () => {
const wrapper = shallow(
<Stepper activeStep={1}>
<Step />
<Step />
</Stepper>,
);
const connectors = wrapper.find(StepConnector);
assert.strictEqual(connectors.first().props().active, true);
});
it('should pass completed prop to connector when second step is completed', () => {
const wrapper = shallow(
<Stepper activeStep={2}>
<Step />
<Step />
</Stepper>,
);
const connectors = wrapper.find(StepConnector);
assert.strictEqual(connectors.first().props().completed, true);
});
});
it('renders with a null child', () => {
const wrapper = shallow(
<Stepper>
<Step />
{null}
</Stepper>,
);
assert.strictEqual(wrapper.find(Step).length, 1);
});
it('should be able to force a state', () => {
const wrapper = shallow(
<Stepper>
<Step className="child-0" />
<Step className="child-1" active />
<Step className="child-2" />
</Stepper>,
);
assert.strictEqual(wrapper.find('.child-0').props().active, true);
assert.strictEqual(wrapper.find('.child-1').props().active, true);
assert.strictEqual(wrapper.find('.child-2').props().active, false);
});
it('should hide the last connector', () => {
const wrapper = mount(
<Stepper orientation="vertical">
<Step>
<StepLabel>one</StepLabel>
<StepContent />
</Step>
<Step>
<StepLabel>two</StepLabel>
<StepContent />
</Step>
</Stepper>,
);
assert.strictEqual(
wrapper
.find(StepContent)
.at(0)
.props().last,
false,
);
assert.strictEqual(
wrapper
.find(StepContent)
.at(1)
.props().last,
true,
);
});
});