import React from 'react';
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { FileCard } from '.';
import { renderWithGrapesProvider } from '../../test-utils/renderers';
describe('FileCard component', () => {
describe('given default props', () => {
it('has a button with the title from props as child', () => {
render(
,
);
expect(screen.getByRole('article', { name: 'My text' })).toBeVisible();
});
});
describe('given a `className` prop', () => {
it("adds it to the component's classnames", () => {
render(
,
);
expect(screen.getByRole('article', { name: 'My text' })).toHaveClass(
'MyFileCard',
);
});
});
describe('given `onClick` prop', () => {
it('calls `onClick` when clicking on the button', async () => {
const handleClick = vi.fn();
render();
await userEvent.click(screen.getByRole('button', { name: 'My text' }));
expect(handleClick).toHaveBeenCalledTimes(1);
});
});
describe('given `onDelete` prop', () => {
it('calls `onDelete` when clicking on the button', async () => {
const handleDelete = vi.fn();
renderWithGrapesProvider(
,
);
await userEvent.click(
screen.getByRole('button', { name: 'Delete My text' }),
);
expect(handleDelete).toHaveBeenCalledTimes(1);
});
});
describe('given `description` prop', () => {
it('displays the description and label the FileCard', async () => {
renderWithGrapesProvider(
,
);
expect(screen.getByText('My description')).toBeVisible();
expect(
screen.getByRole('article', { name: 'My text' }),
).toHaveAccessibleDescription('My description');
});
});
});