diff --git a/LICENSE b/LICENSE
index f48f9ad..cf016c7 100644
--- a/LICENSE
+++ b/LICENSE
@@ -2,6 +2,7 @@ MIT License
Copyright (c) 2023 ETS-PFE004-Plateforme-sondage-minitest
Copyright (c) 2024 Louis-Antoine Caron, Mathieu Roy, Mélanie St-Hilaire, Samy Waddah
+Copyright (c) 2024 Gabriel Moisan-Matte, Mathieu Sévigny-Lavallée, Jerry Kwok Hiu Fung, Bruno Roesner, Florent Serres
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/client/src/__tests__/components/QuestionsDisplay/MultipleChoiceQuestionDisplay/MultipleChoiceQuestionDisplay.test.tsx b/client/src/__tests__/components/QuestionsDisplay/MultipleChoiceQuestionDisplay/MultipleChoiceQuestionDisplay.test.tsx
index f4198ed..05900fc 100644
--- a/client/src/__tests__/components/QuestionsDisplay/MultipleChoiceQuestionDisplay/MultipleChoiceQuestionDisplay.test.tsx
+++ b/client/src/__tests__/components/QuestionsDisplay/MultipleChoiceQuestionDisplay/MultipleChoiceQuestionDisplay.test.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useState } from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
import { act } from 'react';
@@ -17,21 +17,30 @@ const question = questions[0];
describe('MultipleChoiceQuestionDisplay', () => {
const mockHandleOnSubmitAnswer = jest.fn();
- const sampleProps = {
- question: question,
- handleOnSubmitAnswer: mockHandleOnSubmitAnswer,
- showAnswer: false
+
+ const TestWrapper = ({ showAnswer }: { showAnswer: boolean }) => {
+ const [showAnswerState, setShowAnswerState] = useState(showAnswer);
+
+ const handleOnSubmitAnswer = (answer: string) => {
+ mockHandleOnSubmitAnswer(answer);
+ setShowAnswerState(true);
+ };
+
+ return (
+
+
+
+ );
};
const choices = question.choices;
beforeEach(() => {
- render(
-
-
- );
+ render();
});
test('renders the question and choices', () => {
@@ -55,7 +64,6 @@ describe('MultipleChoiceQuestionDisplay', () => {
act(() => {
fireEvent.click(choiceButton);
});
-
const submitButton = screen.getByText('Répondre');
act(() => {
fireEvent.click(submitButton);
@@ -63,4 +71,51 @@ describe('MultipleChoiceQuestionDisplay', () => {
expect(mockHandleOnSubmitAnswer).toHaveBeenCalledWith('Choice 1');
});
-});
+
+ it('should show ✅ next to the correct answer and ❌ next to the wrong answers when showAnswer is true', async () => {
+ const choiceButton = screen.getByText('Choice 1').closest('button');
+ if (!choiceButton) throw new Error('Choice button not found');
+
+ // Click on choiceButton
+ act(() => {
+ fireEvent.click(choiceButton);
+ });
+
+ const button = screen.getByText("Répondre");
+
+ act(() => {
+ fireEvent.click(button);
+ });
+
+ // Wait for the DOM to update
+ const correctAnswer = screen.getByText("Choice 1").closest('button');
+ expect(correctAnswer).toBeInTheDocument();
+ expect(correctAnswer?.textContent).toContain('✅');
+
+ const wrongAnswer1 = screen.getByText("Choice 2").closest('button');
+ expect(wrongAnswer1).toBeInTheDocument();
+ expect(wrongAnswer1?.textContent).toContain('❌');
+ });
+
+ it('should not show ✅ or ❌ when repondre button is not clicked', async () => {
+ const choiceButton = screen.getByText('Choice 1').closest('button');
+ if (!choiceButton) throw new Error('Choice button not found');
+
+ // Click on choiceButton
+ act(() => {
+ fireEvent.click(choiceButton);
+ });
+
+ // Check for correct answer
+ const correctAnswer = screen.getByText("Choice 1").closest('button');
+ expect(correctAnswer).toBeInTheDocument();
+ expect(correctAnswer?.textContent).not.toContain('✅');
+
+ // Check for wrong answers
+ const wrongAnswer1 = screen.getByText("Choice 2");
+ expect(wrongAnswer1).toBeInTheDocument();
+ expect(wrongAnswer1?.textContent).not.toContain('❌');
+ });
+
+ });
+
diff --git a/client/src/__tests__/components/QuestionsDisplay/TrueFalseQuestionDisplay/TrueFalseQuestionDisplay.test.tsx b/client/src/__tests__/components/QuestionsDisplay/TrueFalseQuestionDisplay/TrueFalseQuestionDisplay.test.tsx
index 04620a1..5bcb7df 100644
--- a/client/src/__tests__/components/QuestionsDisplay/TrueFalseQuestionDisplay/TrueFalseQuestionDisplay.test.tsx
+++ b/client/src/__tests__/components/QuestionsDisplay/TrueFalseQuestionDisplay/TrueFalseQuestionDisplay.test.tsx
@@ -1,5 +1,5 @@
// TrueFalseQuestion.test.tsx
-import React from 'react';
+import React, { useState } from 'react';
import { render, fireEvent, screen, act } from '@testing-library/react';
import '@testing-library/jest-dom';
import { MemoryRouter } from 'react-router-dom';
@@ -9,20 +9,31 @@ import { parse, TrueFalseQuestion } from 'gift-pegjs';
describe('TrueFalseQuestion Component', () => {
const mockHandleSubmitAnswer = jest.fn();
const sampleStem = 'Sample True False Question';
- const trueFalseQuestion =
+ const trueFalseQuestion =
parse(`${sampleStem}{T}`)[0] as TrueFalseQuestion;
- const sampleProps = {
- question: trueFalseQuestion,
- handleOnSubmitAnswer: mockHandleSubmitAnswer,
- showAnswer: false
+
+ const TestWrapper = ({ showAnswer }: { showAnswer: boolean }) => {
+ const [showAnswerState, setShowAnswerState] = useState(showAnswer);
+
+ const handleOnSubmitAnswer = (answer: boolean) => {
+ mockHandleSubmitAnswer(answer);
+ setShowAnswerState(true);
+ };
+
+ return (
+
+
+
+ );
};
beforeEach(() => {
- render(
-
-
- );
+ render();
});
it('renders correctly', () => {
@@ -73,4 +84,50 @@ describe('TrueFalseQuestion Component', () => {
expect(mockHandleSubmitAnswer).toHaveBeenCalledWith(false);
});
+
+
+ it('should show ✅ next to the correct answer and ❌ next to the wrong answers when showAnswer is true', async () => {
+ const choiceButton = screen.getByText('Vrai').closest('button');
+ if (!choiceButton) throw new Error('T button not found');
+
+ // Click on choiceButton
+ act(() => {
+ fireEvent.click(choiceButton);
+ });
+
+ const button = screen.getByText("Répondre");
+
+ act(() => {
+ fireEvent.click(button);
+ });
+
+ // Wait for the DOM to update
+ const correctAnswer = screen.getByText("Vrai").closest('button');
+ expect(correctAnswer).toBeInTheDocument();
+ expect(correctAnswer?.textContent).toContain('✅');
+
+ const wrongAnswer1 = screen.getByText("Faux").closest('button');
+ expect(wrongAnswer1).toBeInTheDocument();
+ expect(wrongAnswer1?.textContent).toContain('❌');
+ });
+
+ it('should not show ✅ or ❌ when repondre button is not clicked', async () => {
+ const choiceButton = screen.getByText('Vrai').closest('button');
+ if (!choiceButton) throw new Error('Choice button not found');
+
+ // Click on choiceButton
+ act(() => {
+ fireEvent.click(choiceButton);
+ });
+
+ // Check for correct answer
+ const correctAnswer = screen.getByText("Vrai").closest('button');
+ expect(correctAnswer).toBeInTheDocument();
+ expect(correctAnswer?.textContent).not.toContain('✅');
+
+ // Check for wrong answers
+ const wrongAnswer1 = screen.getByText("Faux");
+ expect(wrongAnswer1).toBeInTheDocument();
+ expect(wrongAnswer1?.textContent).not.toContain('❌');
+ });
});
diff --git a/client/src/components/GIFTCheatSheet/GiftCheatSheet.tsx b/client/src/components/GIFTCheatSheet/GiftCheatSheet.tsx
index 1228869..98d2b96 100644
--- a/client/src/components/GIFTCheatSheet/GiftCheatSheet.tsx
+++ b/client/src/components/GIFTCheatSheet/GiftCheatSheet.tsx
@@ -153,7 +153,7 @@ const GiftCheatSheet: React.FC = () => {
-
+
9. Images
Il est possible d'insérer une image dans une question, une réponse (choix multiple) et dans une rétroaction. D'abord, le format de l'élément doit être [markdown]. Ensuite utilisez la syntaxe suivante :
@@ -185,8 +185,7 @@ const GiftCheatSheet: React.FC = () => {
Attention: l'ancienne fonctionnalité avec les balises {''} n'est plus
supportée.
-