Details.spec.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import React from 'react';
  2. import { mount } from 'enzyme';
  3. import { StaticRouter } from 'react-router-dom';
  4. import { screen } from '@testing-library/react';
  5. import userEvent from '@testing-library/user-event';
  6. import ClusterContext from 'components/contexts/ClusterContext';
  7. import Details from 'components/Topics/Topic/Details/Details';
  8. import { internalTopicPayload } from 'redux/reducers/topics/__test__/fixtures';
  9. import { Provider } from 'react-redux';
  10. import { store } from 'redux/store';
  11. import { ThemeProvider } from 'styled-components';
  12. import { render } from 'lib/testHelpers';
  13. import { clusterTopicPath } from 'lib/paths';
  14. import theme from 'theme/theme';
  15. describe('Details', () => {
  16. const mockDelete = jest.fn();
  17. const mockClusterName = 'local';
  18. const mockClearTopicMessages = jest.fn();
  19. const mockInternalTopicPayload = internalTopicPayload.internal;
  20. const setupComponent = (pathname: string) =>
  21. render(
  22. <ClusterContext.Provider
  23. value={{
  24. isReadOnly: false,
  25. hasKafkaConnectConfigured: true,
  26. hasSchemaRegistryConfigured: true,
  27. isTopicDeletionAllowed: true,
  28. }}
  29. >
  30. <Details
  31. clusterName={mockClusterName}
  32. topicName={internalTopicPayload.name}
  33. name={internalTopicPayload.name}
  34. isInternal={false}
  35. deleteTopic={mockDelete}
  36. clearTopicMessages={mockClearTopicMessages}
  37. isDeleted={false}
  38. isDeletePolicy
  39. />
  40. </ClusterContext.Provider>,
  41. { pathname }
  42. );
  43. describe('when it has readonly flag', () => {
  44. it('does not render the Action button a Topic', () => {
  45. const component = mount(
  46. <ThemeProvider theme={theme}>
  47. <Provider store={store}>
  48. <StaticRouter>
  49. <ClusterContext.Provider
  50. value={{
  51. isReadOnly: true,
  52. hasKafkaConnectConfigured: true,
  53. hasSchemaRegistryConfigured: true,
  54. isTopicDeletionAllowed: true,
  55. }}
  56. >
  57. <Details
  58. clusterName={mockClusterName}
  59. topicName={internalTopicPayload.name}
  60. name={internalTopicPayload.name}
  61. isInternal={mockInternalTopicPayload}
  62. deleteTopic={mockDelete}
  63. clearTopicMessages={mockClearTopicMessages}
  64. isDeleted={false}
  65. isDeletePolicy
  66. />
  67. </ClusterContext.Provider>
  68. </StaticRouter>
  69. </Provider>
  70. </ThemeProvider>
  71. );
  72. expect(component.exists('button')).toBeFalsy();
  73. expect(component).toMatchSnapshot();
  74. });
  75. });
  76. it('shows a confirmation popup on deleting topic messages', () => {
  77. setupComponent(
  78. clusterTopicPath(mockClusterName, internalTopicPayload.name)
  79. );
  80. const { getByText } = screen;
  81. const clearMessagesButton = getByText(/Clear messages/i);
  82. userEvent.click(clearMessagesButton);
  83. expect(
  84. getByText(/Are you sure want to clear topic messages?/i)
  85. ).toBeInTheDocument();
  86. });
  87. });