@activelylearn/material-ui
Version:
Material-UI's workspace package
117 lines (100 loc) • 3.6 kB
JavaScript
import React from 'react';
import { assert } from 'chai';
import { spy } from 'sinon';
import { createShallow, getClasses, createMount } from '../test-utils';
import ListItem from '../ListItem';
import ListItemSecondaryAction from '../ListItemSecondaryAction';
import MenuItem from './MenuItem';
describe('<MenuItem />', () => {
let shallow;
let classes;
let mount;
before(() => {
shallow = createShallow({ dive: true });
classes = getClasses(<MenuItem />);
mount = createMount();
});
after(() => {
mount.cleanUp();
});
it('should render a button ListItem with with ripple', () => {
const wrapper = shallow(<MenuItem />);
assert.strictEqual(wrapper.type(), ListItem);
assert.strictEqual(wrapper.props().button, true, 'should have the button prop');
assert.strictEqual(wrapper.props().disableRipple, undefined, 'should have a ripple');
});
it('should render with the user and root classes', () => {
const wrapper = shallow(<MenuItem className="woofMenuItem" />);
assert.strictEqual(wrapper.hasClass('woofMenuItem'), true);
assert.strictEqual(wrapper.hasClass(classes.root), true);
});
it('should render with the selected class', () => {
const wrapper = shallow(<MenuItem selected />);
assert.strictEqual(wrapper.hasClass(classes.selected), true, 'should have the selected class');
});
it('should have a default role of menuitem', () => {
const wrapper = shallow(<MenuItem />);
assert.strictEqual(wrapper.props().role, 'menuitem', 'should have the menuitem role');
});
it('should have a role of option', () => {
const wrapper = shallow(<MenuItem role="option" aria-selected={false} />);
assert.strictEqual(wrapper.props().role, 'option', 'should have the option role');
});
it('should have a tabIndex of -1 by default', () => {
const wrapper = shallow(<MenuItem />);
assert.strictEqual(wrapper.props().tabIndex, -1);
});
describe('event callbacks', () => {
it('should fire event callbacks', () => {
const events = [
'onClick',
'onFocus',
'onBlur',
'onKeyUp',
'onKeyDown',
'onMouseDown',
'onMouseLeave',
'onMouseUp',
'onTouchEnd',
'onTouchStart',
];
const handlers = events.reduce((result, n) => {
result[n] = spy();
return result;
}, {});
const wrapper = shallow(<MenuItem {...handlers} />);
events.forEach(n => {
const event = n.charAt(2).toLowerCase() + n.slice(3);
wrapper.simulate(event, { persist: () => {} });
assert.strictEqual(handlers[n].callCount, 1, `should have called the ${n} handler`);
});
});
});
describe('prop: component', () => {
it('should be able to override the rendered component', () => {
const wrapper = shallow(<MenuItem component="a" />);
assert.strictEqual(wrapper.props().component, 'a');
assert.strictEqual(wrapper.props().disableRipple, undefined);
});
});
describe('mount', () => {
it('should not fail with a li > li error message', () => {
const wrapper1 = mount(
<MenuItem>
<ListItemSecondaryAction>
<div />
</ListItemSecondaryAction>
</MenuItem>,
);
assert.strictEqual(wrapper1.find('li').length, 1);
const wrapper2 = mount(
<MenuItem button={false}>
<ListItemSecondaryAction>
<div />
</ListItemSecondaryAction>
</MenuItem>,
);
assert.strictEqual(wrapper2.find('li').length, 1);
});
});
});