import Slider from '..';
import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
import isEqual from 'lodash/isEqual';
// TODO 细化单测,目前覆盖的场景过少
describe('Slider', () => {
it('default value & default range value', () => {
const wrapper = mount(
);
const handles =wrapper.find(`.${BASE_CLASS_PREFIX}-slider-handle`);
expect(handles.at(0).getDOMNode().style.left).toBe('10%');
expect(handles.at(1).getDOMNode().style.left).toBe('20%');
expect(handles.at(2).getDOMNode().style.left).toBe('60%');
const sliders = wrapper.find(Slider);
expect(sliders.at(0).state('currentValue')).toBe(10);
expect(isEqual(sliders.at(1).state('currentValue'), [20, 60])).toBe(true);
wrapper.unmount();
});
it('onChange', () => {
const onChange = sinon.spy();
const STYLE = { width: 100, height: 32, marginLeft: 13 }; // it is really hack to mock slider wrapper getBoundingClientRect data
const wrapper = mount();
const rail = wrapper.find('.semi-slider-rail');
const railNode = rail.getDOMNode();
// click max position
rail.simulate('click', { pageX: 113, pageY: 16, target: railNode }); // these value calculate from storybook, and simulate here
expect(wrapper.state('currentValue')).toBe(100);
expect(onChange.calledOnce).toBe(true);
// click min position
rail.simulate('click', { pageX: 13, pageY: 16, target: railNode });
expect(wrapper.state('currentValue')).toBe(0);
expect(onChange.getCall(1).args[0]).toBe(0);
});
it('range onChange', () => {
const onChange = sinon.spy();
const STYLE = { width: 4, height: 400, marginLeft: 20, marginTop: 40 }; // it is really hack to mock slider wrapper getBoundingClientRect data
const wrapper = mount();
const rail = wrapper.find('.semi-slider-rail');
const railNode = rail.getDOMNode();
// click min position
rail.simulate('click', { pageX: 22, pageY: 40, target: railNode }); // these value calculate from storybook, and simulate here
expect(isEqual(wrapper.state('currentValue'), [0, 60])).toBe(true);
expect(onChange.calledOnce).toBe(true);
// click max position
rail.simulate('click', { pageX: 22, pageY: 440, target: railNode });
expect(isEqual(wrapper.state('currentValue'), [0, 100])).toBe(true);
expect(isEqual(onChange.getCall(1).args[0], [0, 100])).toBe(true);
});
it('controlled value', () => {
const onChange = sinon.spy();
const wrapper = mount();
expect(wrapper.state('currentValue')).toBe(10);
wrapper.setProps({ 'value': 20 });
expect(wrapper.state('currentValue')).toBe(20);
wrapper.setProps({ 'value': 100 + 1 })
expect(wrapper.state('currentValue')).toBe(100);
wrapper.unmount();
});
// TODO: body event not work
// it('drag and move', () => {
// const STYLE = { width: 100, height: 32, marginLeft: 13 }; // it is really hack to mock slider wrapper getBoundingClientRect data
// const wrapper = mount();
// const handle = wrapper.find('.semi-slider-handle');
// const handleNode = handle.getDOMNode();
// handle.simulate('mousedown', { pageX: 13, pageY: 16, target: handleNode }); // these value calculate from storybook, and simulate here
// document.dispatchEvent(new Event('mousemove', { pageX: 55, pageY: 16, target: handleNode, bubbles: true }));
// document.dispatchEvent(new Event('mouseup', { pageX: 55, pageY: 16, target: handleNode, bubbles: true }));
// handle.simulate('mouseup', { pageX: 55, pageY: 16, target: handleNode }); // these value calculate from storybook, and simulate here
// expect(wrapper.state('currentValue')).toBe(54);
// });
it('when hover into slider', () => {
let wrapper = mount();
wrapper
.find(`.${BASE_CLASS_PREFIX}-slider-wrapper`)
.at(0)
.simulate('mouseEnter');
expect(
wrapper
.find(`.${BASE_CLASS_PREFIX}-slider-boundary`)
.at(0)
.hasClass(`${BASE_CLASS_PREFIX}-slider-boundary-show`)
).toEqual(true);
wrapper
.find(`.${BASE_CLASS_PREFIX}-slider-wrapper`)
.at(0)
.simulate('mouseLeave');
expect(
wrapper
.find(`.${BASE_CLASS_PREFIX}-slider-boundary`)
.at(0)
.hasClass(`${BASE_CLASS_PREFIX}-slider-boundary-show`)
).toEqual(false);
});
it('when range is true or defaultValue is array', () => {
let wrapper = shallow();
let wrapper2 = shallow();
expect(wrapper.find(`.${BASE_CLASS_PREFIX}-slider-handle`).length === 2).toEqual(true);
expect(wrapper2.find(`.${BASE_CLASS_PREFIX}-slider-handle`).length === 2).toEqual(true);
expect(wrapper.state().currentValue).toEqual([1, 29]);
});
it('has marks', () => {
let wrapper = shallow();
expect(wrapper.exists(`.${BASE_CLASS_PREFIX}-slider-dot`)).toBe(true);
});
it('marks clickable', () => {
const STYLE = { width: 100, height: 32 }; // it is really hack to mock slider wrapper getBoundingClientRect data
let slider = mount();
expect(slider.exists(`.${BASE_CLASS_PREFIX}-slider-dot`)).toBe(true);
expect(slider.state('currentValue')).toEqual([0, 100])
slider.find(`.${BASE_CLASS_PREFIX}-slider-dot`).at(0).simulate('click', {pageX: 20 })
expect(slider.state('currentValue')).toEqual([20, 100])
});
it('when tooltipVisible is true, tooltip should show always, or should never show', () => {
let wrapper = mount();
expect(wrapper.exists(`.${BASE_CLASS_PREFIX}-tooltip-wrapper`)).toBe(true);
wrapper.find(`.${BASE_CLASS_PREFIX}-slider-handle`).at(0).simulate('mouseEnter');
expect(wrapper.exists(`.${BASE_CLASS_PREFIX}-tooltip-wrapper`)).toBe(true);
wrapper = mount();
expect(wrapper.exists(`.${BASE_CLASS_PREFIX}-tooltip-wrapper`)).toBe(false);
});
it('disabled', () => {
let wrapper = shallow();
expect(wrapper.exists(`.${BASE_CLASS_PREFIX}-slider-disabled`)).toBe(true);
wrapper.setProps({ disabled: false });
expect(wrapper.exists(`.${BASE_CLASS_PREFIX}-slider-disabled`)).toBe(false);
});
});