import { render, screen, fireEvent } from '@testing-library/react' import { CalendarView, type CalendarEvent } from '../calendar/calendar-view' const FIXED_DATE = new Date('2026-04-15T12:00:00Z') const sampleEvents: CalendarEvent[] = [ { id: 'meet-1', title: 'Investor Sync — Sequoia', start: new Date('2026-04-15T16:00:00Z'), end: new Date('2026-04-15T16:30:00Z'), }, { id: 'meet-2', title: 'Demo with Acme', start: '2026-04-16T17:00:00Z', end: '2026-04-16T17:45:00Z', }, ] describe('CalendarView', () => { it('renders without crashing in month view', () => { render( ) // The toolbar's "Today" button is always rendered by react-big-calendar expect(screen.getByText('Today')).toBeInTheDocument() }) it('renders event titles on the grid', () => { render( ) expect(screen.getByText(/Investor Sync — Sequoia/)).toBeInTheDocument() expect(screen.getByText(/Demo with Acme/)).toBeInTheDocument() }) it('fires onEventClick with the original event when an event is clicked', () => { const onEventClick = jest.fn() render( ) fireEvent.click(screen.getByText(/Investor Sync — Sequoia/)) expect(onEventClick).toHaveBeenCalledTimes(1) expect(onEventClick.mock.calls[0][0].id).toBe('meet-1') expect(onEventClick.mock.calls[0][0].title).toBe('Investor Sync — Sequoia') }) it('accepts string dates in events and normalizes them', () => { // Verifies the toDate / normalizeEvent path render( ) expect(screen.getByText(/Stringy/)).toBeInTheDocument() }) it('passes through resource payload to onEventClick', () => { interface MyMeeting { uuid: string attendees: number } const meeting: MyMeeting = { uuid: 'abc-123', attendees: 5 } const onEventClick = jest.fn() render( events={[ { id: 'r1', title: 'WithResource', start: FIXED_DATE, resource: meeting }, ]} defaultDate={FIXED_DATE} defaultView="month" onEventClick={onEventClick} /> ) fireEvent.click(screen.getByText(/WithResource/)) expect(onEventClick).toHaveBeenCalledTimes(1) expect(onEventClick.mock.calls[0][0].resource).toEqual(meeting) }) })