import React from 'react'; import { Route } from 'react-router-dom'; import { render } from 'lib/testHelpers'; import { screen } from '@testing-library/react'; import Topic from 'components/Topics/Topic/Topic'; import { clusterTopicPath, clusterTopicEditPath, clusterTopicSendMessagePath, } from 'lib/paths'; const topicText = { edit: 'Edit Container', send: 'Send Message', detail: 'Details Container', loading: 'Loading', }; jest.mock('components/Topics/Topic/Edit/EditContainer', () => () => (
{topicText.edit}
)); jest.mock('components/Topics/Topic/SendMessage/SendMessage', () => () => (
{topicText.send}
)); jest.mock('components/Topics/Topic/Details/DetailsContainer', () => () => (
{topicText.detail}
)); jest.mock('components/common/PageLoader/PageLoader', () => () => (
{topicText.loading}
)); describe('Topic Component', () => { const resetTopicMessages = jest.fn(); const fetchTopicDetailsMock = jest.fn(); const renderComponent = (pathname: string, topicFetching: boolean) => render( , { pathname } ); afterEach(() => { resetTopicMessages.mockClear(); fetchTopicDetailsMock.mockClear(); }); it('renders Edit page', () => { renderComponent(clusterTopicEditPath('local', 'myTopicName'), false); expect(screen.getByText(topicText.edit)).toBeInTheDocument(); }); it('renders Send Message page', () => { renderComponent(clusterTopicSendMessagePath('local', 'myTopicName'), false); expect(screen.getByText(topicText.send)).toBeInTheDocument(); }); it('renders Details Container page', () => { renderComponent(clusterTopicPath('local', 'myTopicName'), false); expect(screen.getByText(topicText.detail)).toBeInTheDocument(); }); it('renders Page loader', () => { renderComponent(clusterTopicPath('local', 'myTopicName'), true); expect(screen.getByText(topicText.loading)).toBeInTheDocument(); }); it('fetches topicDetails', () => { renderComponent(clusterTopicPath('local', 'myTopicName'), false); expect(fetchTopicDetailsMock).toHaveBeenCalledTimes(1); }); it('resets topic messages after unmount', () => { const component = renderComponent( clusterTopicPath('local', 'myTopicName'), false ); component.unmount(); expect(resetTopicMessages).toHaveBeenCalledTimes(1); }); });