index.spec.tsx 2.8 KB

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