import { RootState } from '@/app/store'
import EventDuplication from '@/components/Event/EventDuplicate'
import EventPreviewModal from '@/features/Events/EventPreview'
import EventPopover from '@/features/Events/EventModal'
import { fireEvent, screen, waitFor } from '@testing-library/react'
import { renderWithProviders } from '../utils/Renderwithproviders'
const day = new Date()
const preloadedState = {
user: {
userData: {
sub: 'test',
email: 'test@test.com',
sid: 'aiYbWZSk2g0F+LrQeD7Dg4QcUMR8R/zTZdZBiA7N6Ro',
openpaasId: '667037022b752d0026472254'
},
organiserData: {
cn: 'test',
cal_address: 'mailto:test@test.com'
}
},
calendars: {
list: {
'667037022b752d0026472254/cal1': {
id: '667037022b752d0026472254/cal1',
name: 'Calendar',
color: '#FF0000',
owner: { emails: ['test@test.com'] },
events: {
event1: {
uid: 'event1',
URL: 'calendars/667037022b752d0026472254/cal1/event1.ics',
title: 'Test Event',
calId: '667037022b752d0026472254/cal1',
start: day.toISOString(),
end: day.toISOString(),
timezone: 'UTC',
organizer: { cn: 'test', cal_address: 'test@test.com' },
attendee: [
{
cn: 'test',
cal_address: 'test@test.com',
partstat: 'NEEDS-ACTION',
rsvp: 'TRUE',
role: 'REQ-PARTICIPANT',
cutype: 'INDIVIDUAL'
},
{
cn: 'John',
cal_address: 'john@test.com',
partstat: 'NEEDS-ACTION',
rsvp: 'TRUE',
role: 'REQ-PARTICIPANT',
cutype: 'INDIVIDUAL'
}
]
}
}
}
},
pending: false
}
} as unknown as RootState
describe('EventDuplication', () => {
it('calls onOpenDuplicate when button clicked', () => {
const handleClose = jest.fn()
const onOpenDuplicate = jest.fn()
renderWithProviders(
,
preloadedState
)
fireEvent.click(
screen.getByRole('menuitem', { name: 'eventDuplication.duplicateEvent' })
)
expect(onOpenDuplicate).toHaveBeenCalled()
})
})
describe('EventPopover', () => {
it('renders with event data', () => {
renderWithProviders(
,
preloadedState
)
expect(screen.getByDisplayValue(/Test Event/i)).toBeInTheDocument()
})
it('saves duplicated event when Save is clicked', () => {
const onClose = jest.fn()
renderWithProviders(
,
preloadedState
)
fireEvent.change(screen.getByLabelText(/Title/i), {
target: { value: 'Duplicated Event' }
})
fireEvent.click(screen.getByRole('button', { name: 'actions.save' }))
waitFor(() => expect(onClose).toHaveBeenCalled())
})
})
describe('EventDisplayModal', () => {
it('shows duplication button and opens duplication form', () => {
renderWithProviders(
,
preloadedState
)
fireEvent.click(screen.getByTestId('MoreVertIcon'))
fireEvent.click(
screen.getByRole('menuitem', { name: 'eventDuplication.duplicateEvent' })
)
expect(
screen.getAllByText('eventDuplication.duplicateEvent')[1]
).toBeInTheDocument()
expect(
screen.getByDisplayValue(
preloadedState.calendars.list['667037022b752d0026472254/cal1'].events
.event1.title as string
)
).toBeInTheDocument()
})
})