diff --git a/backend/tests/data/submissions.test.ts b/backend/tests/data/submissions.test.ts new file mode 100644 index 00000000..5eb2b11a --- /dev/null +++ b/backend/tests/data/submissions.test.ts @@ -0,0 +1,98 @@ +import { beforeAll, describe, expect, it } from 'vitest'; +import { setupTestApp } from '../setup-tests'; +import { SubmissionRepository } from '../../src/data/assignments/submission-repository'; +import { + getAssignmentRepository, + getClassRepository, + getGroupRepository, + getStudentRepository, + getSubmissionRepository, +} from '../../src/data/repositories'; +import { LearningObject } from '../../src/entities/content/learning-object.entity'; +import { LearningObjectIdentifier } from '../../src/entities/content/learning-object-identifier'; +import { Language } from '../../src/entities/content/language'; +import { subscribe } from 'diagnostics_channel'; +import { Student } from '../../src/entities/users/student.entity'; +import { StudentRepository } from '../../src/data/users/student-repository'; +import { GroupRepository } from '../../src/data/assignments/group-repository'; +import { AssignmentRepository } from '../../src/data/assignments/assignment-repository'; +import { ClassRepository } from '../../src/data/classes/class-repository'; + +describe('SubmissionRepository', () => { + let SubmissionRepository: SubmissionRepository; + let StudentRepository: StudentRepository; + let GroupRepository: GroupRepository; + let AssignmentRepository: AssignmentRepository; + let ClassRepository: ClassRepository; + + beforeAll(async () => { + await setupTestApp(); + SubmissionRepository = getSubmissionRepository(); + StudentRepository = getStudentRepository(); + GroupRepository = getGroupRepository(); + AssignmentRepository = getAssignmentRepository(); + ClassRepository = getClassRepository(); + }); + + it('should find the requested submission', async () => { + const id = new LearningObjectIdentifier('id03', Language.English, '1'); + const submission = + await SubmissionRepository.findSubmissionByLearningObjectAndSubmissionNumber( + id, + 1 + ); + + expect(submission).toBeTruthy(); + expect(submission?.content).toBe('sub1'); + }); + + it('should find the most recent submission for a student', async () => { + const id = new LearningObjectIdentifier('id02', Language.English, '1'); + const student = await StudentRepository.findByUsername('Noordkaap'); + const submission = + await SubmissionRepository.findMostRecentSubmissionForStudent( + id, + student! + ); + + expect(submission).toBeTruthy(); + expect(submission?.submissionTime.getDate()).toBe(25); + }); + + it('should find the most recent submission for a group', async () => { + const id = new LearningObjectIdentifier('id03', Language.English, '1'); + const class_ = await ClassRepository.findById('id01'); + const assignment = await AssignmentRepository.findByClassAndId( + class_!, + 1 + ); + const group = await GroupRepository.findByAssignmentAndGroupNumber( + assignment!, + 1 + ); + const submission = + await SubmissionRepository.findMostRecentSubmissionForGroup( + id, + group! + ); + + expect(submission).toBeTruthy(); + expect(submission?.submissionTime.getDate()).toBe(25); + }); + + it('should not find a deleted submission', async () => { + const id = new LearningObjectIdentifier('id01', Language.English, '1'); + await SubmissionRepository.deleteSubmissionByLearningObjectAndSubmissionNumber( + id, + 1 + ); + + const submission = + await SubmissionRepository.findSubmissionByLearningObjectAndSubmissionNumber( + id, + 1 + ); + + expect(submission).toBeNull(); + }); +}); diff --git a/backend/tests/setup-tests.ts b/backend/tests/setup-tests.ts index e6661faa..2f497ece 100644 --- a/backend/tests/setup-tests.ts +++ b/backend/tests/setup-tests.ts @@ -540,57 +540,57 @@ export async function setupTestApp() { content: 'answer', }); - // const submission01 = em.create(Submission, { - // learningObjectHruid: 'id03', - // learningObjectLanguage: Language.English, - // learningObjectVersion: '1', - // submissionNumber: 1, - // submitter: student01, - // submissionTime: new Date(2025, 2, 20), - // onBehalfOf: group01, - // content: '', - // }); + const submission01 = em.create(Submission, { + learningObjectHruid: 'id03', + learningObjectLanguage: Language.English, + learningObjectVersion: '1', + submissionNumber: 1, + submitter: student01, + submissionTime: new Date(2025, 2, 20), + onBehalfOf: group01, + content: 'sub1', + }); - // const submission02 = em.create(Submission, { - // learningObjectHruid: 'id03', - // learningObjectLanguage: Language.English, - // learningObjectVersion: '1', - // submissionNumber: 1, - // submitter: student01, - // submissionTime: new Date(2025, 2, 25), - // onBehalfOf: group01, - // content: '', - // }); + const submission02 = em.create(Submission, { + learningObjectHruid: 'id03', + learningObjectLanguage: Language.English, + learningObjectVersion: '1', + submissionNumber: 2, + submitter: student01, + submissionTime: new Date(2025, 2, 25), + onBehalfOf: group01, + content: '', + }); - // const submission03 = em.create(Submission, { - // learningObjectHruid: 'id02', - // learningObjectLanguage: Language.English, - // learningObjectVersion: '1', - // submissionNumber: 1, - // submitter: student01, - // submissionTime: new Date(2025, 2, 20), - // content: '', - // }); + const submission03 = em.create(Submission, { + learningObjectHruid: 'id02', + learningObjectLanguage: Language.English, + learningObjectVersion: '1', + submissionNumber: 1, + submitter: student01, + submissionTime: new Date(2025, 2, 20), + content: '', + }); - // const submission04 = em.create(Submission, { - // learningObjectHruid: 'id02', - // learningObjectLanguage: Language.English, - // learningObjectVersion: '1', - // submissionNumber: 1, - // submitter: student01, - // submissionTime: new Date(2025, 2, 25), - // content: '', - // }); + const submission04 = em.create(Submission, { + learningObjectHruid: 'id02', + learningObjectLanguage: Language.English, + learningObjectVersion: '1', + submissionNumber: 2, + submitter: student01, + submissionTime: new Date(2025, 2, 25), + content: '', + }); - // const submission05 = em.create(Submission, { - // learningObjectHruid: 'id01', - // learningObjectLanguage: Language.English, - // learningObjectVersion: '1', - // submissionNumber: 1, - // submitter: student02, - // submissionTime: new Date(2025, 2, 20), - // content: '', - // }); + const submission05 = em.create(Submission, { + learningObjectHruid: 'id01', + learningObjectLanguage: Language.English, + learningObjectVersion: '1', + submissionNumber: 1, + submitter: student02, + submissionTime: new Date(2025, 2, 20), + content: '', + }); await em.persistAndFlush([ student01, @@ -638,5 +638,10 @@ export async function setupTestApp() { answer01, answer02, answer03, + submission01, + submission02, + submission03, + submission04, + submission05, ]); }