test: questions data

This commit is contained in:
laurejablonski 2025-04-27 12:42:10 +02:00
parent 5eaa93e18f
commit 49449b90be
2 changed files with 51 additions and 35 deletions

View file

@ -1,45 +1,51 @@
import { beforeAll, describe, expect, it } from 'vitest';
import { setupTestApp } from '../../setup-tests';
import { QuestionRepository } from '../../../src/data/questions/question-repository';
import {
getAssignmentRepository,
getClassRepository,
getGroupRepository,
getQuestionRepository,
getStudentRepository,
} from '../../../src/data/repositories';
import { StudentRepository } from '../../../src/data/users/student-repository';
import { getQuestionRepository } from '../../../src/data/repositories';
import { LearningObjectIdentifier } from '../../../src/entities/content/learning-object-identifier';
import { Language } from '@dwengo-1/common/util/language';
import { Question } from '../../../src/entities/questions/question.entity';
import { Class } from '../../../src/entities/classes/class.entity';
import { Assignment } from '../../../src/entities/assignments/assignment.entity';
import { testLearningObject03, testLearningObject05 } from '../../test_assets/content/learning-objects.testdata';
import { getQuestion01, getQuestion02, getQuestion03, getQuestion05, getQuestion06 } from '../../test_assets/questions/questions.testdata';
import { getNoordkaap, getTool } from '../../test_assets/users/students.testdata';
import { getAssignment01 } from '../../test_assets/assignments/assignments.testdata';
import { getTestGroup01 } from '../../test_assets/assignments/groups.testdata';
describe('QuestionRepository', () => {
let questionRepository: QuestionRepository;
let studentRepository: StudentRepository;
beforeAll(async () => {
await setupTestApp();
questionRepository = getQuestionRepository();
studentRepository = getStudentRepository();
});
it('should return all questions part of the given learning object', async () => {
const id = new LearningObjectIdentifier('id05', Language.English, 1);
const questions = await questionRepository.findAllQuestionsAboutLearningObject(id);
const q1 = getQuestion01();
const q2 = getQuestion02();
const q3 = getQuestion05();
const q4 = getQuestion06();
const loid = {
hruid: q1.learningObjectHruid,
language: q1.learningObjectLanguage,
version: q1.learningObjectVersion,
} as LearningObjectIdentifier;
const questions = await questionRepository.findAllQuestionsAboutLearningObject(loid);
expect(questions).toBeTruthy();
expect(questions).toHaveLength(4);
expect(questions[0].sequenceNumber!).toBeOneOf([q1.sequenceNumber, q2.sequenceNumber, q3.sequenceNumber, q4.sequenceNumber]);
expect(questions[1].sequenceNumber!).toBeOneOf([q1.sequenceNumber, q2.sequenceNumber, q3.sequenceNumber, q4.sequenceNumber]);
expect(questions[2].sequenceNumber!).toBeOneOf([q1.sequenceNumber, q2.sequenceNumber, q3.sequenceNumber, q4.sequenceNumber]);
expect(questions[3].sequenceNumber!).toBeOneOf([q1.sequenceNumber, q2.sequenceNumber, q3.sequenceNumber, q4.sequenceNumber]);
});
it('should create new question', async () => {
const id = new LearningObjectIdentifier('id03', Language.English, 1);
const student = await studentRepository.findByUsername('Noordkaap');
const clazz = await getClassRepository().findById('8764b861-90a6-42e5-9732-c0d9eb2f55f9');
const assignment = await getAssignmentRepository().findByClassAndId(clazz!, 21000);
const group = await getGroupRepository().findByAssignmentAndGroupNumber(assignment!, 21001);
const id = {
hruid: testLearningObject03.hruid,
language: testLearningObject03.language,
version: testLearningObject03.version,
} as LearningObjectIdentifier;
const student = getNoordkaap();
const group = getTestGroup01();
await questionRepository.createQuestion({
loId: id,
inGroup: group!,
@ -50,18 +56,15 @@ describe('QuestionRepository', () => {
expect(question).toBeTruthy();
expect(question).toHaveLength(1);
expect(question[0].content).toBe('question?');
});
let clazz: Class | null;
let assignment: Assignment | null;
let loId: LearningObjectIdentifier;
it('should find all questions for a certain learning object and assignment', async () => {
clazz = await getClassRepository().findById('8764b861-90a6-42e5-9732-c0d9eb2f55f9');
assignment = await getAssignmentRepository().findByClassAndId(clazz!, 21000);
loId = {
hruid: 'id05',
language: Language.English,
version: 1,
const assignment = getAssignment01();
const loId = {
hruid: testLearningObject05.hruid,
language: testLearningObject05.language,
version: testLearningObject05.version,
};
const result = await questionRepository.findAllQuestionsAboutLearningObjectInAssignment(loId, assignment!);
sortQuestions(result);
@ -84,7 +87,14 @@ describe('QuestionRepository', () => {
});
it("should find only the questions for a certain learning object and assignment asked by the user's group", async () => {
const result = await questionRepository.findAllQuestionsAboutLearningObjectInAssignment(loId, assignment!, 'Tool');
const loId = {
hruid: testLearningObject05.hruid,
language: testLearningObject05.language,
version: testLearningObject05.version,
};
const assignment = getAssignment01();
const result = await questionRepository.findAllQuestionsAboutLearningObjectInAssignment(loId, assignment!, getTool().username);
// (student Tool is in group #2)
expect(result).toHaveLength(1);
@ -99,12 +109,17 @@ describe('QuestionRepository', () => {
});
it('should not find removed question', async () => {
const id = new LearningObjectIdentifier('id04', Language.English, 1);
await questionRepository.removeQuestionByLearningObjectAndSequenceNumber(id, 1);
const usedQuestion = getQuestion03();
const id = {
hruid: usedQuestion.learningObjectHruid,
language: usedQuestion.learningObjectLanguage,
version: usedQuestion.learningObjectVersion,
} as LearningObjectIdentifier;
await questionRepository.removeQuestionByLearningObjectAndSequenceNumber(id, usedQuestion.sequenceNumber!);
const question = await questionRepository.findAllQuestionsAboutLearningObject(id);
const questions = await questionRepository.findAllQuestionsAboutLearningObject(id);
expect(question).toHaveLength(0);
expect(questions).toHaveLength(0);
});
});