Merge remote-tracking branch 'origin/feat/user-routes' into feat/user-routes

# Conflicts:
#	backend/src/interfaces/answer.ts
#	backend/src/services/questions.ts
#	frontend/src/controllers/students.ts
#	frontend/src/controllers/teachers.ts
#	frontend/src/queries/students.ts
#	frontend/src/queries/teachers.ts
This commit is contained in:
Gabriellvl 2025-04-02 14:54:42 +02:00
commit 87366b2821
7 changed files with 23 additions and 41 deletions

View file

@ -4,7 +4,8 @@ import {
createStudent, createStudent,
deleteClassJoinRequest, deleteClassJoinRequest,
deleteStudent, deleteStudent,
getAllStudents, getJoinRequestByStudentClass, getAllStudents,
getJoinRequestByStudentClass,
getJoinRequestsByStudent, getJoinRequestsByStudent,
getStudent, getStudent,
getStudentAssignments, getStudentAssignments,

View file

@ -3,7 +3,7 @@ import {
createStudentRequestHandler, createStudentRequestHandler,
deleteClassJoinRequestHandler, deleteClassJoinRequestHandler,
getStudentRequestHandler, getStudentRequestHandler,
getStudentRequestsHandler getStudentRequestsHandler,
} from '../controllers/students.js'; } from '../controllers/students.js';
const router = express.Router({ mergeParams: true }); const router = express.Router({ mergeParams: true });

View file

@ -12,12 +12,7 @@ import { GroupDTO, mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js
import { mapToStudent, mapToStudentDTO, StudentDTO } from '../interfaces/student.js'; import { mapToStudent, mapToStudentDTO, StudentDTO } from '../interfaces/student.js';
import { mapToSubmissionDTO, mapToSubmissionDTOId, SubmissionDTO, SubmissionDTOId } from '../interfaces/submission.js'; import { mapToSubmissionDTO, mapToSubmissionDTOId, SubmissionDTO, SubmissionDTOId } from '../interfaces/submission.js';
import { getAllAssignments } from './assignments.js'; import { getAllAssignments } from './assignments.js';
import { import { mapToQuestionDTO, mapToQuestionDTOId, QuestionDTO, QuestionId } from '../interfaces/question.js';
mapToQuestionDTO,
mapToQuestionDTOId,
QuestionDTO,
QuestionId
} from '../interfaces/question.js';
import { mapToStudentRequest, mapToStudentRequestDTO, StudentRequestDTO } from '../interfaces/student-request.js'; import { mapToStudentRequest, mapToStudentRequestDTO, StudentRequestDTO } from '../interfaces/student-request.js';
import { Student } from '../entities/users/student.entity.js'; import { Student } from '../entities/users/student.entity.js';
import { NotFoundException } from '../exceptions/not-found-exception.js'; import { NotFoundException } from '../exceptions/not-found-exception.js';

View file

@ -6,12 +6,7 @@ import {
getTeacherRepository, getTeacherRepository,
} from '../data/repositories.js'; } from '../data/repositories.js';
import { ClassDTO, mapToClassDTO } from '../interfaces/class.js'; import { ClassDTO, mapToClassDTO } from '../interfaces/class.js';
import { import { mapToQuestionDTO, mapToQuestionDTOId, QuestionDTO, QuestionId } from '../interfaces/question.js';
mapToQuestionDTO,
mapToQuestionDTOId,
QuestionDTO,
QuestionId
} from '../interfaces/question.js';
import { mapToTeacher, mapToTeacherDTO, TeacherDTO } from '../interfaces/teacher.js'; import { mapToTeacher, mapToTeacherDTO, TeacherDTO } from '../interfaces/teacher.js';
import { Teacher } from '../entities/users/teacher.entity.js'; import { Teacher } from '../entities/users/teacher.entity.js';
import { fetchStudent } from './students.js'; import { fetchStudent } from './students.js';

View file

@ -12,7 +12,8 @@ import {
getStudentQuestionsHandler, getStudentQuestionsHandler,
createStudentRequestHandler, createStudentRequestHandler,
getStudentRequestsHandler, getStudentRequestsHandler,
deleteClassJoinRequestHandler, getStudentRequestHandler, deleteClassJoinRequestHandler,
getStudentRequestHandler,
} from '../../src/controllers/students.js'; } from '../../src/controllers/students.js';
import { TEST_STUDENTS } from '../test_assets/users/students.testdata.js'; import { TEST_STUDENTS } from '../test_assets/users/students.testdata.js';
import { NotFoundException } from '../../src/exceptions/not-found-exception.js'; import { NotFoundException } from '../../src/exceptions/not-found-exception.js';
@ -49,15 +50,13 @@ describe('Student controllers', () => {
it('Student not found', async () => { it('Student not found', async () => {
req = { params: { username: 'doesnotexist' } }; req = { params: { username: 'doesnotexist' } };
await expect(async () => getStudentHandler(req as Request, res as Response)) await expect(async () => getStudentHandler(req as Request, res as Response)).rejects.toThrow(NotFoundException);
.rejects.toThrow(NotFoundException);
}); });
it('No username', async () => { it('No username', async () => {
req = { params: {} }; req = { params: {} };
await expect(async () => getStudentHandler(req as Request, res as Response)) await expect(async () => getStudentHandler(req as Request, res as Response)).rejects.toThrowError(BadRequestException);
.rejects.toThrowError(BadRequestException);
}); });
it('Create and delete student', async () => { it('Create and delete student', async () => {
@ -68,7 +67,7 @@ describe('Student controllers', () => {
lastName: 'Student', lastName: 'Student',
} as StudentDTO; } as StudentDTO;
req = { req = {
body: student body: student,
}; };
await createStudentHandler(req as Request, res as Response); await createStudentHandler(req as Request, res as Response);
@ -91,15 +90,13 @@ describe('Student controllers', () => {
}, },
}; };
await expect(async () => createStudentHandler(req as Request, res as Response)) await expect(async () => createStudentHandler(req as Request, res as Response)).rejects.toThrowError(EntityAlreadyExistsException);
.rejects.toThrowError(EntityAlreadyExistsException);
}); });
it('Create student no body', async () => { it('Create student no body', async () => {
req = { body: {} }; req = { body: {} };
await expect(async () => createStudentHandler(req as Request, res as Response)) await expect(async () => createStudentHandler(req as Request, res as Response)).rejects.toThrowError(BadRequestException);
.rejects.toThrowError(BadRequestException);
}); });
it('Student list', async () => { it('Student list', async () => {
@ -218,8 +215,7 @@ describe('Student controllers', () => {
body: { classId: 'id02' }, body: { classId: 'id02' },
}; };
await expect(async () => createStudentRequestHandler(req as Request, res as Response)) await expect(async () => createStudentRequestHandler(req as Request, res as Response)).rejects.toThrow(ConflictException);
.rejects.toThrow(ConflictException);
}); });
it('Delete join request', async () => { it('Delete join request', async () => {
@ -231,7 +227,6 @@ describe('Student controllers', () => {
expect(jsonMock).toHaveBeenCalledWith(expect.objectContaining({ request: expect.anything() })); expect(jsonMock).toHaveBeenCalledWith(expect.objectContaining({ request: expect.anything() }));
await expect(async () => deleteClassJoinRequestHandler(req as Request, res as Response)) await expect(async () => deleteClassJoinRequestHandler(req as Request, res as Response)).rejects.toThrow(NotFoundException);
.rejects.toThrow(NotFoundException);
}); });
}); });

View file

@ -46,15 +46,13 @@ describe('Teacher controllers', () => {
it('Teacher not found', async () => { it('Teacher not found', async () => {
req = { params: { username: 'doesnotexist' } }; req = { params: { username: 'doesnotexist' } };
await expect(async () => getTeacherHandler(req as Request, res as Response)) await expect(async () => getTeacherHandler(req as Request, res as Response)).rejects.toThrow(NotFoundException);
.rejects.toThrow(NotFoundException);
}); });
it('No username', async () => { it('No username', async () => {
req = { params: {} }; req = { params: {} };
await expect(async () => getTeacherHandler(req as Request, res as Response)) await expect(async () => getTeacherHandler(req as Request, res as Response)).rejects.toThrowError(BadRequestException);
.rejects.toThrowError(BadRequestException);
}); });
it('Create and delete teacher', async () => { it('Create and delete teacher', async () => {
@ -63,7 +61,7 @@ describe('Teacher controllers', () => {
username: 'coolteacher', username: 'coolteacher',
firstName: 'New', firstName: 'New',
lastName: 'Teacher', lastName: 'Teacher',
} };
req = { req = {
body: teacher, body: teacher,
}; };
@ -88,15 +86,13 @@ describe('Teacher controllers', () => {
}, },
}; };
await expect(async () => createTeacherHandler(req as Request, res as Response)) await expect(async () => createTeacherHandler(req as Request, res as Response)).rejects.toThrowError(EntityAlreadyExistsException);
.rejects.toThrowError(EntityAlreadyExistsException);
}); });
it('Create teacher no body', async () => { it('Create teacher no body', async () => {
req = { body: {} }; req = { body: {} };
await expect(async () => createTeacherHandler(req as Request, res as Response)) await expect(async () => createTeacherHandler(req as Request, res as Response)).rejects.toThrowError(BadRequestException);
.rejects.toThrowError(BadRequestException);
}); });
it('Teacher list', async () => { it('Teacher list', async () => {