2024-03-29 20:08:34 -04:00
|
|
|
//WebsocketService.test.tsx
|
|
|
|
|
import WebsocketService from '../../services/WebsocketService';
|
|
|
|
|
import { io, Socket } from 'socket.io-client';
|
2025-01-10 15:46:17 -05:00
|
|
|
import { ENV_VARIABLES } from 'src/constants';
|
2024-03-29 20:08:34 -04:00
|
|
|
|
|
|
|
|
jest.mock('socket.io-client');
|
|
|
|
|
|
|
|
|
|
describe('WebSocketService', () => {
|
|
|
|
|
let mockSocket: Partial<Socket>;
|
|
|
|
|
|
|
|
|
|
beforeEach(() => {
|
|
|
|
|
mockSocket = {
|
|
|
|
|
emit: jest.fn(),
|
|
|
|
|
disconnect: jest.fn(),
|
|
|
|
|
connect: jest.fn()
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
(io as jest.Mock).mockReturnValue(mockSocket);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
afterEach(() => {
|
|
|
|
|
jest.restoreAllMocks();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('connect should initialize socket connection', () => {
|
2025-02-07 19:36:11 -05:00
|
|
|
WebsocketService.connect(ENV_VARIABLES.VITE_BACKEND_SOCKET_URL);
|
2024-03-29 20:08:34 -04:00
|
|
|
expect(io).toHaveBeenCalled();
|
|
|
|
|
expect(WebsocketService['socket']).toBe(mockSocket);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('disconnect should terminate socket connection', () => {
|
2025-02-07 19:36:11 -05:00
|
|
|
mockSocket = WebsocketService.connect(ENV_VARIABLES.VITE_BACKEND_SOCKET_URL);
|
2024-03-29 20:08:34 -04:00
|
|
|
expect(WebsocketService['socket']).toBeTruthy();
|
|
|
|
|
WebsocketService.disconnect();
|
|
|
|
|
expect(mockSocket.disconnect).toHaveBeenCalled();
|
|
|
|
|
expect(WebsocketService['socket']).toBeNull();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('createRoom should emit create-room event', () => {
|
2025-02-07 19:36:11 -05:00
|
|
|
WebsocketService.connect(ENV_VARIABLES.VITE_BACKEND_SOCKET_URL);
|
2024-03-29 20:08:34 -04:00
|
|
|
WebsocketService.createRoom();
|
|
|
|
|
expect(mockSocket.emit).toHaveBeenCalledWith('create-room');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('nextQuestion should emit next-question event with correct parameters', () => {
|
|
|
|
|
const roomName = 'testRoom';
|
|
|
|
|
const question = { id: 1, text: 'Sample Question' };
|
|
|
|
|
|
2025-02-07 19:36:11 -05:00
|
|
|
mockSocket = WebsocketService.connect(ENV_VARIABLES.VITE_BACKEND_SOCKET_URL);
|
2024-03-29 20:08:34 -04:00
|
|
|
WebsocketService.nextQuestion(roomName, question);
|
|
|
|
|
expect(mockSocket.emit).toHaveBeenCalledWith('next-question', { roomName, question });
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('launchStudentModeQuiz should emit launch-student-mode event with correct parameters', () => {
|
|
|
|
|
const roomName = 'testRoom';
|
|
|
|
|
const questions = [{ id: 1, text: 'Sample Question' }];
|
|
|
|
|
|
2025-02-07 19:36:11 -05:00
|
|
|
mockSocket = WebsocketService.connect(ENV_VARIABLES.VITE_BACKEND_SOCKET_URL);
|
2024-03-29 20:08:34 -04:00
|
|
|
WebsocketService.launchStudentModeQuiz(roomName, questions);
|
|
|
|
|
expect(mockSocket.emit).toHaveBeenCalledWith('launch-student-mode', {
|
|
|
|
|
roomName,
|
|
|
|
|
questions
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('endQuiz should emit end-quiz event with correct parameters', () => {
|
|
|
|
|
const roomName = 'testRoom';
|
|
|
|
|
|
2025-02-07 19:36:11 -05:00
|
|
|
mockSocket = WebsocketService.connect(ENV_VARIABLES.VITE_BACKEND_SOCKET_URL);
|
2024-03-29 20:08:34 -04:00
|
|
|
WebsocketService.endQuiz(roomName);
|
|
|
|
|
expect(mockSocket.emit).toHaveBeenCalledWith('end-quiz', { roomName });
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('joinRoom should emit join-room event with correct parameters', () => {
|
|
|
|
|
const enteredRoomName = 'testRoom';
|
|
|
|
|
const username = 'testUser';
|
|
|
|
|
|
2025-02-07 19:36:11 -05:00
|
|
|
mockSocket = WebsocketService.connect(ENV_VARIABLES.VITE_BACKEND_SOCKET_URL);
|
2024-03-29 20:08:34 -04:00
|
|
|
WebsocketService.joinRoom(enteredRoomName, username);
|
|
|
|
|
expect(mockSocket.emit).toHaveBeenCalledWith('join-room', { enteredRoomName, username });
|
|
|
|
|
});
|
|
|
|
|
});
|