slider-prompt.test.jsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import React from 'react';
  2. import {shallow} from 'enzyme';
  3. import SliderPrompt from '../../../src/containers/slider-prompt.jsx';
  4. import SliderPromptComponent from '../../../src/components/slider-prompt/slider-prompt.jsx';
  5. describe('Slider Prompt Container', () => {
  6. let onCancel;
  7. let onOk;
  8. beforeEach(() => {
  9. onCancel = jest.fn();
  10. onOk = jest.fn();
  11. });
  12. test('Min/max are shown with decimal when isDiscrete is false', () => {
  13. const wrapper = shallow(
  14. <SliderPrompt
  15. isDiscrete={false}
  16. maxValue={100}
  17. minValue={0}
  18. onCancel={onCancel}
  19. onOk={onOk}
  20. />
  21. );
  22. const componentProps = wrapper.find(SliderPromptComponent).props();
  23. expect(componentProps.minValue).toBe('0.00');
  24. expect(componentProps.maxValue).toBe('100.00');
  25. });
  26. test('Min/max are NOT shown with decimal when isDiscrete is true', () => {
  27. const wrapper = shallow(
  28. <SliderPrompt
  29. isDiscrete
  30. maxValue={100}
  31. minValue={0}
  32. onCancel={onCancel}
  33. onOk={onOk}
  34. />
  35. );
  36. const componentProps = wrapper.find(SliderPromptComponent).props();
  37. expect(componentProps.minValue).toBe('0');
  38. expect(componentProps.maxValue).toBe('100');
  39. });
  40. test('Entering a number with a decimal submits with isDiscrete=false', () => {
  41. const wrapper = shallow(
  42. <SliderPrompt
  43. isDiscrete
  44. maxValue={100}
  45. minValue={0}
  46. onCancel={onCancel}
  47. onOk={onOk}
  48. />
  49. );
  50. const componentProps = wrapper.find(SliderPromptComponent).props();
  51. componentProps.onChangeMin({target: {value: '1.0'}});
  52. componentProps.onOk();
  53. expect(onOk).toHaveBeenCalledWith(1, 100, false);
  54. });
  55. test('Entering integers submits with isDiscrete=true', () => {
  56. const wrapper = shallow(
  57. <SliderPrompt
  58. isDiscrete={false}
  59. maxValue={100.1}
  60. minValue={12.32}
  61. onCancel={onCancel}
  62. onOk={onOk}
  63. />
  64. );
  65. const componentProps = wrapper.find(SliderPromptComponent).props();
  66. componentProps.onChangeMin({target: {value: '1'}});
  67. componentProps.onChangeMax({target: {value: '2'}});
  68. componentProps.onOk();
  69. expect(onOk).toHaveBeenCalledWith(1, 2, true);
  70. });
  71. test('Enter button submits the form', () => {
  72. const wrapper = shallow(
  73. <SliderPrompt
  74. isDiscrete={false}
  75. maxValue={100.1}
  76. minValue={12.32}
  77. onCancel={onCancel}
  78. onOk={onOk}
  79. />
  80. );
  81. const componentProps = wrapper.find(SliderPromptComponent).props();
  82. componentProps.onChangeMin({target: {value: '1'}});
  83. componentProps.onChangeMax({target: {value: '2'}});
  84. componentProps.onKeyPress({key: 'Enter'});
  85. expect(onOk).toHaveBeenCalledWith(1, 2, true);
  86. });
  87. test('Validates number-ness before submitting', () => {
  88. const wrapper = shallow(
  89. <SliderPrompt
  90. isDiscrete={false}
  91. maxValue={100.1}
  92. minValue={12.32}
  93. onCancel={onCancel}
  94. onOk={onOk}
  95. />
  96. );
  97. const componentProps = wrapper.find(SliderPromptComponent).props();
  98. componentProps.onChangeMin({target: {value: 'hello'}});
  99. componentProps.onOk();
  100. expect(onOk).not.toHaveBeenCalled();
  101. expect(onCancel).toHaveBeenCalled();
  102. });
  103. });