import React from 'react';
import { screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { renderWithGrapesProvider } from '../../test-utils/renderers';
import { Calendar } from './';
describe('Calendar component', () => {
it('should allow user to pick a date', async () => {
const defaultDate = new Date(2022, 1, 1);
const handleClick = vi.fn();
renderWithGrapesProvider(
,
);
expect(screen.getByText('February 2022')).toBeVisible();
await userEvent.click(screen.getByRole('button', { name: /next month/i }));
expect(screen.getByText('March 2022')).toBeVisible();
expect(handleClick).not.toHaveBeenCalled();
await userEvent.click(
screen.getByRole('button', { name: 'Wednesday, March 30, 2022' }),
);
expect(handleClick).toHaveBeenCalledWith(new Date(2022, 2, 30));
});
it('supports min and max date', () => {
const defaultDate = new Date(2022, 1, 15);
const minDate = new Date(2022, 1, 5);
const maxDate = new Date(2022, 1, 25);
const handleClick = vi.fn();
renderWithGrapesProvider(
,
);
expect(screen.getByText('February 2022')).toBeVisible();
expect(
screen.getByRole('button', { name: 'Friday, February 25, 2022' }),
).not.toBeDisabled();
expect(
screen.getByRole('button', { name: 'Saturday, February 26, 2022' }),
).toBeDisabled();
expect(
screen.getByRole('button', { name: 'Friday, February 4, 2022' }),
).toBeDisabled();
expect(
screen.getByRole('button', { name: 'Saturday, February 5, 2022' }),
).not.toBeDisabled();
});
});