mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
Compare commits
No commits in common. "61bf9b9d86a56281767dab943ccf4343c8b22dba" and "95f914ce3e9d89202a7b49a726f5ff20c186eb41" have entirely different histories.
61bf9b9d86
...
95f914ce3e
3 changed files with 9 additions and 97 deletions
|
|
@ -1,95 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
|
|
||||||
import { MemoryRouter, Route, Routes, useParams } from 'react-router-dom';
|
|
||||||
import Share from '../../../../pages/Teacher/Share/Share.tsx';
|
|
||||||
import ApiService from '../../../../services/ApiService';
|
|
||||||
import '@testing-library/jest-dom';
|
|
||||||
|
|
||||||
// Mock the ApiService and react-router-dom
|
|
||||||
jest.mock('../../../../services/ApiService');
|
|
||||||
jest.mock('react-router-dom', () => ({
|
|
||||||
...jest.requireActual('react-router-dom'),
|
|
||||||
useParams: jest.fn(),
|
|
||||||
useNavigate: jest.fn(),
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('Share Component', () => {
|
|
||||||
const mockNavigate = jest.fn();
|
|
||||||
const mockUseParams = useParams as jest.Mock;
|
|
||||||
const mockApiService = ApiService as jest.Mocked<typeof ApiService>;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
jest.clearAllMocks();
|
|
||||||
mockUseParams.mockReturnValue({ id: 'quiz123' });
|
|
||||||
require('react-router-dom').useNavigate.mockReturnValue(mockNavigate);
|
|
||||||
});
|
|
||||||
|
|
||||||
const renderComponent = (initialEntries = ['/share/quiz123']) => {
|
|
||||||
return render(
|
|
||||||
<MemoryRouter initialEntries={initialEntries}>
|
|
||||||
<Routes>
|
|
||||||
<Route path="/share/:id" element={<Share />} />
|
|
||||||
<Route path="/teacher/dashboard" element={<div>Dashboard</div>} />
|
|
||||||
<Route path="/login" element={<div>Login</div>} />
|
|
||||||
</Routes>
|
|
||||||
</MemoryRouter>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
it('should show loading state initially', () => {
|
|
||||||
mockApiService.getAllQuizIds.mockResolvedValue([]);
|
|
||||||
mockApiService.getUserFolders.mockResolvedValue([]);
|
|
||||||
mockApiService.getSharedQuiz.mockResolvedValue('Test Quiz');
|
|
||||||
|
|
||||||
renderComponent();
|
|
||||||
expect(screen.getByText('Chargement...')).toBeInTheDocument();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should redirect to login if not authenticated', async () => {
|
|
||||||
mockApiService.isLoggedIn.mockReturnValue(false);
|
|
||||||
|
|
||||||
renderComponent();
|
|
||||||
|
|
||||||
await waitFor(() => {
|
|
||||||
expect(mockNavigate).toHaveBeenCalledWith('/login');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should show "quiz already exists" message when quiz exists', async () => {
|
|
||||||
mockApiService.isLoggedIn.mockReturnValue(true);
|
|
||||||
mockApiService.getAllQuizIds.mockResolvedValue(['quiz123']);
|
|
||||||
|
|
||||||
renderComponent();
|
|
||||||
|
|
||||||
await waitFor(() => {
|
|
||||||
expect(screen.getByText('Quiz déjà existant')).toBeInTheDocument();
|
|
||||||
expect(screen.getByText(/Le quiz que vous essayez d'importer existe déjà sur votre compte/i)).toBeInTheDocument();
|
|
||||||
expect(screen.getByText('Retour au tableau de bord')).toBeInTheDocument();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should navigate to dashboard when clicking return button in "quiz exists" view', async () => {
|
|
||||||
mockApiService.isLoggedIn.mockReturnValue(true);
|
|
||||||
mockApiService.getAllQuizIds.mockResolvedValue(['quiz123']);
|
|
||||||
|
|
||||||
renderComponent();
|
|
||||||
|
|
||||||
await waitFor(() => {
|
|
||||||
fireEvent.click(screen.getByText('Retour au tableau de bord'));
|
|
||||||
expect(mockNavigate).toHaveBeenCalledWith('/teacher/dashboard');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should show error when no folders exist', async () => {
|
|
||||||
mockApiService.isLoggedIn.mockReturnValue(true);
|
|
||||||
mockApiService.getAllQuizIds.mockResolvedValue([]);
|
|
||||||
mockApiService.getUserFolders.mockResolvedValue([]);
|
|
||||||
|
|
||||||
renderComponent();
|
|
||||||
|
|
||||||
await waitFor(() => {
|
|
||||||
expect(mockNavigate).toHaveBeenCalledWith('/teacher/dashboard');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
@ -40,3 +40,4 @@ const mockedAxios = axios as jest.Mocked<typeof axios>;
|
||||||
expect(result).toBe('An unexpected error occurred.');
|
expect(result).toBe('An unexpected error occurred.');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
|
||||||
import { useParams, useNavigate } from 'react-router-dom';
|
import { useParams, useNavigate } from 'react-router-dom';
|
||||||
import { FolderType } from '../../../Types/FolderType';
|
import { FolderType } from '../../../Types/FolderType';
|
||||||
import './share.css';
|
import './share.css';
|
||||||
import { Button, NativeSelect, Typography, Box } from '@mui/material';
|
import { Button, NativeSelect, Typography, Box, Divider } from '@mui/material';
|
||||||
import ReturnButton from 'src/components/ReturnButton/ReturnButton';
|
import ReturnButton from 'src/components/ReturnButton/ReturnButton';
|
||||||
import ApiService from '../../../services/ApiService';
|
import ApiService from '../../../services/ApiService';
|
||||||
|
|
||||||
|
|
@ -20,12 +20,14 @@ const Share: React.FC = () => {
|
||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
try {
|
try {
|
||||||
if (!id) {
|
if (!id) {
|
||||||
|
window.alert(`Une erreur est survenue.\n Le quiz n'a pas été trouvé\nVeuillez réessayer plus tard`)
|
||||||
console.error('Quiz not found for id:', id);
|
console.error('Quiz not found for id:', id);
|
||||||
navigate('/teacher/dashboard');
|
navigate('/teacher/dashboard');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ApiService.isLoggedIn()) {
|
if (!ApiService.isLoggedIn()) {
|
||||||
|
window.alert(`Vous n'êtes pas connecté.\nVeuillez vous connecter et revenir à ce lien`);
|
||||||
navigate("/login");
|
navigate("/login");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -41,6 +43,7 @@ const Share: React.FC = () => {
|
||||||
const userFolders = await ApiService.getUserFolders();
|
const userFolders = await ApiService.getUserFolders();
|
||||||
|
|
||||||
if (userFolders.length == 0) {
|
if (userFolders.length == 0) {
|
||||||
|
window.alert(`Vous n'avez aucun dossier.\nVeuillez en créer un et revenir à ce lien`)
|
||||||
navigate('/teacher/dashboard');
|
navigate('/teacher/dashboard');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -50,6 +53,7 @@ const Share: React.FC = () => {
|
||||||
const title = await ApiService.getSharedQuiz(id);
|
const title = await ApiService.getSharedQuiz(id);
|
||||||
|
|
||||||
if (!title) {
|
if (!title) {
|
||||||
|
window.alert(`Une erreur est survenue.\n Veuillez réessayer plus tard`)
|
||||||
console.error('Quiz not found for id:', id);
|
console.error('Quiz not found for id:', id);
|
||||||
navigate('/teacher/dashboard');
|
navigate('/teacher/dashboard');
|
||||||
return;
|
return;
|
||||||
|
|
@ -79,6 +83,7 @@ const Share: React.FC = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!id) {
|
if (!id) {
|
||||||
|
window.alert(`Une erreur est survenue.\n Le quiz n'a pas été trouvé\nVeuillez réessayer plus tard`)
|
||||||
console.error('Quiz not found for id:', id);
|
console.error('Quiz not found for id:', id);
|
||||||
navigate('/teacher/dashboard');
|
navigate('/teacher/dashboard');
|
||||||
return;
|
return;
|
||||||
|
|
@ -88,6 +93,7 @@ const Share: React.FC = () => {
|
||||||
navigate('/teacher/dashboard');
|
navigate('/teacher/dashboard');
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
window.alert(`Une erreur est survenue.\n Veuillez réessayer plus tard`)
|
||||||
console.log(error)
|
console.log(error)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue