rangeSlider.spec.jsx 2.9 KB

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