import React from 'react'; import { render, fireEvent, screen, waitFor } from '@testing-library/react'; import '@testing-library/jest-dom'; import ShareQuizModal from '../../../components/ShareQuizModal/ShareQuizModal'; import { QuizType } from '../../../Types/QuizType'; import ApiService from '../../../services/ApiService'; jest.mock('../../../services/ApiService'); Object.assign(navigator, { clipboard: { writeText: jest.fn().mockResolvedValue(undefined), }, }); window.alert = jest.fn(); const mockQuiz: QuizType = { _id: '1', title: 'Sample Quiz', content: ['::Question 1:: What is 2+2? {=4 ~3 ~5}'], folderId: 'folder1', folderName: 'Sample Folder', userId: 'user1', created_at: new Date(), updated_at: new Date(), }; describe('ShareQuizModal', () => { beforeEach(() => { jest.clearAllMocks(); }); it('should call ApiService.ShareQuiz when sharing by email', async () => { render(); const shareButton = screen.getByRole('button', { name: /partager quiz/i }); fireEvent.click(shareButton); const emailButton = screen.getByRole('button', { name: /partager par email/i }); fireEvent.click(emailButton); const email = 'test@example.com'; window.prompt = jest.fn().mockReturnValue(email); await fireEvent.click(emailButton); expect(ApiService.ShareQuiz).toHaveBeenCalledWith(mockQuiz._id, email); }); it('copies the correct URL to the clipboard when sharing by URL', async () => { render(); // Open the modal const shareButton = screen.getByRole('button', { name: /partager quiz/i }); fireEvent.click(shareButton); // Click the "Share by URL" button const shareByUrlButton = screen.getByRole('button', { name: /partager par url/i }); fireEvent.click(shareByUrlButton); // Check if the correct URL was copied const expectedUrl = `${window.location.origin}/teacher/share/${mockQuiz._id}`; expect(navigator.clipboard.writeText).toHaveBeenCalledWith(expectedUrl); // Check if the alert is shown await waitFor(() => { expect(window.alert).toHaveBeenCalledWith('URL a été copiée avec succès.'); }); }); });