diff --git a/client/src/__tests__/components/LiveResults/LiveResults.test.tsx b/client/src/__tests__/components/LiveResults/LiveResults.test.tsx
index 26cd714..269d83b 100644
--- a/client/src/__tests__/components/LiveResults/LiveResults.test.tsx
+++ b/client/src/__tests__/components/LiveResults/LiveResults.test.tsx
@@ -21,7 +21,11 @@ const mockGiftQuestions = parse(
=Choice 1
=Choice 2
~Choice 3
- }`);
+ ~Choice 4
+ }
+
+ ::Sample Question 2:: Question stem {TRUE}
+ `);
const mockQuestions: QuestionType[] = mockGiftQuestions.map((question, index) => {
if (question.type !== "Category")
@@ -30,10 +34,13 @@ const mockQuestions: QuestionType[] = mockGiftQuestions.map((question, index) =>
return { question: newMockQuestion as BaseQuestion };
});
+console.log(`mockQuestions: ${JSON.stringify(mockQuestions)}`);
+
+// each student should have a different score for the tests to pass
const mockStudents: StudentType[] = [
- { id: '1', name: 'Student 1', answers: [{ idQuestion: 1, answer: ['Choice 1'], isCorrect: false }] },
- { id: '2', name: 'Student 2', answers: [{ idQuestion: 1, answer: ['Choice 3'], isCorrect: false }] },
- { id: '3', name: 'Student 3', answers: [{ idQuestion: 1, answer: ['Choice 1', 'Choice 2'], isCorrect: true }] },
+ { id: '1', name: 'Student 1', answers: [] },
+ { id: '2', name: 'Student 2', answers: [{ idQuestion: 1, answer: ['Choice 3'], isCorrect: false }, { idQuestion: 2, answer: [true], isCorrect: true}] },
+ { id: '3', name: 'Student 3', answers: [{ idQuestion: 1, answer: ['Choice 1', 'Choice 2'], isCorrect: true }, { idQuestion: 2, answer: [true], isCorrect: true}] },
];
describe('LiveResults', () => {
@@ -103,10 +110,15 @@ describe('LiveResults', () => {
fireEvent.click(toggleUsernamesSwitch);
// Check if the student grades are calculated and displayed correctly
+ const getByTextInTableCellBody = (text: string) => {
+ const elements = screen.getAllByText(text); // Get all elements with the specified text
+ return elements.find((element) => element.closest('.MuiTableCell-body')); // don't get the footer element(s)
+ };
mockStudents.forEach((student) => {
const grade = student.answers.filter(answer => answer.isCorrect).length / mockQuestions.length * 100;
- expect(screen.getByText(`${grade.toFixed()} %`)).toBeInTheDocument();
- });
+ const element = getByTextInTableCellBody(`${grade.toFixed()} %`);
+ expect(element).toBeInTheDocument();
+ });
});
test('calculates and displays the class average', () => {
diff --git a/client/src/__tests__/components/QuestionsDisplay/MultipleChoiceQuestionDisplay/MultipleChoiceQuestionDisplay.test.tsx b/client/src/__tests__/components/QuestionsDisplay/MultipleChoiceQuestionDisplay/MultipleChoiceQuestionDisplay.test.tsx
index adfa980..aa91b68 100644
--- a/client/src/__tests__/components/QuestionsDisplay/MultipleChoiceQuestionDisplay/MultipleChoiceQuestionDisplay.test.tsx
+++ b/client/src/__tests__/components/QuestionsDisplay/MultipleChoiceQuestionDisplay/MultipleChoiceQuestionDisplay.test.tsx
@@ -57,6 +57,7 @@ describe('MultipleChoiceQuestionDisplay', () => {
fireEvent.click(submitButton);
});
expect(mockHandleOnSubmitAnswer).not.toHaveBeenCalled();
+ mockHandleOnSubmitAnswer.mockClear();
});
test('submits the selected answer', () => {
@@ -70,7 +71,8 @@ describe('MultipleChoiceQuestionDisplay', () => {
fireEvent.click(submitButton);
});
- expect(mockHandleOnSubmitAnswer).toHaveBeenCalledWith('Choice 1');
+ expect(mockHandleOnSubmitAnswer).toHaveBeenCalledWith(['Choice 1']);
+ mockHandleOnSubmitAnswer.mockClear();
});
test('submits multiple selected answers', () => {
@@ -95,6 +97,7 @@ describe('MultipleChoiceQuestionDisplay', () => {
// Verify that the mockHandleOnSubmitAnswer function is called with both answers
expect(mockHandleOnSubmitAnswer).toHaveBeenCalledWith(['Choice 1', 'Choice 2']);
+ mockHandleOnSubmitAnswer.mockClear();
});
it('should show ✅ next to the correct answer and ❌ next to the wrong answers when showAnswer is true', async () => {
diff --git a/client/src/__tests__/components/QuestionsDisplay/NumericalQuestionDisplay/NumericalQuestionDisplay.test.tsx b/client/src/__tests__/components/QuestionsDisplay/NumericalQuestionDisplay/NumericalQuestionDisplay.test.tsx
index 639537a..5c32547 100644
--- a/client/src/__tests__/components/QuestionsDisplay/NumericalQuestionDisplay/NumericalQuestionDisplay.test.tsx
+++ b/client/src/__tests__/components/QuestionsDisplay/NumericalQuestionDisplay/NumericalQuestionDisplay.test.tsx
@@ -67,6 +67,7 @@ describe('NumericalQuestion Component', () => {
fireEvent.click(submitButton);
expect(mockHandleOnSubmitAnswer).not.toHaveBeenCalled();
+ mockHandleOnSubmitAnswer.mockClear();
});
it('submits answer correctly', () => {
@@ -77,6 +78,7 @@ describe('NumericalQuestion Component', () => {
fireEvent.click(submitButton);
- expect(mockHandleOnSubmitAnswer).toHaveBeenCalledWith(7);
+ expect(mockHandleOnSubmitAnswer).toHaveBeenCalledWith([7]);
+ mockHandleOnSubmitAnswer.mockClear();
});
});
diff --git a/client/src/__tests__/components/QuestionsDisplay/Question.test.tsx b/client/src/__tests__/components/QuestionsDisplay/Question.test.tsx
index 8c7546f..142e563 100644
--- a/client/src/__tests__/components/QuestionsDisplay/Question.test.tsx
+++ b/client/src/__tests__/components/QuestionsDisplay/Question.test.tsx
@@ -29,23 +29,24 @@ describe('Questions Component', () => {
render();
};
- describe('question type parsing', () => {
- it('parses true/false question type correctly', () => {
- expect(sampleTrueFalseQuestion.type).toBe('TF');
- });
+ // describe('question type parsing', () => {
+ // it('parses true/false question type correctly', () => {
+ // expect(sampleTrueFalseQuestion.type).toBe('TF');
+ // });
- it('parses multiple choice question type correctly', () => {
- expect(sampleMultipleChoiceQuestion.type).toBe('MC');
- });
+ // it('parses multiple choice question type correctly', () => {
+ // expect(sampleMultipleChoiceQuestion.type).toBe('MC');
+ // });
- it('parses numerical question type correctly', () => {
- expect(sampleNumericalQuestion.type).toBe('Numerical');
- });
+ // it('parses numerical question type correctly', () => {
+ // expect(sampleNumericalQuestion.type).toBe('Numerical');
+ // });
+
+ // it('parses short answer question type correctly', () => {
+ // expect(sampleShortAnswerQuestion.type).toBe('Short');
+ // });
+ // });
- it('parses short answer question type correctly', () => {
- expect(sampleShortAnswerQuestion.type).toBe('Short');
- });
- });
it('renders correctly for True/False question', () => {
renderComponent(sampleTrueFalseQuestion);
@@ -73,7 +74,8 @@ describe('Questions Component', () => {
const submitButton = screen.getByText('Répondre');
fireEvent.click(submitButton);
- expect(mockHandleSubmitAnswer).toHaveBeenCalledWith('Choice 1');
+ expect(mockHandleSubmitAnswer).toHaveBeenCalledWith(['Choice 1']);
+ mockHandleSubmitAnswer.mockClear();
});
it('renders correctly for Numerical question', () => {
@@ -93,7 +95,8 @@ describe('Questions Component', () => {
const submitButton = screen.getByText('Répondre');
fireEvent.click(submitButton);
- expect(mockHandleSubmitAnswer).toHaveBeenCalledWith(7);
+ expect(mockHandleSubmitAnswer).toHaveBeenCalledWith([7]);
+ mockHandleSubmitAnswer.mockClear();
});
it('renders correctly for Short Answer question', () => {
@@ -117,7 +120,7 @@ describe('Questions Component', () => {
const submitButton = screen.getByText('Répondre');
fireEvent.click(submitButton);
- expect(mockHandleSubmitAnswer).toHaveBeenCalledWith('User Input');
+ expect(mockHandleSubmitAnswer).toHaveBeenCalledWith(['User Input']);
});
});
diff --git a/client/src/__tests__/components/QuestionsDisplay/ShortAnswerQuestionDisplay/ShortAnswerQuestionDisplay.test.tsx b/client/src/__tests__/components/QuestionsDisplay/ShortAnswerQuestionDisplay/ShortAnswerQuestionDisplay.test.tsx
index c4326eb..57e9da5 100644
--- a/client/src/__tests__/components/QuestionsDisplay/ShortAnswerQuestionDisplay/ShortAnswerQuestionDisplay.test.tsx
+++ b/client/src/__tests__/components/QuestionsDisplay/ShortAnswerQuestionDisplay/ShortAnswerQuestionDisplay.test.tsx
@@ -47,6 +47,7 @@ describe('ShortAnswerQuestion Component', () => {
fireEvent.click(submitButton);
expect(mockHandleSubmitAnswer).not.toHaveBeenCalled();
+ mockHandleSubmitAnswer.mockClear();
});
it('submits answer correctly', () => {
@@ -60,6 +61,7 @@ describe('ShortAnswerQuestion Component', () => {
fireEvent.click(submitButton);
- expect(mockHandleSubmitAnswer).toHaveBeenCalledWith('User Input');
+ expect(mockHandleSubmitAnswer).toHaveBeenCalledWith(['User Input']);
+ mockHandleSubmitAnswer.mockClear();
});
});
diff --git a/client/src/__tests__/components/QuestionsDisplay/TrueFalseQuestionDisplay/TrueFalseQuestionDisplay.test.tsx b/client/src/__tests__/components/QuestionsDisplay/TrueFalseQuestionDisplay/TrueFalseQuestionDisplay.test.tsx
index e6910d4..f79d1da 100644
--- a/client/src/__tests__/components/QuestionsDisplay/TrueFalseQuestionDisplay/TrueFalseQuestionDisplay.test.tsx
+++ b/client/src/__tests__/components/QuestionsDisplay/TrueFalseQuestionDisplay/TrueFalseQuestionDisplay.test.tsx
@@ -56,6 +56,7 @@ describe('TrueFalseQuestion Component', () => {
});
expect(mockHandleSubmitAnswer).not.toHaveBeenCalled();
+ mockHandleSubmitAnswer.mockClear();
});
it('submits answer correctly for True', () => {
@@ -70,7 +71,8 @@ describe('TrueFalseQuestion Component', () => {
fireEvent.click(submitButton);
});
- expect(mockHandleSubmitAnswer).toHaveBeenCalledWith(true);
+ expect(mockHandleSubmitAnswer).toHaveBeenCalledWith([true]);
+ mockHandleSubmitAnswer.mockClear();
});
it('submits answer correctly for False', () => {
@@ -83,7 +85,8 @@ describe('TrueFalseQuestion Component', () => {
fireEvent.click(submitButton);
});
- expect(mockHandleSubmitAnswer).toHaveBeenCalledWith(false);
+ expect(mockHandleSubmitAnswer).toHaveBeenCalledWith([false]);
+ mockHandleSubmitAnswer.mockClear();
});
@@ -112,7 +115,7 @@ describe('TrueFalseQuestion Component', () => {
expect(wrongAnswer1?.textContent).toContain('❌');
});
- it('should not show ✅ or ❌ when repondre button is not clicked', async () => {
+ it('should not show ✅ or ❌ when Répondre button is not clicked', async () => {
const choiceButton = screen.getByText('Vrai').closest('button');
if (!choiceButton) throw new Error('Choice button not found');
diff --git a/client/src/__tests__/pages/Student/TeacherModeQuiz/TeacherModeQuiz.test.tsx b/client/src/__tests__/pages/Student/TeacherModeQuiz/TeacherModeQuiz.test.tsx
index 6a4ec59..4cd5a8d 100644
--- a/client/src/__tests__/pages/Student/TeacherModeQuiz/TeacherModeQuiz.test.tsx
+++ b/client/src/__tests__/pages/Student/TeacherModeQuiz/TeacherModeQuiz.test.tsx
@@ -63,7 +63,8 @@ describe('TeacherModeQuiz', () => {
act(() => {
fireEvent.click(screen.getByText('Répondre'));
});
- expect(mockSubmitAnswer).toHaveBeenCalledWith('Option A', 1);
+ expect(mockSubmitAnswer).toHaveBeenCalledWith(['Option A'], 1);
+ mockSubmitAnswer.mockClear();
});
test('handles shows feedback for an already answered question', () => {
@@ -74,7 +75,8 @@ describe('TeacherModeQuiz', () => {
act(() => {
fireEvent.click(screen.getByText('Répondre'));
});
- expect(mockSubmitAnswer).toHaveBeenCalledWith('Option A', 1);
+ expect(mockSubmitAnswer).toHaveBeenCalledWith(['Option A'], 1);
+ mockSubmitAnswer.mockClear();
mockQuestion = mockQuestions[1].question as MultipleChoiceQuestion;
// Navigate to the next question by re-rendering with new props
act(() => {
diff --git a/client/src/components/LiveResults/LiveResultsTable/TableComponents/LiveResultTableFooter.tsx b/client/src/components/LiveResults/LiveResultsTable/TableComponents/LiveResultTableFooter.tsx
index a24694e..a1c250c 100644
--- a/client/src/components/LiveResults/LiveResultsTable/TableComponents/LiveResultTableFooter.tsx
+++ b/client/src/components/LiveResults/LiveResultsTable/TableComponents/LiveResultTableFooter.tsx
@@ -51,7 +51,7 @@ const LiveResultsTableFooter: React.FC = ({
borderWidth: 1,
borderColor: 'rgba(224, 224, 224, 1)',
fontWeight: 'bold',
- color: 'rgba(0, 0, 0)'
+ color: 'rgba(0, 0, 0)',
}}
>
{students.length > 0
@@ -67,7 +67,7 @@ const LiveResultsTableFooter: React.FC = ({
borderColor: 'rgba(224, 224, 224, 1)',
fontWeight: 'bold',
fontSize: '1rem',
- color: 'rgba(0, 0, 0)'
+ color: 'rgba(0, 0, 0)',
}}
>
{students.length > 0 ? `${classAverage.toFixed()} %` : '-'}
@@ -76,4 +76,4 @@ const LiveResultsTableFooter: React.FC = ({
);
};
-export default LiveResultsTableFooter;
\ No newline at end of file
+export default LiveResultsTableFooter;