use of de.tum.in.www1.artemis.domain.exam.Exam in project ArTEMiS by ls1intum.
the class ExamIntegrationTest method testGetExamTitle.
private void testGetExamTitle() throws Exception {
Course course = database.createCourse();
Exam exam = ModelFactory.generateExam(course);
exam.setTitle("Test Exam");
exam = examRepository.save(exam);
course.addExam(exam);
courseRepo.save(course);
final var title = request.get("/api/exams/" + exam.getId() + "/title", HttpStatus.OK, String.class);
assertThat(title).isEqualTo(exam.getTitle());
}
use of de.tum.in.www1.artemis.domain.exam.Exam in project ArTEMiS by ls1intum.
the class ExamIntegrationTest method testArchiveExamBeforeEndDate_badRequest.
@Test
@WithMockUser(username = "instructor1", roles = "INSTRUCTOR")
public void testArchiveExamBeforeEndDate_badRequest() throws Exception {
Course course = database.addEmptyCourse();
course.setEndDate(ZonedDateTime.now().plusMinutes(5));
course = courseRepo.save(course);
Exam exam = database.addExam(course);
exam = examRepository.save(exam);
request.put("/api/courses/" + course.getId() + "/exams/" + exam.getId() + "/archive", null, HttpStatus.BAD_REQUEST);
}
use of de.tum.in.www1.artemis.domain.exam.Exam in project ArTEMiS by ls1intum.
the class ExamIntegrationTest method createExamsWithInvalidDates.
private List<Exam> createExamsWithInvalidDates(Course course) {
// Test for bad request, visible date not set
Exam examA = ModelFactory.generateExam(course);
examA.setVisibleDate(null);
// Test for bad request, start date not set
Exam examB = ModelFactory.generateExam(course);
examB.setStartDate(null);
// Test for bad request, end date not set
Exam examC = ModelFactory.generateExam(course);
examC.setEndDate(null);
// Test for bad request, start date not after visible date
Exam examD = ModelFactory.generateExam(course);
examD.setStartDate(examD.getVisibleDate());
// Test for bad request, end date not after start date
Exam examE = ModelFactory.generateExam(course);
examE.setEndDate(examE.getStartDate());
// Test for bad request, when visibleDate equals the startDate
Exam examF = ModelFactory.generateExam(course);
examF.setVisibleDate(examF.getStartDate());
return List.of(examA, examB, examC, examD, examE, examF);
}
use of de.tum.in.www1.artemis.domain.exam.Exam in project ArTEMiS by ls1intum.
the class ExamIntegrationTest method testCreateExam_asInstructor.
@Test
@WithMockUser(username = "instructor1", roles = "INSTRUCTOR")
public void testCreateExam_asInstructor() throws Exception {
// Test for bad request when exam id is already set.
Exam examA = ModelFactory.generateExam(course1);
examA.setId(55L);
request.post("/api/courses/" + course1.getId() + "/exams", examA, HttpStatus.BAD_REQUEST);
// Test for bad request when course is null.
Exam examB = ModelFactory.generateExam(course1);
examB.setCourse(null);
request.post("/api/courses/" + course1.getId() + "/exams", examB, HttpStatus.BAD_REQUEST);
// Test for bad request when course deviates from course specified in route.
Exam examC = ModelFactory.generateExam(course1);
request.post("/api/courses/" + course2.getId() + "/exams", examC, HttpStatus.BAD_REQUEST);
// Test invalid dates
List<Exam> examsWithInvalidDate = createExamsWithInvalidDates(course1);
for (var exam : examsWithInvalidDate) {
request.post("/api/courses/" + course1.getId() + "/exams", exam, HttpStatus.BAD_REQUEST);
}
// Test for conflict when user tries to create an exam with exercise groups.
Exam examD = ModelFactory.generateExam(course1);
examD.addExerciseGroup(ModelFactory.generateExerciseGroup(true, exam1));
request.post("/api/courses/" + course1.getId() + "/exams", examD, HttpStatus.CONFLICT);
// Test examAccessService.
Exam examE = ModelFactory.generateExam(course1);
request.post("/api/courses/" + course1.getId() + "/exams", examE, HttpStatus.CREATED);
verify(examAccessService, times(1)).checkCourseAccessForInstructorElseThrow(course1.getId());
}
use of de.tum.in.www1.artemis.domain.exam.Exam in project ArTEMiS by ls1intum.
the class ExamIntegrationTest method testDeleteStudent.
@Test
@WithMockUser(username = "instructor1", roles = "INSTRUCTOR")
public void testDeleteStudent() throws Exception {
// Create an exam with registered students
Exam exam = database.setupExamWithExerciseGroupsExercisesRegisteredStudents(course1);
var student1 = database.getUserByLogin("student1");
var student2 = database.getUserByLogin("student2");
// Remove student1 from the exam
request.delete("/api/courses/" + course1.getId() + "/exams/" + exam.getId() + "/students/student1", HttpStatus.OK);
// Get the exam with all registered users
var params = new LinkedMultiValueMap<String, String>();
params.add("withStudents", "true");
Exam storedExam = request.get("/api/courses/" + course1.getId() + "/exams/" + exam.getId(), HttpStatus.OK, Exam.class, params);
// Ensure that student1 was removed from the exam
assertThat(storedExam.getRegisteredUsers()).doesNotContain(student1);
assertThat(storedExam.getRegisteredUsers()).hasSize(3);
// Create individual student exams
List<StudentExam> generatedStudentExams = request.postListWithResponseBody("/api/courses/" + course1.getId() + "/exams/" + exam.getId() + "/generate-student-exams", Optional.empty(), StudentExam.class, HttpStatus.OK);
assertThat(generatedStudentExams).hasSize(storedExam.getRegisteredUsers().size());
// Start the exam to create participations
request.postWithResponseBody("/api/courses/" + course1.getId() + "/exams/" + exam.getId() + "/student-exams/start-exercises", Optional.empty(), Integer.class, HttpStatus.OK);
// Get the student exam of student2
Optional<StudentExam> optionalStudent1Exam = generatedStudentExams.stream().filter(studentExam -> studentExam.getUser().equals(student2)).findFirst();
assertThat(optionalStudent1Exam.get()).isNotNull();
var studentExam2 = optionalStudent1Exam.get();
// explicitly set the user again to prevent issues in the following server call due to the use of SecurityUtils.setAuthorizationObject();
database.changeUser("instructor1");
// Remove student2 from the exam
request.delete("/api/courses/" + course1.getId() + "/exams/" + exam.getId() + "/students/student2", HttpStatus.OK);
// Get the exam with all registered users
params = new LinkedMultiValueMap<>();
params.add("withStudents", "true");
storedExam = request.get("/api/courses/" + course1.getId() + "/exams/" + exam.getId(), HttpStatus.OK, Exam.class, params);
// Ensure that student2 was removed from the exam
assertThat(storedExam.getRegisteredUsers()).doesNotContain(student2);
assertThat(storedExam.getRegisteredUsers()).hasSize(2);
// Ensure that the student exam of student2 was deleted
List<StudentExam> studentExams = request.getList("/api/courses/" + course1.getId() + "/exams/" + exam.getId() + "/student-exams", HttpStatus.OK, StudentExam.class);
assertThat(studentExams).hasSameSizeAs(storedExam.getRegisteredUsers()).doesNotContain(studentExam2);
// Ensure that the participations were not deleted
List<StudentParticipation> participationsStudent2 = studentParticipationRepository.findByStudentIdAndIndividualExercisesWithEagerSubmissionsResultIgnoreTestRuns(student2.getId(), studentExam2.getExercises());
assertThat(participationsStudent2).hasSize(studentExam2.getExercises().size());
// Make sure delete also works if so many objects have been created before
request.delete("/api/courses/" + course1.getId() + "/exams/" + exam.getId(), HttpStatus.OK);
}
Aggregations