-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
adding basic tests for calendar body and utils
- Loading branch information
Showing
3 changed files
with
221 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
import React from 'react'; | ||
import { render } from '@testing-library/react'; | ||
import CalendarBody from '../CalendarBody'; | ||
import { GenericEvent, WeekObject, CalendarBodyProps } from '../types'; | ||
import '@testing-library/jest-dom'; | ||
// import userEvent from '@testing-library/user-event'; | ||
import { describe, it, expect, vi, beforeAll } from 'vitest'; | ||
import userEvent from '@testing-library/user-event'; | ||
|
||
|
||
// Setup for the tests | ||
beforeAll(() => { | ||
// Mock matchMedia | ||
window.matchMedia = vi.fn().mockImplementation(query => ({ | ||
matches: false, | ||
media: query, | ||
onchange: null, | ||
addListener: vi.fn(), | ||
removeListener: vi.fn(), | ||
addEventListener: vi.fn(), | ||
removeEventListener: vi.fn(), | ||
dispatchEvent: vi.fn(), | ||
})); | ||
|
||
// Optional: Mock scrollIntoView if your tests trigger this function | ||
Element.prototype.scrollIntoView = vi.fn(); | ||
}); | ||
|
||
|
||
|
||
describe('Calendar Component', () => { | ||
const mockWeekDates = { | ||
startDate: new Date('2023-01-01T00:00:00Z'), // This is a Sunday | ||
endDate: new Date('2023-01-07T23:59:59Z'), | ||
}; | ||
|
||
const mockEvents: GenericEvent[] = [ | ||
{ | ||
eventId: '1', | ||
startTime: new Date('2023-01-02T10:00:00Z'), | ||
endTime: new Date('2023-01-02T11:00:00Z'), | ||
title: 'Test Event 1' | ||
}, | ||
{ | ||
eventId: '2', | ||
startTime: new Date('2023-01-03T14:00:00Z'), | ||
endTime: new Date('2023-01-03T15:00:00Z'), | ||
title: 'Test Event 2' | ||
}, | ||
]; | ||
|
||
const mockGetDayEvents: WeekObject<GenericEvent> = { | ||
sunday: [], | ||
monday: [mockEvents[0]], | ||
tuesday: [mockEvents[1]], | ||
wednesday: [], | ||
thursday: [], | ||
friday: [], | ||
saturday: [], | ||
}; | ||
|
||
const defaultProps: CalendarBodyProps<GenericEvent> = { | ||
weekDatesRange: mockWeekDates, | ||
getDayEvents: mockGetDayEvents, | ||
onEventClick: vi.fn(), | ||
weekends: false, | ||
}; | ||
|
||
it('renders without errors', () => { | ||
const { getByRole } = render(<CalendarBody {...defaultProps} />); | ||
expect(getByRole('table')).toBeInTheDocument(); | ||
}); | ||
|
||
it('renders correct date labels', () => { | ||
const { getByText } = render(<CalendarBody {...defaultProps} weekends={true} />); | ||
const expectedLabels = ['Hours', 'Mon 02', 'Tue 03', 'Wed 04', 'Thu 05', 'Fri 06', 'Sat 07', 'Sun 08']; | ||
expectedLabels.forEach(label => { | ||
expect(getByText(label)).toBeInTheDocument(); | ||
}); | ||
}); | ||
// currenly this is test is not catching the error | ||
it('renders events when provided', () => { | ||
const { getByText } = render(<CalendarBody {...defaultProps} />); | ||
expect(getByText('Test Event 1')).toBeInTheDocument(); | ||
expect(getByText('Test Event 2')).toBeInTheDocument(); | ||
}); | ||
|
||
it('renders events when provided', () => { | ||
const { queryByText } = render(<CalendarBody {...defaultProps} />); | ||
|
||
// Check that the events are rendered | ||
expect(queryByText('Test Event 1')).toBeInTheDocument(); | ||
expect(queryByText('Test Event 2')).toBeInTheDocument(); | ||
|
||
// Negative test: Ensure the event elements are not absent | ||
expect(queryByText('Nonexistent Event')).not.toBeInTheDocument(); | ||
}); | ||
|
||
it('calls onEventClick when an event is clicked', async () => { | ||
const user = userEvent.setup(); | ||
const onEventClick = vi.fn(); // Use `vi.fn()` instead of `jest.fn()` | ||
|
||
const { getByText } = render(<CalendarBody {...defaultProps} onEventClick={onEventClick} />); | ||
|
||
const event = getByText('Test Event 1'); | ||
await user.click(event); | ||
|
||
expect(onEventClick).toHaveBeenCalledWith(mockEvents[0]); | ||
}); | ||
|
||
}); |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
import { GenericEvent } from '../types'; | ||
import { daysToWeekObject } from '../utils'; | ||
import { describe, it, expect } from 'vitest'; | ||
|
||
// import { isSameDay, isSameWeek, eachDayOfInterval, getDay } from 'date-fns'; | ||
|
||
describe('daysToWeekObject', () => { | ||
const startWeek = new Date('2024-08-19'); | ||
|
||
it('should correctly place single-day events into the correct days', () => { | ||
const events: GenericEvent[] = [ | ||
{ | ||
eventId: '1', | ||
startTime: new Date('2024-08-21T09:00:00'), | ||
endTime: new Date('2024-08-21T10:00:00'), | ||
title: 'Event 1' | ||
}, | ||
{ | ||
eventId: '2', | ||
startTime: new Date('2024-08-22T11:00:00'), | ||
endTime: new Date('2024-08-22T12:00:00'), | ||
title: 'Event 2' | ||
}, | ||
{ | ||
eventId: '3', | ||
startTime: new Date('2024-08-23T13:00:00'), | ||
endTime: new Date('2024-08-23T14:00:00'), | ||
title: 'Event 3' | ||
}, | ||
]; | ||
const result = daysToWeekObject(events, startWeek); | ||
expect(result.wednesday.length).toBe(1); | ||
expect(result.thursday.length).toBe(1); | ||
expect(result.friday.length).toBe(1); | ||
expect(result.wednesday[0].startTime).toEqual(events[0].startTime); | ||
expect(result.thursday[0].startTime).toEqual(events[1].startTime); | ||
expect(result.friday[0].startTime).toEqual(events[2].startTime); | ||
}); | ||
|
||
it('should correctly split a multi-day event and place it into the correct days', () => { | ||
const events: GenericEvent[] = [ | ||
{ | ||
eventId: '4', | ||
startTime: new Date('2024-08-21T09:00:00'), | ||
endTime: new Date('2024-08-23T10:00:00'), | ||
title: 'Event 4' | ||
}, | ||
{ | ||
eventId: '5', | ||
startTime: new Date('2024-08-22T14:00:00'), | ||
endTime: new Date('2024-08-24T15:00:00'), | ||
title: 'Event 5' | ||
}, | ||
]; | ||
const result = daysToWeekObject(events, startWeek); | ||
expect(result.wednesday.length).toBe(1); | ||
expect(result.thursday.length).toBe(2); | ||
expect(result.friday.length).toBe(2); | ||
expect(result.saturday.length).toBe(1); | ||
}); | ||
|
||
it('should handle multiple events on the same day correctly', () => { | ||
const events: GenericEvent[] = [ | ||
{ | ||
eventId: '6', | ||
startTime: new Date('2024-08-22T09:00:00'), | ||
endTime: new Date('2024-08-22T10:00:00'), | ||
title: 'Event 6' | ||
}, | ||
{ | ||
eventId: '7', | ||
startTime: new Date('2024-08-22T11:00:00'), | ||
endTime: new Date('2024-08-22T12:00:00'), | ||
title: 'Event 7' | ||
}, | ||
{ | ||
eventId: '8', | ||
startTime: new Date('2024-08-22T13:00:00'), | ||
endTime: new Date('2024-08-22T14:00:00'), | ||
title: 'Event 8' | ||
}, | ||
]; | ||
const result = daysToWeekObject(events, startWeek); | ||
expect(result.thursday.length).toBe(3); | ||
expect(result.thursday[0].startTime).toEqual(events[0].startTime); | ||
expect(result.thursday[1].startTime).toEqual(events[1].startTime); | ||
expect(result.thursday[2].startTime).toEqual(events[2].startTime); | ||
}); | ||
|
||
//currently this is failing, I need to verify if there is a bug or this test doesn't make sense | ||
it.skip('should not include events that occur outside of the start week', () => { | ||
const events: GenericEvent[] = [ | ||
{ | ||
eventId: '9', | ||
startTime: new Date('2024-08-26T09:00:00'), | ||
endTime: new Date('2024-08-26T10:00:00'), | ||
title: 'Event 9' | ||
}, | ||
{ | ||
eventId: '10', | ||
startTime: new Date('2024-08-25T08:00:00'), | ||
endTime: new Date('2024-08-25T09:00:00'), | ||
title: 'Event 10' | ||
}, | ||
]; | ||
const result = daysToWeekObject(events, startWeek); | ||
expect(result.monday.length).toBe(0); | ||
expect(result.sunday.length).toBe(0); | ||
}); | ||
}); |