diff --git a/client/src/__tests__/pages/ManageRoom/ManageRoom.test.tsx b/client/src/__tests__/pages/ManageRoom/ManageRoom.test.tsx
index 01957df..2b5a016 100644
--- a/client/src/__tests__/pages/ManageRoom/ManageRoom.test.tsx
+++ b/client/src/__tests__/pages/ManageRoom/ManageRoom.test.tsx
@@ -294,5 +294,36 @@ describe('ManageRoom', () => {
expect(screen.queryByText('Student 1')).not.toBeInTheDocument();
});
});
+
+ test('terminates the quiz and navigates to teacher dashboard when the "Terminer le quiz" button is clicked', async () => {
+ await act(async () => {
+ render(
+
+
+
+ );
+ });
+
+ await act(async () => {
+ const createSuccessCallback = (mockSocket.on as jest.Mock).mock.calls.find(call => call[0] === 'create-success')[1];
+ createSuccessCallback('Test Room');
+ });
+
+ fireEvent.click(screen.getByText('Lancer'));
+ fireEvent.click(screen.getByText('Rythme du professeur'));
+ fireEvent.click(screen.getAllByText('Lancer')[1]);
+
+ await waitFor(() => {
+ expect(screen.getByText('Test Quiz')).toBeInTheDocument();
+ });
+
+ const finishQuizButton = screen.getByText('Terminer le quiz');
+ fireEvent.click(finishQuizButton);
+
+ await waitFor(() => {
+ expect(navigate).toHaveBeenCalledWith('/teacher/dashboard');
+ });
+ });
+
});
diff --git a/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx b/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx
index 8c3d699..c938f7e 100644
--- a/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx
+++ b/client/src/pages/Teacher/ManageRoom/ManageRoom.tsx
@@ -25,29 +25,29 @@ const ManageRoom: React.FC = () => {
const navigate = useNavigate();
const [socket, setSocket] = useState(null);
const [students, setStudents] = useState([]);
- const { quizId = '', roomName = '' } = useParams<{ quizId: string, roomName: string }>();
+ const { quizId = '', roomName = '' } = useParams<{ quizId: string; roomName: string }>();
const [quizQuestions, setQuizQuestions] = useState();
const [quiz, setQuiz] = useState(null);
const [quizMode, setQuizMode] = useState<'teacher' | 'student'>('teacher');
const [connectingError, setConnectingError] = useState('');
const [currentQuestion, setCurrentQuestion] = useState(undefined);
const [quizStarted, setQuizStarted] = useState(false);
- const [formattedRoomName, setFormattedRoomName] = useState("");
+ const [formattedRoomName, setFormattedRoomName] = useState('');
const [newlyConnectedUser, setNewlyConnectedUser] = useState(null);
- // Handle the newly connected user in useEffect, because it needs state info
+ // Handle the newly connected user in useEffect, because it needs state info
// not available in the socket.on() callback
useEffect(() => {
if (newlyConnectedUser) {
console.log(`Handling newly connected user: ${newlyConnectedUser.name}`);
setStudents((prevStudents) => [...prevStudents, newlyConnectedUser]);
-
+
// only send nextQuestion if the quiz has started
if (!quizStarted) {
console.log(`!quizStarted: returning.... `);
return;
}
-
+
if (quizMode === 'teacher') {
webSocketService.nextQuestion({
roomName: formattedRoomName,
@@ -60,7 +60,7 @@ const ManageRoom: React.FC = () => {
} else {
console.error('Invalid quiz mode:', quizMode);
}
-
+
// Reset the newly connected user state
setNewlyConnectedUser(null);
}
@@ -91,7 +91,7 @@ const ManageRoom: React.FC = () => {
return () => {
disconnectWebSocket();
};
- }, [roomName, navigate]);
+ }, [roomName, navigate]);
useEffect(() => {
if (quizId) {
@@ -138,8 +138,8 @@ const ManageRoom: React.FC = () => {
setFormattedRoomName(roomNameUpper);
console.log(`Creating WebSocket room named ${roomNameUpper}`);
- /**
- * ATTENTION: Lire les variables d'état dans
+ /**
+ * ATTENTION: Lire les variables d'état dans
* les .on() n'est pas une bonne pratique.
* Les valeurs sont celles au moment de la création
* de la fonction et non au moment de l'exécution.
@@ -179,7 +179,6 @@ const ManageRoom: React.FC = () => {
};
useEffect(() => {
-
if (socket) {
console.log(`Listening for submit-answer-room in room ${formattedRoomName}`);
socket.on('submit-answer-room', (answerData: AnswerReceptionFromBackendType) => {
@@ -253,10 +252,12 @@ const ManageRoom: React.FC = () => {
if (nextQuestionIndex === undefined || nextQuestionIndex > quizQuestions.length - 1) return;
setCurrentQuestion(quizQuestions[nextQuestionIndex]);
- webSocketService.nextQuestion({roomName: formattedRoomName,
- questions: quizQuestions,
- questionIndex: nextQuestionIndex,
- isLaunch: false});
+ webSocketService.nextQuestion({
+ roomName: formattedRoomName,
+ questions: quizQuestions,
+ questionIndex: nextQuestionIndex,
+ isLaunch: false
+ });
};
const previousQuestion = () => {
@@ -266,7 +267,12 @@ const ManageRoom: React.FC = () => {
if (prevQuestionIndex === undefined || prevQuestionIndex < 0) return;
setCurrentQuestion(quizQuestions[prevQuestionIndex]);
- webSocketService.nextQuestion({roomName: formattedRoomName, questions: quizQuestions, questionIndex: prevQuestionIndex, isLaunch: false});
+ webSocketService.nextQuestion({
+ roomName: formattedRoomName,
+ questions: quizQuestions,
+ questionIndex: prevQuestionIndex,
+ isLaunch: false
+ });
};
const initializeQuizQuestion = () => {
@@ -294,7 +300,12 @@ const ManageRoom: React.FC = () => {
}
setCurrentQuestion(quizQuestions[0]);
- webSocketService.nextQuestion({roomName: formattedRoomName, questions: quizQuestions, questionIndex: 0, isLaunch: true});
+ webSocketService.nextQuestion({
+ roomName: formattedRoomName,
+ questions: quizQuestions,
+ questionIndex: 0,
+ isLaunch: true
+ });
};
const launchStudentMode = () => {
@@ -331,11 +342,21 @@ const ManageRoom: React.FC = () => {
if (quiz?.content && quizQuestions) {
setCurrentQuestion(quizQuestions[questionIndex]);
if (quizMode === 'teacher') {
- webSocketService.nextQuestion({roomName: formattedRoomName, questions: quizQuestions, questionIndex, isLaunch: false});
+ webSocketService.nextQuestion({
+ roomName: formattedRoomName,
+ questions: quizQuestions,
+ questionIndex,
+ isLaunch: false
+ });
}
}
};
+ const finishQuiz = () => {
+ disconnectWebSocket();
+ navigate('/teacher/dashboard');
+ };
+
const handleReturn = () => {
disconnectWebSocket();
navigate('/teacher/dashboard');
@@ -382,15 +403,15 @@ const ManageRoom: React.FC = () => {
width: '100%'
}}
>
- {(
+ {
{students.length}/60
- )}
+ }
@@ -425,7 +446,6 @@ const ManageRoom: React.FC = () => {
)}
@@ -467,6 +487,11 @@ const ManageRoom: React.FC = () => {
)}
+
+
+
) : (