import React from 'react'; import { waitFor, fireEvent } from '@testing-library/react'; import renderWithTheme from '../../../../testUtils/renderWithTheme'; import Calendar from '../index'; describe('Month Calendar', () => { it('renders correctly', async () => { const { getByText, getByTestId } = renderWithTheme( ); await waitFor(() => { // shows year in select const yearSelect = getByTestId('year-select'); expect(yearSelect).toSelectItem('2021'); // shows months of year expect(getByText('Jan')).toBeInTheDocument(); expect(getByText('Feb')).toBeInTheDocument(); expect(getByText('Mar')).toBeInTheDocument(); expect(getByText('Apr')).toBeInTheDocument(); expect(getByText('May')).toBeInTheDocument(); expect(getByText('Jun')).toBeInTheDocument(); expect(getByText('Jul')).toBeInTheDocument(); expect(getByText('Aug')).toBeInTheDocument(); expect(getByText('Sep')).toBeInTheDocument(); expect(getByText('Oct')).toBeInTheDocument(); expect(getByText('Nov')).toBeInTheDocument(); expect(getByText('Dec')).toBeInTheDocument(); }); }); }); describe('Month Calendar Interaction', () => { it('allows to select year', async () => { const { getByText, getByTestId } = renderWithTheme( ); const yearSelect = getByTestId('year-select'); fireEvent.click(yearSelect); fireEvent.click(getByText('2025')); await waitFor(() => { expect(yearSelect).toSelectItem('2025'); }); }); it('allows to select a new month', async () => { const onSelectMonth = jest.fn(); const { getByText, getByTestId } = renderWithTheme( ); fireEvent.click(getByTestId('year-select')); fireEvent.click(getByText('2022')); fireEvent.click(getByText('Aug')); await waitFor(() => { expect(onSelectMonth).toHaveBeenCalledTimes(1); expect(onSelectMonth).toHaveBeenCalledWith(new Date(2022, 7, 1)); }); }); it('does not allow to select a new date out of range', async () => { const onSelectMonth = jest.fn(); const { getByText } = renderWithTheme( ); fireEvent.click(getByText('Sep')); await waitFor(() => { expect(onSelectMonth).not.toHaveBeenCalled(); }); }); });