import React from 'react';
import { render, WithRoute } from 'lib/testHelpers';
import { screen } from '@testing-library/react';
import Topic from 'components/Topics/Topic/Topic';
import {
clusterTopicPath,
clusterTopicEditPath,
clusterTopicSendMessagePath,
getNonExactPath,
} from 'lib/paths';
import { useAppDispatch } from 'lib/hooks/redux';
const topicText = {
edit: 'Edit',
send: 'Send Message',
detail: 'Details',
loading: 'Loading',
};
jest.mock('components/Topics/Topic/Edit/Edit', () => () => (
{topicText.edit}
));
jest.mock('components/Topics/Topic/SendMessage/SendMessage', () => () => (
{topicText.send}
));
jest.mock('components/Topics/Topic/Details/Details', () => () => (
{topicText.detail}
));
jest.mock('lib/hooks/redux', () => ({
...jest.requireActual('lib/hooks/redux'),
useAppDispatch: jest.fn(),
}));
const useDispatchMock = jest.fn(jest.fn());
describe('Topic Component', () => {
beforeEach(() => {
(useAppDispatch as jest.Mock).mockImplementation(() => useDispatchMock);
});
const renderComponent = (pathname: string) =>
render(
,
{ initialEntries: [pathname] }
);
it('renders Edit page', () => {
renderComponent(clusterTopicEditPath('local', 'myTopicName'));
expect(screen.getByText(topicText.edit)).toBeInTheDocument();
});
it('renders Send Message page', () => {
renderComponent(clusterTopicSendMessagePath('local', 'myTopicName'));
expect(screen.getByText(topicText.send)).toBeInTheDocument();
});
it('renders Details Container page', () => {
renderComponent(clusterTopicPath('local', 'myTopicName'));
expect(screen.getByText(topicText.detail)).toBeInTheDocument();
});
it('resets topic messages after unmount', () => {
const component = renderComponent(clusterTopicPath('local', 'myTopicName'));
component.unmount();
expect(useDispatchMock).toHaveBeenCalledTimes(1);
});
});