import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import MonthCalendar from '../__mocks__/month-calendar'; import { withMonthCalendarGesture } from './withMonthCalendarGesture'; /** * Mock on a 3-month sets of months * JAN FEB MAR * APR MAY JUN * JUL AUG SEP * OCT NOV DEC */ const MonthCalendarWithGesture = withMonthCalendarGesture(MonthCalendar, /* Row size */ 3); /** * Tests start from March 2018 * M T W T F S S * 1 2 3 4 * 5 6 7 8 9 10 11 * 12 13 14 15 16 17 18 * 19 20 21 22 23 24 25 * 26 27 28 29 30 31 */ // /** // * Tests on a 3-month sets of months // * JAN FEB MAR // * APR MAY JUN // * JUL AUG SEP // * OCT NOV DEC // */ describe('withMonthCalendarGesture', () => { const props = { goToPreviousMonth: jest.fn(), goToNextMonth: jest.fn(), }; beforeEach(() => { jest.resetAllMocks(); }); describe('LEFT keydown', () => { it('should focus on previous month in the same set of months', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('MAY').focus(); expect(screen.getByText('MAY')).toHaveFocus(); await user.keyboard('[ArrowLeft]'); // then expect(screen.getByText('APR')).toHaveFocus(); }); it('should focus on the previous month in the previous set of months', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('APR').focus(); await user.keyboard('[ArrowLeft]'); // then expect(screen.getByText('MAR')).toHaveFocus(); }); it('should block focus on first month', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('JAN').focus(); await user.keyboard('[ArrowLeft]'); // then expect(screen.getByText('JAN')).toHaveFocus(); }); }); describe('RIGHT keydown', () => { it('should focus on next month in the same set of months', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('MAY').focus(); await user.keyboard('[ArrowRight]'); // then expect(screen.getByText('JUN')).toHaveFocus(); }); it('should focus on the next month in the next set of months', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('JUN').focus(); await user.keyboard('[ArrowRight]'); // then expect(screen.getByText('JULY')).toHaveFocus(); }); it('should block focus on last month', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('DEC').focus(); await user.keyboard('[ArrowRight]'); // then expect(screen.getByText('DEC')).toHaveFocus(); }); }); describe('UP keydown', () => { it('should focus on previous set of month', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('MAY').focus(); await user.keyboard('[ArrowUp]'); // then expect(screen.getByText('FEB')).toHaveFocus(); }); it('should block focus when there is no previous set of month', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('FEB').focus(); await user.keyboard('[ArrowUp]'); // then expect(screen.getByText('JAN')).toHaveFocus(); }); }); describe('DOWN keydown', () => { it('should focus on next set of month', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('MAY').focus(); await user.keyboard('[ArrowDown]'); // then expect(screen.getByText('AUG')).toHaveFocus(); }); it('should block focus when there is no following set of month', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('NOV').focus(); await user.keyboard('[ArrowDown]'); // then expect(screen.getByText('DEC')).toHaveFocus(); }); }); describe('HOME keydown', () => { it('should focus on first month', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('MAY').focus(); await user.keyboard('[Home]'); // then expect(screen.getByText('JAN')).toHaveFocus(); }); }); describe('END keydown', () => { it('should focus on last month', async () => { const user = userEvent.setup(); // given render(); // when screen.getByText('MAY').focus(); await user.keyboard('[End]'); // then expect(screen.getByText('DEC')).toHaveFocus(); }); }); });