settingsBreadcrumbDropdown.spec.jsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import {mountWithTheme} from 'sentry-test/enzyme';
  2. import BreadcrumbDropdown from 'sentry/views/settings/components/settingsBreadcrumb/breadcrumbDropdown';
  3. jest.useFakeTimers();
  4. describe('Settings Breadcrumb Dropdown', function () {
  5. let wrapper;
  6. const selectMock = jest.fn();
  7. const items = [
  8. {value: '1', label: 'foo'},
  9. {value: '2', label: 'bar'},
  10. ];
  11. beforeEach(function () {
  12. wrapper = mountWithTheme(
  13. <BreadcrumbDropdown items={items} name="Test" hasMenu onSelect={selectMock} />
  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('StyledDropdownBubble')).toHaveLength(1);
  27. wrapper.find('Crumb').simulate('mouseLeave');
  28. jest.advanceTimersByTime(10);
  29. wrapper.update();
  30. expect(wrapper.find('StyledDropdownBubble')).toHaveLength(0);
  31. });
  32. it('closes immediately after selecting an item', function () {
  33. wrapper.find('Crumb').simulate('mouseEnter');
  34. jest.runAllTimers();
  35. wrapper.update();
  36. expect(wrapper.find('StyledDropdownBubble')).toHaveLength(1);
  37. wrapper.find('AutoCompleteItem').first().simulate('click');
  38. expect(wrapper.find('StyledDropdownBubble')).toHaveLength(0);
  39. });
  40. it('stays open when hovered over crumb and then into dropdown menu', function () {
  41. wrapper.find('Crumb').simulate('mouseEnter');
  42. jest.runAllTimers();
  43. wrapper.update();
  44. expect(wrapper.find('StyledDropdownBubble')).toHaveLength(1);
  45. wrapper.find('Crumb').simulate('mouseLeave');
  46. wrapper.find('StyledDropdownBubble').simulate('mouseEnter');
  47. jest.runAllTimers();
  48. wrapper.update();
  49. expect(wrapper.find('StyledDropdownBubble')).toHaveLength(1);
  50. });
  51. it('closes after entering dropdown and then leaving dropdown', function () {
  52. wrapper.find('Crumb').simulate('mouseEnter');
  53. jest.runAllTimers();
  54. wrapper.update();
  55. expect(wrapper.find('StyledDropdownBubble')).toHaveLength(1);
  56. wrapper.find('Crumb').simulate('mouseLeave');
  57. wrapper.find('StyledDropdownBubble').simulate('mouseEnter');
  58. jest.runAllTimers();
  59. wrapper.update();
  60. expect(wrapper.find('StyledDropdownBubble')).toHaveLength(1);
  61. wrapper.find('StyledDropdownBubble').simulate('mouseLeave');
  62. jest.runAllTimers();
  63. wrapper.update();
  64. expect(wrapper.find('StyledDropdownBubble')).toHaveLength(0);
  65. });
  66. });