import React from 'react'; import { vi, describe, it, expect } from 'vitest'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { showSnackbar } from '@openmrs/esm-framework'; import { deleteStickyNote } from './sticky-note.resource'; import DeleteStickyNoteModal from './delete-sticky-note.modal'; vi.mock('./sticky-note.resource', () => ({ deleteStickyNote: vi.fn(), })); const mockDeleteStickyNote = vi.mocked(deleteStickyNote); const mockShowSnackbar = vi.mocked(showSnackbar); const defaultProps = { close: vi.fn(), noteUuid: 'a1b2c3d4-e5f6-7890-1234-567890abcdef', mutate: vi.fn(), onClose: vi.fn(), }; describe('DeleteStickyNoteModal', () => { it('renders modal with correct elements', () => { render(); expect(screen.getByText(/confirm delete sticky note/i)).toBeInTheDocument(); expect(screen.getByText(/are you sure you want to delete this sticky note/i)).toBeInTheDocument(); expect(screen.getByRole('button', { name: /cancel/i })).toBeInTheDocument(); expect(screen.getByRole('button', { name: /delete/i })).toBeInTheDocument(); }); it('clicking Cancel button closes modal', async () => { const user = userEvent.setup(); render(); const cancelButton = screen.getByRole('button', { name: /cancel/i }); await user.click(cancelButton); expect(defaultProps.close).toHaveBeenCalled(); }); it('clicking Delete button deletes sticky note and shows success', async () => { const user = userEvent.setup(); mockDeleteStickyNote.mockResolvedValue(undefined); render(); const deleteButton = screen.getByRole('button', { name: /delete/i }); await user.click(deleteButton); expect(mockDeleteStickyNote).toHaveBeenCalledWith(defaultProps.noteUuid); expect(mockDeleteStickyNote).toHaveBeenCalledTimes(1); expect(mockShowSnackbar).toHaveBeenCalledWith({ subtitle: 'The sticky note was deleted successfully', title: 'Sticky note deleted', kind: 'success', }); }); it('shows error when deletion fails', async () => { const user = userEvent.setup(); const error = { message: 'Server error' }; mockDeleteStickyNote.mockRejectedValue(error); render(); const deleteButton = screen.getByRole('button', { name: /delete/i }); await user.click(deleteButton); expect(mockDeleteStickyNote).toHaveBeenCalledWith(defaultProps.noteUuid); expect(mockShowSnackbar).toHaveBeenCalledWith({ title: 'Error deleting sticky note', subtitle: 'An error occurred while deleting the sticky note', kind: 'error', }); }); });