mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
142 lines
4.6 KiB
TypeScript
142 lines
4.6 KiB
TypeScript
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
|
|
import '@testing-library/jest-dom';
|
|
import { MemoryRouter } from 'react-router-dom';
|
|
import { QuestionType } from '../../../../Types/QuestionType';
|
|
import StudentModeQuiz from '../../../../components/StudentModeQuiz/StudentModeQuiz';
|
|
|
|
const mockQuestions: QuestionType[] = [
|
|
{
|
|
question: {
|
|
id: '1',
|
|
type: 'MC',
|
|
stem: { format: 'plain', text: 'Sample Question 1' },
|
|
title: 'Sample Question 1',
|
|
hasEmbeddedAnswers: false,
|
|
globalFeedback: null,
|
|
choices: [
|
|
{ text: { format: 'plain', text: 'Option A' }, isCorrect: true, weight: 1, feedback: null },
|
|
{ text: { format: 'plain', text: 'Option B' }, isCorrect: false, weight: 0, feedback: null },
|
|
],
|
|
},
|
|
},
|
|
{
|
|
question: {
|
|
id: '2',
|
|
type: 'TF',
|
|
stem: { format: 'plain', text: 'Sample Question 2' },
|
|
isTrue: true,
|
|
falseFeedback: null,
|
|
trueFeedback: null,
|
|
title: 'Question 2',
|
|
hasEmbeddedAnswers: false,
|
|
globalFeedback: null,
|
|
},
|
|
},
|
|
];
|
|
|
|
const mockSubmitAnswer = jest.fn();
|
|
const mockDisconnectWebSocket = jest.fn();
|
|
|
|
describe('StudentModeQuiz', () => {
|
|
test('renders the initial question', async () => {
|
|
render(
|
|
<MemoryRouter>
|
|
<StudentModeQuiz
|
|
questions={mockQuestions}
|
|
submitAnswer={mockSubmitAnswer}
|
|
disconnectWebSocket={mockDisconnectWebSocket}
|
|
/>
|
|
</MemoryRouter>
|
|
);
|
|
|
|
// wait for the question to be rendered
|
|
await waitFor(() => {
|
|
expect(screen.getByText('Sample Question 1')).toBeInTheDocument();
|
|
expect(screen.getByText('Option A')).toBeInTheDocument();
|
|
expect(screen.getByText('Option B')).toBeInTheDocument();
|
|
expect(screen.getByText('Quitter')).toBeInTheDocument();
|
|
});
|
|
|
|
});
|
|
|
|
test('handles answer submission text', async () => {
|
|
|
|
render(
|
|
<MemoryRouter>
|
|
<StudentModeQuiz
|
|
questions={mockQuestions}
|
|
submitAnswer={mockSubmitAnswer}
|
|
disconnectWebSocket={mockDisconnectWebSocket}
|
|
/>
|
|
</MemoryRouter>
|
|
);
|
|
|
|
fireEvent.click(screen.getByText('Option A'));
|
|
fireEvent.click(screen.getByText('Répondre'));
|
|
|
|
await waitFor(() => {
|
|
expect(mockSubmitAnswer).toHaveBeenCalledWith('Option A', '1');
|
|
});
|
|
});
|
|
|
|
test('handles quit button click', async () => {
|
|
render(
|
|
<MemoryRouter>
|
|
<StudentModeQuiz
|
|
questions={mockQuestions}
|
|
submitAnswer={mockSubmitAnswer}
|
|
disconnectWebSocket={mockDisconnectWebSocket}
|
|
/>
|
|
</MemoryRouter>);
|
|
fireEvent.click(screen.getByText('Quitter'));
|
|
|
|
await waitFor(() => {
|
|
expect(mockDisconnectWebSocket).toHaveBeenCalled();
|
|
});
|
|
});
|
|
|
|
test('navigates to the next question', async () => {
|
|
render(
|
|
<MemoryRouter>
|
|
<StudentModeQuiz
|
|
questions={mockQuestions}
|
|
submitAnswer={mockSubmitAnswer}
|
|
disconnectWebSocket={mockDisconnectWebSocket}
|
|
/>
|
|
</MemoryRouter>);
|
|
|
|
fireEvent.click(screen.getByText('Option A'));
|
|
fireEvent.click(screen.getByText('Répondre'));
|
|
fireEvent.click(screen.getByText('Question suivante'));
|
|
|
|
await waitFor(() => {
|
|
const sampleQuestionElements = screen.queryAllByText(/Sample question 2/i);
|
|
expect(sampleQuestionElements.length).toBeGreaterThan(0);
|
|
expect(screen.getByText('V')).toBeInTheDocument();
|
|
});
|
|
|
|
});
|
|
|
|
test('navigates to the previous question', async () => {
|
|
|
|
render(
|
|
<MemoryRouter>
|
|
<StudentModeQuiz
|
|
questions={mockQuestions}
|
|
submitAnswer={mockSubmitAnswer}
|
|
disconnectWebSocket={mockDisconnectWebSocket}
|
|
/>
|
|
</MemoryRouter>);
|
|
|
|
fireEvent.click(screen.getByText('Option A'));
|
|
fireEvent.click(screen.getByText('Répondre'));
|
|
fireEvent.click(screen.getByText('Question précédente'));
|
|
|
|
await waitFor(() => {
|
|
expect(screen.getByText('Sample Question 1')).toBeInTheDocument();
|
|
expect(screen.getByText('Option B')).toBeInTheDocument();
|
|
});
|
|
});
|
|
|
|
});
|
|
|