import { render, screen } from '../../../test-utils';
import UploadImageStep from '.';
beforeAll(() => {
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: jest.fn().mockImplementation((query: string) => ({
matches: false,
media: query,
onchange: null,
addListener: jest.fn(),
removeListener: jest.fn(),
addEventListener: jest.fn(),
removeEventListener: jest.fn(),
dispatchEvent: jest.fn(),
})),
});
});
describe('uploadImageStep', () => {
const UPLOADIMAGE_STEP_PROPS = {
fileDropped: jest.fn(),
isComplete: false,
usAccept: 'image/*',
usButtonText: 'Upload Image',
usDisabled: false,
usLabel: 'Upload your image',
usHelpImage: 'https://example.com/help-image.png',
usPlaceholder: 'Drag and drop an image or click to upload',
errorMessage: '',
errorIconLabel: '',
};
let container: HTMLElement;
beforeEach(() => {
const view = render();
container = view.container;
});
test('renders container', () => {
const processing = container.querySelector('.droppable-default-card');
expect(processing).toBeInTheDocument();
});
test('renders helpImage or Upload icon', () => {
const uploadIcons = screen.getAllByAltText('Upload your image');
expect(uploadIcons.length).toBeGreaterThan(0);
expect(uploadIcons[0]).toBeInTheDocument();
});
test('renders label', () => {
expect(screen.getByText(UPLOADIMAGE_STEP_PROPS.usLabel)).toBeInTheDocument();
});
test('renders placeholder', () => {
expect(screen.getByText(UPLOADIMAGE_STEP_PROPS.usPlaceholder)).toBeInTheDocument();
});
test('renders buttonText', () => {
expect(screen.getByText(UPLOADIMAGE_STEP_PROPS.usButtonText)).toBeInTheDocument();
});
test('should render with `errorIconLabel` and `errorMessage` override', () => {
const errorIconLabel = 'Error icon label';
const errorMessage = 'Maximum filesize is 2MB.';
const { container } = render(
,
);
expect(screen.getByLabelText(errorIconLabel)).toBeInTheDocument();
expect(screen.getByText(errorMessage)).toBeInTheDocument();
});
test('focuses on the upload input when label is clicked', () => {
const input = screen.getByLabelText(UPLOADIMAGE_STEP_PROPS.usButtonText);
input.focus();
expect(input).toHaveFocus();
});
test('triggers file selection on Enter key press', () => {
const input = screen.getByLabelText(UPLOADIMAGE_STEP_PROPS.usButtonText);
input.focus();
const event = new KeyboardEvent('keydown', { key: 'Enter' });
input.dispatchEvent(event);
expect(input).toHaveFocus();
expect(input).toHaveAttribute('type', 'file');
});
});