diff --git a/frontend/src/components/HomeComponents/Tasks/__tests__/Tasks/Recur.test.tsx b/frontend/src/components/HomeComponents/Tasks/__tests__/Tasks/Recur.test.tsx new file mode 100644 index 00000000..4aae79c9 --- /dev/null +++ b/frontend/src/components/HomeComponents/Tasks/__tests__/Tasks/Recur.test.tsx @@ -0,0 +1,70 @@ +import { render, screen, fireEvent, within } from '@testing-library/react'; +import { Tasks } from '../../Tasks'; +import { openTaskDialog, getRowAndClickEdit } from '../test-utils/helper'; +import { createMockProps } from '../test-utils/setup'; + +jest.mock('react-toastify', () => + require('../test-utils/setup').createToastMock() +); +jest.mock('../../tasks-utils', () => + require('../test-utils/setup').createTasksUtilsMock() +); +jest.mock('../../hooks', () => + require('../test-utils/setup').createHooksMock() +); +jest.mock( + '@/components/ui/select', + () => require('../test-utils/setup').selectMock +); + +describe('Recur Editing', () => { + const hooks = require('../../hooks'); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + test('should save selected recur value to backend', async () => { + render(); + await openTaskDialog('Task 12'); + + const recurRow = getRowAndClickEdit('Recur:'); + const select = within(recurRow).getByTestId('project-select'); + fireEvent.change(select, { target: { value: 'weekly' } }); + + const saveButton = screen.getByLabelText('save'); + fireEvent.click(saveButton); + + expect(hooks.editTaskOnBackend).toHaveBeenCalledWith( + expect.objectContaining({ recur: 'weekly' }) + ); + }); + + test('should not call backend when none is selected', async () => { + render(); + await openTaskDialog('Task 12'); + + const recurRow = getRowAndClickEdit('Recur:'); + const select = within(recurRow).getByTestId('project-select'); + fireEvent.change(select, { target: { value: 'none' } }); + + const saveButton = screen.getByLabelText('save'); + fireEvent.click(saveButton); + + expect(hooks.editTaskOnBackend).not.toHaveBeenCalled(); + }); + + test('should cancel editing recur without calling backend', async () => { + render(); + await openTaskDialog('Task 12'); + + const recurRow = getRowAndClickEdit('Recur:'); + const select = within(recurRow).getByTestId('project-select'); + fireEvent.change(select, { target: { value: 'monthly' } }); + + const cancelButton = screen.getByLabelText('cancel'); + fireEvent.click(cancelButton); + + expect(hooks.editTaskOnBackend).not.toHaveBeenCalled(); + }); +});