import React from 'react'; import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import ClusterContext from 'components/contexts/ClusterContext'; import Details from 'components/Topics/Topic/Details/Details'; import { internalTopicPayload } from 'redux/reducers/topics/__test__/fixtures'; import { render } from 'lib/testHelpers'; import { clusterTopicEditPath, clusterTopicPath, clusterTopicsPath, } from 'lib/paths'; import { Router } from 'react-router-dom'; import { createMemoryHistory } from 'history'; describe('Details', () => { const mockDelete = jest.fn(); const mockClusterName = 'local'; const mockClearTopicMessages = jest.fn(); const mockInternalTopicPayload = internalTopicPayload.internal; const mockRecreateTopic = jest.fn(); const defaultPathname = clusterTopicPath( mockClusterName, internalTopicPayload.name ); const mockHistory = createMemoryHistory({ initialEntries: [defaultPathname], }); jest.spyOn(mockHistory, 'push'); const setupComponent = ( pathname = defaultPathname, history = mockHistory, props = {} ) => render(
, { pathname } ); describe('when it has readonly flag', () => { it('does not render the Action button a Topic', () => { render(
); expect(screen.queryByText('Produce Message')).not.toBeInTheDocument(); }); }); describe('when remove topic modal is open', () => { beforeEach(() => { setupComponent(); const openModalButton = screen.getAllByText('Remove topic')[0]; userEvent.click(openModalButton); }); it('calls deleteTopic on confirm', () => { const submitButton = screen.getAllByText('Submit')[0]; userEvent.click(submitButton); expect(mockDelete).toHaveBeenCalledWith({ clusterName: mockClusterName, topicName: internalTopicPayload.name, }); }); it('closes the modal when cancel button is clicked', () => { const cancelButton = screen.getAllByText('Cancel')[0]; userEvent.click(cancelButton); expect(cancelButton).not.toBeInTheDocument(); }); }); describe('when clear messages modal is open', () => { beforeEach(() => { setupComponent(); const confirmButton = screen.getAllByText('Clear messages')[0]; userEvent.click(confirmButton); }); it('it calls clearTopicMessages on confirm', () => { const submitButton = screen.getAllByText('Submit')[0]; userEvent.click(submitButton); expect(mockClearTopicMessages).toHaveBeenCalledWith({ clusterName: mockClusterName, topicName: internalTopicPayload.name, }); }); it('closes the modal when cancel button is clicked', () => { const cancelButton = screen.getAllByText('Cancel')[0]; userEvent.click(cancelButton); expect(cancelButton).not.toBeInTheDocument(); }); }); describe('when edit settings is clicked', () => { it('redirects to the edit page', () => { setupComponent(); const button = screen.getAllByText('Edit settings')[0]; userEvent.click(button); const redirectRoute = clusterTopicEditPath( mockClusterName, internalTopicPayload.name ); expect(mockHistory.push).toHaveBeenCalledWith(redirectRoute); }); }); it('redirects to the correct route if topic is deleted', () => { setupComponent(defaultPathname, mockHistory, { isDeleted: true }); const redirectRoute = clusterTopicsPath(mockClusterName); expect(mockHistory.push).toHaveBeenCalledWith(redirectRoute); }); it('shows a confirmation popup on deleting topic messages', () => { setupComponent(); const { getByText } = screen; const clearMessagesButton = getByText(/Clear messages/i); userEvent.click(clearMessagesButton); expect( getByText(/Are you sure want to clear topic messages?/i) ).toBeInTheDocument(); }); it('shows a confirmation popup on recreating topic', () => { setupComponent(); const recreateTopicButton = screen.getByText(/Recreate topic/i); userEvent.click(recreateTopicButton); expect( screen.getByText(/Are you sure want to recreate topic?/i) ).toBeInTheDocument(); }); it('calling recreation function after click on Submit button', () => { setupComponent(); const recreateTopicButton = screen.getByText(/Recreate topic/i); userEvent.click(recreateTopicButton); const confirmBtn = screen.getByRole('button', { name: /submit/i }); userEvent.click(confirmBtn); expect(mockRecreateTopic).toBeCalledTimes(1); }); it('close popup confirmation window after click on Cancel button', () => { setupComponent(); const recreateTopicButton = screen.getByText(/Recreate topic/i); userEvent.click(recreateTopicButton); const cancelBtn = screen.getByRole('button', { name: /cancel/i }); userEvent.click(cancelBtn); expect( screen.queryByText(/Are you sure want to recreate topic?/i) ).not.toBeInTheDocument(); }); });