ConsumerGroups.spec.tsx 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import React from 'react';
  2. import { clusterConsumerGroupsPath } from 'lib/paths';
  3. import {
  4. act,
  5. screen,
  6. waitFor,
  7. waitForElementToBeRemoved,
  8. } from '@testing-library/react';
  9. import ConsumerGroups from 'components/ConsumerGroups/ConsumerGroups';
  10. import {
  11. consumerGroups,
  12. noConsumerGroupsResponse,
  13. } from 'redux/reducers/consumerGroups/__test__/fixtures';
  14. import { render } from 'lib/testHelpers';
  15. import fetchMock from 'fetch-mock';
  16. import { Route, Router } from 'react-router-dom';
  17. import { ConsumerGroupOrdering, SortOrder } from 'generated-sources';
  18. import { createMemoryHistory } from 'history';
  19. const clusterName = 'cluster1';
  20. const historyMock = createMemoryHistory({
  21. initialEntries: [clusterConsumerGroupsPath(clusterName)],
  22. });
  23. const renderComponent = (history = historyMock) =>
  24. render(
  25. <Router history={history}>
  26. <Route path={clusterConsumerGroupsPath(':clusterName')}>
  27. <ConsumerGroups />
  28. </Route>
  29. </Router>,
  30. {
  31. pathname: clusterConsumerGroupsPath(clusterName),
  32. }
  33. );
  34. describe('ConsumerGroups', () => {
  35. it('renders with initial state', async () => {
  36. renderComponent();
  37. expect(screen.getByRole('progressbar')).toBeInTheDocument();
  38. });
  39. describe('Default Route and Fetching Consumer Groups', () => {
  40. const url = `/api/clusters/${clusterName}/consumer-groups/paged`;
  41. afterEach(() => {
  42. fetchMock.reset();
  43. });
  44. it('renders empty table on no consumer group response', async () => {
  45. fetchMock.getOnce(url, noConsumerGroupsResponse, {
  46. query: {
  47. orderBy: ConsumerGroupOrdering.NAME,
  48. sortOrder: SortOrder.ASC,
  49. },
  50. });
  51. await act(() => {
  52. renderComponent();
  53. });
  54. expect(fetchMock.calls().length).toBe(1);
  55. expect(screen.getByRole('table')).toBeInTheDocument();
  56. expect(screen.getByText('No active consumer groups')).toBeInTheDocument();
  57. });
  58. it('renders with 404 from consumer groups', async () => {
  59. const consumerGroupsMock = fetchMock.getOnce(url, 404, {
  60. query: {
  61. orderBy: ConsumerGroupOrdering.NAME,
  62. sortOrder: SortOrder.ASC,
  63. },
  64. });
  65. renderComponent();
  66. await waitFor(() => expect(consumerGroupsMock.called()).toBeTruthy());
  67. expect(screen.queryByText('Consumers')).not.toBeInTheDocument();
  68. expect(screen.queryByRole('table')).not.toBeInTheDocument();
  69. });
  70. it('renders with 200 from consumer groups', async () => {
  71. const consumerGroupsMock = fetchMock.getOnce(
  72. url,
  73. {
  74. pagedCount: 1,
  75. consumerGroups,
  76. },
  77. {
  78. query: {
  79. orderBy: ConsumerGroupOrdering.NAME,
  80. sortOrder: SortOrder.ASC,
  81. },
  82. }
  83. );
  84. renderComponent();
  85. await waitForElementToBeRemoved(() => screen.getByRole('progressbar'));
  86. await waitFor(() => expect(consumerGroupsMock.called()).toBeTruthy());
  87. expect(screen.getByText('Consumers')).toBeInTheDocument();
  88. expect(screen.getByRole('table')).toBeInTheDocument();
  89. expect(screen.getByText(consumerGroups[0].groupId)).toBeInTheDocument();
  90. expect(screen.getByText(consumerGroups[1].groupId)).toBeInTheDocument();
  91. });
  92. it('renders with 200 from consumer groups with Searched Query ', async () => {
  93. const searchResult = consumerGroups[0];
  94. const searchText = searchResult.groupId;
  95. const consumerGroupsMock = fetchMock.getOnce(
  96. url,
  97. {
  98. pagedCount: 1,
  99. consumerGroups: [searchResult],
  100. },
  101. {
  102. query: {
  103. orderBy: ConsumerGroupOrdering.NAME,
  104. sortOrder: SortOrder.ASC,
  105. search: searchText,
  106. },
  107. }
  108. );
  109. const mockedHistory = createMemoryHistory({
  110. initialEntries: [
  111. `${clusterConsumerGroupsPath(clusterName)}?q=${searchText}`,
  112. ],
  113. });
  114. renderComponent(mockedHistory);
  115. await waitForElementToBeRemoved(() => screen.getByRole('progressbar'));
  116. await waitFor(() => expect(consumerGroupsMock.called()).toBeTruthy());
  117. expect(screen.getByText(searchText)).toBeInTheDocument();
  118. expect(
  119. screen.queryByText(consumerGroups[1].groupId)
  120. ).not.toBeInTheDocument();
  121. });
  122. });
  123. });