panelTable.spec.jsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import {mountWithTheme} from 'sentry-test/enzyme';
  2. import PanelTable from 'app/components/panels/panelTable';
  3. describe('PanelTable', function () {
  4. const createWrapper = (props = {}) =>
  5. mountWithTheme(
  6. <PanelTable
  7. headers={[<div key="1">1</div>, <div key="2">2</div>, <div key="3">3</div>]}
  8. {...props}
  9. >
  10. <div data-test-id="cell">Cell 1</div>
  11. <div data-test-id="cell">Cell 2</div>
  12. <div data-test-id="cell">Cell 3</div>
  13. </PanelTable>
  14. );
  15. it('renders headers', function () {
  16. const wrapper = createWrapper();
  17. expect(wrapper.find('PanelTableHeader')).toHaveLength(3);
  18. // 3 divs from headers, 3 from "body"
  19. expect(wrapper.find('[data-test-id="cell"]')).toHaveLength(3);
  20. expect(wrapper.find('PanelTableHeader').at(0).text()).toBe('1');
  21. });
  22. it('renders loading', function () {
  23. const wrapper = createWrapper({isLoading: true});
  24. // Does not render content
  25. expect(wrapper.find('[data-test-id="cell"]')).toHaveLength(0);
  26. // renders loading
  27. expect(wrapper.find('LoadingIndicator')).toBeDefined();
  28. });
  29. it('renders custom loader', function () {
  30. const wrapper = createWrapper({
  31. isLoading: true,
  32. loader: <span data-test-id="custom-loader">loading</span>,
  33. });
  34. // Does not render content
  35. expect(wrapper.find('[data-test-id="cell"]')).toHaveLength(0);
  36. // no default loader
  37. expect(wrapper.find('LoadingIndicator')).toHaveLength(0);
  38. // has custom loader
  39. expect(wrapper.find('[data-test-id="custom-loader"]')).toHaveLength(1);
  40. });
  41. it('ignores empty state when loading', function () {
  42. const wrapper = createWrapper({isLoading: true, isEmpty: true});
  43. // renders loading
  44. expect(wrapper.find('LoadingIndicator')).toBeDefined();
  45. expect(wrapper.find('EmptyStateWarning')).toHaveLength(0);
  46. });
  47. it('renders empty state with custom message', function () {
  48. const wrapper = createWrapper({isEmpty: true, emptyMessage: 'I am empty inside'});
  49. // Does not render content
  50. expect(wrapper.find('[data-test-id="cell"]')).toHaveLength(0);
  51. // renders empty state
  52. expect(wrapper.find('EmptyStateWarning').text()).toBe('I am empty inside');
  53. });
  54. it('children can be a render function', function () {
  55. const wrapper = mountWithTheme(
  56. <PanelTable
  57. headers={[<div key="1">1</div>, <div key="2">2</div>, <div key="3">3</div>]}
  58. >
  59. {() => <p>I am child</p>}
  60. </PanelTable>
  61. );
  62. expect(wrapper.find('p').text()).toBe('I am child');
  63. });
  64. });