From 29f6bd9cad75988fa5a2af8333f49a0775a0afa6 Mon Sep 17 00:00:00 2001 From: Gabriellvl Date: Mon, 19 May 2025 16:05:39 +0200 Subject: [PATCH] fix: leerling kon alle opdrachten zien + test --- backend/src/services/students.ts | 13 +++++++++---- backend/tests/controllers/students.test.ts | 16 +++++++++++++++- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/backend/src/services/students.ts b/backend/src/services/students.ts index 3ccd2dba..15088398 100644 --- a/backend/src/services/students.ts +++ b/backend/src/services/students.ts @@ -10,7 +10,7 @@ import { mapToClassDTO } from '../interfaces/class.js'; import { mapToGroupDTO, mapToGroupDTOId } from '../interfaces/group.js'; import { mapToStudent, mapToStudentDTO } from '../interfaces/student.js'; import { mapToSubmissionDTO, mapToSubmissionDTOId } from '../interfaces/submission.js'; -import { getAllAssignments } from './assignments.js'; +import {fetchAssignment, getAllAssignments} from './assignments.js'; import { mapToQuestionDTO, mapToQuestionDTOId } from '../interfaces/question.js'; import { mapToStudentRequest, mapToStudentRequestDTO } from '../interfaces/student-request.js'; import { Student } from '../entities/users/student.entity.js'; @@ -26,6 +26,7 @@ import { ClassJoinRequestDTO } from '@dwengo-1/common/interfaces/class-join-requ import { ConflictException } from '../exceptions/conflict-exception.js'; import { Submission } from '../entities/assignments/submission.entity.js'; import { mapToUsername } from '../interfaces/user.js'; +import {mapToAssignmentDTO, mapToAssignmentDTOId} from "../interfaces/assignment"; export async function getAllStudents(full: boolean): Promise { const studentRepository = getStudentRepository(); @@ -102,10 +103,14 @@ export async function getStudentClasses(username: string, full: boolean): Promis export async function getStudentAssignments(username: string, full: boolean): Promise { const student = await fetchStudent(username); - const classRepository = getClassRepository(); - const classes = await classRepository.findByStudent(student); + const groupRepository = getGroupRepository(); + const groups = await groupRepository.findAllGroupsWithStudent(student); + const assignments = await Promise.all(groups.map( async group => await fetchAssignment(group.assignment.within.classId, group.assignment.id))); - return (await Promise.all(classes.map(async (cls) => await getAllAssignments(cls.classId!, full)))).flat(); + if (full) { + return assignments.map(mapToAssignmentDTO); + } + return assignments.map(mapToAssignmentDTOId); } export async function getStudentGroups(username: string, full: boolean): Promise { diff --git a/backend/tests/controllers/students.test.ts b/backend/tests/controllers/students.test.ts index b5ac1e0d..de863351 100644 --- a/backend/tests/controllers/students.test.ts +++ b/backend/tests/controllers/students.test.ts @@ -13,7 +13,7 @@ import { createStudentRequestHandler, getStudentRequestsHandler, deleteClassJoinRequestHandler, - getStudentRequestHandler, + getStudentRequestHandler, getStudentAssignmentsHandler, } from '../../src/controllers/students.js'; import { getDireStraits, getNoordkaap, getTheDoors, TEST_STUDENTS } from '../test_assets/users/students.testdata.js'; import { NotFoundException } from '../../src/exceptions/not-found-exception.js'; @@ -150,6 +150,20 @@ describe('Student controllers', () => { expect(result.groups).to.have.length.greaterThan(0); }); + it('Student assignments', async () => { + const group = getTestGroup01(); + const member = group.members[0]; + req = { params: { username: member.username }, query: {} }; + + await getStudentAssignmentsHandler(req as Request, res as Response); + + expect(jsonMock).toHaveBeenCalledWith(expect.objectContaining({ assignments: expect.anything() })); + + const result = jsonMock.mock.lastCall?.[0]; + expect(result.assignments).to.have.length.greaterThan(0); + }); + + it('Student submissions', async () => { const submission = getSubmission01(); req = { params: { username: submission.submitter.username }, query: { full: 'true' } };