breadcrumbs.spec.jsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import {shallow} from 'sentry-test/enzyme';
  2. import Breadcrumbs from 'app/components/breadcrumbs';
  3. describe('Breadcrumbs', () => {
  4. const wrapper = shallow(
  5. <Breadcrumbs
  6. crumbs={[
  7. {
  8. label: 'Test 1',
  9. to: '/test1',
  10. },
  11. {
  12. label: 'Test 2',
  13. to: '/test2',
  14. },
  15. {
  16. label: 'Test 3',
  17. to: null,
  18. },
  19. ]}
  20. />
  21. );
  22. const wrapperWithDropdown = shallow(
  23. <Breadcrumbs
  24. crumbs={[
  25. {
  26. label: 'dropdown crumb',
  27. onSelect: () => {},
  28. items: ['item1', 'item2', 'item3'],
  29. },
  30. {
  31. label: 'Test 2',
  32. to: '/test2',
  33. },
  34. {
  35. label: 'Test 3',
  36. to: null,
  37. },
  38. ]}
  39. />
  40. );
  41. it('returns null when 0 crumbs', () => {
  42. const empty = shallow(<Breadcrumbs crumbs={[]} />);
  43. expect(empty.html()).toBeNull();
  44. });
  45. it('generates correct links', () => {
  46. const allElements = wrapper.find('BreadcrumbList').children();
  47. const links = wrapper.find('BreadcrumbLink');
  48. expect(links.length).toBe(2);
  49. expect(allElements.at(0).props().to).toBe('/test1');
  50. expect(allElements.at(0).props().children).toBe('Test 1');
  51. expect(allElements.at(2).props().to).toBe('/test2');
  52. expect(allElements.at(2).props().children).toBe('Test 2');
  53. });
  54. it('does not make links where no `to` is provided', () => {
  55. const allElements = wrapper.find('BreadcrumbList').children();
  56. const notLink = wrapper.find('BreadcrumbItem');
  57. expect(notLink.length).toBe(1);
  58. expect(allElements.at(4).props().to).toBeUndefined();
  59. expect(allElements.at(4).props().children).toBe('Test 3');
  60. });
  61. it('separates crumbs with icon', () => {
  62. const allElements = wrapper.find('BreadcrumbList').children();
  63. const dividers = wrapper.find('BreadcrumbDividerIcon');
  64. expect(dividers.length).toBe(2);
  65. expect(allElements.at(1).is('BreadcrumbDividerIcon')).toBeTruthy();
  66. expect(allElements.at(3).is('BreadcrumbDividerIcon')).toBeTruthy();
  67. expect(allElements.at(5).exists()).toBeFalsy();
  68. });
  69. it('renders a crumb dropdown', () => {
  70. const allElements = wrapperWithDropdown.find('BreadcrumbList').children();
  71. const dropdown = wrapperWithDropdown.find('BreadcrumbDropdown');
  72. expect(allElements.at(0).is('BreadcrumbDropdown')).toBeTruthy();
  73. expect(allElements.at(1).is('BreadcrumbLink')).toBeTruthy();
  74. expect(allElements.at(3).is('BreadcrumbItem')).toBeTruthy();
  75. expect(dropdown.exists()).toBeTruthy();
  76. });
  77. });