settingsBreadcrumbDropdown.spec.jsx 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import React from 'react';
  2. import {mount} from 'enzyme';
  3. import BreadcrumbDropdown from 'app/views/settings/components/settingsBreadcrumb/breadcrumbDropdown';
  4. jest.useFakeTimers();
  5. const CLOSE_DELAY = 0;
  6. describe('Settings Breadcrumb Dropdown', function() {
  7. let wrapper;
  8. let selectMock = jest.fn();
  9. let items = [{value: '1', label: 'foo'}, {value: '2', label: 'bar'}];
  10. beforeEach(function() {
  11. wrapper = mount(
  12. <BreadcrumbDropdown items={items} name="Test" hasMenu onSelect={selectMock} />,
  13. TestStubs.routerContext()
  14. );
  15. });
  16. it('opens when hovered over crumb', function() {
  17. wrapper.find('Crumb').simulate('mouseEnter');
  18. jest.runAllTimers();
  19. wrapper.update();
  20. expect(wrapper.find('AutoCompleteItem')).toHaveLength(2);
  21. });
  22. it('closes after 200ms when mouse leaves crumb', function() {
  23. wrapper.find('Crumb').simulate('mouseEnter');
  24. jest.runAllTimers();
  25. wrapper.update();
  26. expect(wrapper.find('StyledMenu')).toHaveLength(1);
  27. wrapper.find('Crumb').simulate('mouseLeave');
  28. // wonder what happens when this arg is negative o_O
  29. jest.advanceTimersByTime(CLOSE_DELAY - 10);
  30. wrapper.update();
  31. expect(wrapper.find('StyledMenu')).toHaveLength(1);
  32. jest.advanceTimersByTime(10);
  33. wrapper.update();
  34. expect(wrapper.find('StyledMenu')).toHaveLength(0);
  35. });
  36. it('closes immediately after selecting an item', function() {
  37. wrapper.find('Crumb').simulate('mouseEnter');
  38. jest.runAllTimers();
  39. wrapper.update();
  40. expect(wrapper.find('StyledMenu')).toHaveLength(1);
  41. wrapper
  42. .find('AutoCompleteItem')
  43. .first()
  44. .simulate('click');
  45. expect(wrapper.find('StyledMenu')).toHaveLength(0);
  46. });
  47. it('stays open when hovered over crumb and then into dropdown menu', function() {
  48. wrapper.find('Crumb').simulate('mouseEnter');
  49. jest.runAllTimers();
  50. wrapper.update();
  51. expect(wrapper.find('StyledMenu')).toHaveLength(1);
  52. wrapper.find('Crumb').simulate('mouseLeave');
  53. wrapper.find('StyledMenu').simulate('mouseEnter');
  54. jest.runAllTimers();
  55. wrapper.update();
  56. expect(wrapper.find('StyledMenu')).toHaveLength(1);
  57. });
  58. it('closes after entering dropdown and then leaving dropdown', function() {
  59. wrapper.find('Crumb').simulate('mouseEnter');
  60. jest.runAllTimers();
  61. wrapper.update();
  62. expect(wrapper.find('StyledMenu')).toHaveLength(1);
  63. wrapper.find('Crumb').simulate('mouseLeave');
  64. wrapper.find('StyledMenu').simulate('mouseEnter');
  65. jest.runAllTimers();
  66. wrapper.update();
  67. expect(wrapper.find('StyledMenu')).toHaveLength(1);
  68. wrapper.find('StyledMenu').simulate('mouseLeave');
  69. jest.runAllTimers();
  70. wrapper.update();
  71. expect(wrapper.find('StyledMenu')).toHaveLength(0);
  72. });
  73. });