import React, { ReactNode, ReactElement } from 'react';
import { fireEvent } from '@testing-library/react';
import renderWithTheme from '../../../testUtils/renderWithTheme';
import Button from '..';
const LinkButton = Button.Link;
jest.mock('react-router-dom', () => ({
Link: function Link({
children,
to,
}: {
children: ReactNode;
to: string;
}): ReactElement {
return (
<>
{`Dom router link: ${to}`}
{children}
>
);
},
}));
describe('rendering', () => {
it('renders link with correct href', () => {
const { getByText } = renderWithTheme(
);
expect(getByText('A LinkButton')).toBeInTheDocument();
expect(getByText('A LinkButton')).toHaveAttribute('href', '/#');
});
it('renders no icon by default', () => {
const { container } = renderWithTheme(
);
expect(container.querySelectorAll('i')).toHaveLength(0);
});
it('renders icon', () => {
const { container } = renderWithTheme(
);
expect(container.querySelectorAll('i')).toHaveLength(1);
});
it('renders right icon', () => {
const { container } = renderWithTheme(
);
expect(container.querySelectorAll('i')).toHaveLength(1);
});
it('renders router link', () => {
const { getByText } = renderWithTheme(
);
expect(getByText('A LinkButton')).toBeInTheDocument();
expect(getByText('Dom router link: /#')).toBeInTheDocument();
});
});
describe('interaction', () => {
it('allows to click on', () => {
const onClick = jest.fn();
const { getByText } = renderWithTheme(
);
fireEvent.click(getByText('A LinkButton'));
expect(onClick).toHaveBeenCalledTimes(1);
});
});