import React from 'react';
import { render, screen, fireEvent, act } from '@testing-library/react';
import { UploadButton } from './';
describe('UploadButton component', () => {
describe('given default props', () => {
it('displays the text from props in a button', () => {
render();
expect(screen.getByRole('button', { name: 'Upload' })).toBeVisible();
});
it('calls `onUpload` when clicking on the button and selecting files', async () => {
const promise = Promise.resolve();
const handleUpload = vi.fn(() => promise);
render();
const fakeFile = new File(['(⌐□_□)'], 'chucknorris.png', {
type: 'image/png',
});
const fileInput = screen.getByPlaceholderText('File input');
fireEvent.change(fileInput, {
target: {
files: [fakeFile],
},
});
await act(async () => {
await promise;
});
expect(handleUpload).toHaveBeenCalledWith([fakeFile]);
});
});
describe('given `className` props', () => {
it("adds the classname to the component's classnames", () => {
render(
,
);
expect(screen.getByRole('button', { name: 'Upload' })).toHaveClass(
'MyUploadButton',
);
});
});
describe('given `isDisabled` props', () => {
it('has a disabled button as child', () => {
render();
expect(screen.getByRole('button', { name: 'Upload' })).toBeDisabled();
});
});
});