rangeSlider.spec.tsx 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import {mountWithTheme} from 'sentry-test/enzyme';
  2. import RangeSlider from 'sentry/components/forms/controls/rangeSlider';
  3. describe('RangeSlider', function () {
  4. it('changes value / has right label', function () {
  5. const wrapper = mountWithTheme(
  6. <RangeSlider name="test" value={5} min={0} max={10} onChange={() => {}} />
  7. );
  8. expect(wrapper.find('SliderLabel').text()).toBe('5');
  9. wrapper.find('Slider').simulate('input', {target: {value: 7}});
  10. expect(wrapper.find('SliderLabel').text()).toBe('7');
  11. });
  12. it('can use formatLabel', function () {
  13. const wrapper = mountWithTheme(
  14. <RangeSlider
  15. name="test"
  16. value={5}
  17. min={0}
  18. max={10}
  19. formatLabel={value => (
  20. <div className="test">{value === 7 ? 'SEVEN!' : Number(value) + 1}</div>
  21. )}
  22. onChange={() => {}}
  23. />
  24. );
  25. const testElement = wrapper.find('.test');
  26. expect(testElement).toHaveLength(1);
  27. expect(testElement.text()).toBe('6');
  28. wrapper.find('Slider').simulate('input', {target: {value: 7}});
  29. expect(wrapper.find('.test').text()).toBe('SEVEN!');
  30. });
  31. it('calls onChange', function () {
  32. const onChange = jest.fn();
  33. const wrapper = mountWithTheme(
  34. <RangeSlider name="test" value={5} min={0} max={10} onChange={onChange} />
  35. );
  36. expect(onChange).not.toHaveBeenCalled();
  37. wrapper.find('Slider').simulate('input', {target: {value: 7}});
  38. expect(onChange).toHaveBeenCalledWith(7, expect.anything());
  39. });
  40. it('can provide a list of allowedValues', function () {
  41. const onChange = jest.fn();
  42. const wrapper = mountWithTheme(
  43. <RangeSlider
  44. name="test"
  45. value={1000}
  46. min={0}
  47. max={10}
  48. allowedValues={[0, 100, 1000, 10000, 20000]}
  49. onChange={onChange}
  50. />
  51. );
  52. // With `allowedValues` sliderValue will be the index to value in `allowedValues`
  53. expect(wrapper.find('SliderLabel').text()).toBe('1000');
  54. wrapper.find('Slider').simulate('input', {target: {value: 0}});
  55. expect(wrapper.find('SliderLabel').text()).toBe('0');
  56. // onChange will callback with a value from `allowedValues`
  57. expect(onChange).toHaveBeenCalledWith(0, expect.anything());
  58. });
  59. it('handles invalid values', function () {
  60. const onChange = jest.fn();
  61. const wrapper = mountWithTheme(
  62. <RangeSlider
  63. name="test"
  64. value={1000}
  65. min={0}
  66. max={10}
  67. allowedValues={[0, 100, 1000, 10000, 20000]} // support unsorted arrays?
  68. onChange={onChange}
  69. />
  70. );
  71. wrapper.find('Slider').simulate('input', {target: {value: -1}});
  72. expect(wrapper.find('SliderLabel').text()).toBe('Invalid value');
  73. // onChange will callback with a value from `allowedValues`
  74. expect(onChange).toHaveBeenCalledWith(undefined, expect.anything());
  75. });
  76. });