import SearchResultsPage from '@/features/Search/SearchResultsPage' import { screen } from '@testing-library/react' import { renderWithProviders } from '../../utils/Renderwithproviders' describe('SearchResultsPage', () => { const today = new Date() const start = new Date(today) start.setHours(10, 0, 0, 0) const end = new Date(today) end.setHours(11, 0, 0, 0) const preloadedState = { user: { userData: { sub: 'test', email: 'test@test.com', sid: 'mockSid', openpaasId: 'user1' }, tokens: { accessToken: 'token' } }, calendars: { list: { 'user1/cal1': { name: 'Calendar personal', id: 'user1/cal1', color: { light: '#FF0000', dark: '#000' }, owner: { emails: ['alice@example.com'] }, events: { event1: { id: 'event1', calId: 'user1/cal1', uid: 'event1', title: 'Test Event', start: start.toISOString(), end: end.toISOString(), partstat: 'ACCEPTED', organizer: { cn: 'Alice', cal_address: 'alice@example.com' }, attendee: [ { cn: 'Alice', partstat: 'ACCEPTED', rsvp: 'TRUE', role: 'REQ-PARTICIPANT', cutype: 'INDIVIDUAL', cal_address: 'alice@example.com' } ] } } }, 'user2/cal1': { name: 'Calendar delegated', delegated: true, id: 'user2/cal1', color: { light: '#FF0000', dark: '#000' }, owner: { emails: ['alice@example.com'] }, events: { event1: { id: 'event1', calId: 'user2/cal1', uid: 'event1', title: 'Test Event', start: start.toISOString(), end: end.toISOString(), partstat: 'ACCEPTED', organizer: { cn: 'Alice', cal_address: 'alice@example.com' }, attendee: [ { cn: 'Alice', partstat: 'ACCEPTED', rsvp: 'TRUE', role: 'REQ-PARTICIPANT', cutype: 'INDIVIDUAL', cal_address: 'alice@example.com' } ] } } }, 'user3/cal1': { name: 'Calendar shared', id: 'user3/cal1', color: { light: '#FF0000', dark: '#000' }, owner: { emails: ['alice@example.com'] }, events: { event1: { id: 'event1', calId: 'user3/cal1', uid: 'event1', title: 'Test Event', start: start.toISOString(), end: end.toISOString(), partstat: 'ACCEPTED', organizer: { cn: 'Alice', cal_address: 'alice@example.com' }, attendee: [ { cn: 'Alice', partstat: 'ACCEPTED', rsvp: 'TRUE', role: 'REQ-PARTICIPANT', cutype: 'INDIVIDUAL', cal_address: 'alice@example.com' } ] } } } }, pending: false } } it('should show loading spinner when loading', () => { renderWithProviders(, { ...preloadedState, searchResult: { loading: true, error: null, hits: 0, results: [] } }) expect(screen.getByRole('progressbar')).toBeInTheDocument() }) it('should show error message when error occurs', () => { renderWithProviders(, { ...preloadedState, searchResult: { loading: false, error: 'Network error', hits: 0, results: [] } }) expect(screen.getByText('Network error')).toBeInTheDocument() }) it('should show no results message when no hits', () => { renderWithProviders(, { ...preloadedState, searchResult: { loading: false, error: null, hits: null, results: [] } }) expect(screen.getByText('search.noResults')).toBeInTheDocument() }) it('should render search results', () => { const mockResults = [ { data: { uid: '1', summary: 'Team Meeting', start: '2025-06-26T15:00:00Z', organizer: { cn: 'John Doe', email: 'john@example.com' }, allDay: false } }, { data: { uid: '2', summary: 'Project Review', start: '2025-06-27T10:00:00Z', organizer: { cn: 'Jane Smith', email: 'jane@example.com' }, allDay: false } } ] renderWithProviders(, { ...preloadedState, searchResult: { results: mockResults, hits: 2 } }) expect(screen.getByText('search.resultsTitle')).toBeInTheDocument() expect(screen.getByText('Team Meeting')).toBeInTheDocument() expect(screen.getByText('Project Review')).toBeInTheDocument() expect(screen.getByText('John Doe')).toBeInTheDocument() expect(screen.getByText('Jane Smith')).toBeInTheDocument() }) it('should handle events without organizer', () => { const mockResults = [ { data: { uid: '1', summary: 'Untitled Event', start: '2025-06-26T15:00:00Z', allDay: false } } ] renderWithProviders(, { ...preloadedState, searchResult: { results: mockResults, hits: 1 } }) expect(screen.getByText('Untitled Event')).toBeInTheDocument() }) it('should format all-day events correctly', () => { const mockResults = [ { data: { uid: '1', summary: 'All Day Event', start: '2025-06-26T00:00:00Z', organizer: { cn: 'Organizer' }, allDay: true } } ] renderWithProviders(, { ...preloadedState, searchResult: { results: mockResults, hits: 1 } }) expect(screen.getByText('All Day Event')).toBeInTheDocument() }) })