Files
workavia-calendar-front/__test__/components/DuplicateEvent.test.tsx
T
lethemanh cadfa70e60 #708 apply strictier linting rules (#717)
* #708 apply strictier linting rules and fix simple eslint bugs

* #708 fix eslint errors relate to promise

* #708 fix eslint import/no-extraneous-dependencies

* #708 fix eslint errors of react-hook

* #708 enable eslint check for typescript

---------

Co-authored-by: lethemanh <lethemanh@lethemanhs-MacBook-Pro.local>
2026-04-01 17:15:10 +02:00

165 lines
4.5 KiB
TypeScript

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(
<EventDuplication
event={
preloadedState.calendars.list['667037022b752d0026472254/cal1'].events
.event1
}
onClose={handleClose}
onOpenDuplicate={onOpenDuplicate}
/>,
preloadedState
)
fireEvent.click(
screen.getByRole('menuitem', { name: 'eventDuplication.duplicateEvent' })
)
expect(onOpenDuplicate).toHaveBeenCalled()
})
})
describe('EventPopover', () => {
it('renders with event data', () => {
renderWithProviders(
<EventPopover
anchorEl={null}
open={true}
onClose={jest.fn()}
selectedRange={null}
setSelectedRange={jest.fn()}
calendarRef={{ current: null }}
event={
preloadedState.calendars.list['667037022b752d0026472254/cal1'].events
.event1
}
/>,
preloadedState
)
expect(screen.getByDisplayValue(/Test Event/i)).toBeInTheDocument()
})
it('saves duplicated event when Save is clicked', () => {
const onClose = jest.fn()
renderWithProviders(
<EventPopover
anchorEl={null}
open={true}
onClose={onClose}
selectedRange={null}
setSelectedRange={jest.fn()}
calendarRef={{ current: null }}
event={
preloadedState.calendars.list['667037022b752d0026472254/cal1'].events
.event1
}
/>,
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(
<EventPreviewModal
eventId="event1"
calId="667037022b752d0026472254/cal1"
open={true}
onClose={jest.fn()}
/>,
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()
})
})