Search in sources :

Example 31 with ExerciseGroup

use of de.tum.in.www1.artemis.domain.exam.ExerciseGroup in project Artemis by ls1intum.

the class ProgrammingExerciseTestService method createProgrammingExerciseForExam_DatesSet.

// TEST
public void createProgrammingExerciseForExam_DatesSet() throws Exception {
    setupRepositoryMocks(examExercise, exerciseRepo, solutionRepo, testRepo, auxRepo);
    ExerciseGroup exerciseGroup = examExercise.getExerciseGroup();
    mockDelegate.mockConnectorRequestsForSetup(examExercise, false);
    ZonedDateTime someMoment = ZonedDateTime.of(2000, 06, 15, 0, 0, 0, 0, ZoneId.of("Z"));
    examExercise.setDueDate(someMoment);
    request.postWithResponseBody(ROOT + SETUP, examExercise, ProgrammingExercise.class, HttpStatus.BAD_REQUEST);
    assertThat(exerciseGroup.getExercises()).doesNotContain(examExercise);
}
Also used : ZonedDateTime(java.time.ZonedDateTime) ExerciseGroup(de.tum.in.www1.artemis.domain.exam.ExerciseGroup)

Example 32 with ExerciseGroup

use of de.tum.in.www1.artemis.domain.exam.ExerciseGroup in project Artemis by ls1intum.

the class ExamQuizServiceTest method evaluateQuiz.

@Test
@WithMockUser(username = "instructor1", roles = "INSTRUCTOR")
public void evaluateQuiz() throws Exception {
    for (int i = 0; i < numberOfParticipants; i++) {
        exam.addRegisteredUser(users.get(i));
    }
    exam = examRepository.save(exam);
    exerciseGroup.setExam(exam);
    exerciseGroup = exerciseGroupRepository.save(exerciseGroup);
    exam.setExerciseGroups(List.of(exerciseGroup));
    quizExercise.setExerciseGroup(exerciseGroup);
    quizExercise = quizExerciseService.save(quizExercise);
    exerciseGroup.setExercises(Set.of(quizExercise));
    assertThat(studentExamRepository.generateStudentExams(exam)).hasSize(numberOfParticipants);
    assertThat(studentExamRepository.findByExamId(exam.getId())).hasSize(numberOfParticipants);
    assertThat(studentExamService.startExercises(exam.getId())).isEqualTo(numberOfParticipants);
    for (int i = 0; i < numberOfParticipants; i++) {
        database.changeUser("student" + (i + 1));
        QuizSubmission quizSubmission = database.generateSubmissionForThreeQuestions(quizExercise, i + 1, true, ZonedDateTime.now());
        request.put("/api/exercises/" + quizExercise.getId() + "/submissions/exam", quizSubmission, HttpStatus.OK);
    }
    database.changeUser("instructor1");
    // All exams should be over before evaluation
    for (StudentExam studentExam : studentExamRepository.findByExamId(exam.getId())) {
        studentExam.setWorkingTime(0);
        studentExamRepository.save(studentExam);
    }
    Integer numberOfEvaluatedExercises = request.postWithResponseBody("/api/courses/" + course.getId() + "/exams/" + exam.getId() + "/student-exams/evaluate-quiz-exercises", Optional.empty(), Integer.class, HttpStatus.OK);
    assertThat(numberOfEvaluatedExercises).isEqualTo(1);
    checkStatistics(quizExercise);
    studentExamRepository.deleteAll();
    // Make sure delete also works if so many objects have been created before
    request.delete("/api/courses/" + course.getId() + "/exams/" + exam.getId(), HttpStatus.OK);
    userRepository.deleteAll();
}
Also used : StudentExam(de.tum.in.www1.artemis.domain.exam.StudentExam) WithMockUser(org.springframework.security.test.context.support.WithMockUser) Test(org.junit.jupiter.api.Test) AbstractSpringIntegrationBambooBitbucketJiraTest(de.tum.in.www1.artemis.AbstractSpringIntegrationBambooBitbucketJiraTest)

Example 33 with ExerciseGroup

use of de.tum.in.www1.artemis.domain.exam.ExerciseGroup in project Artemis by ls1intum.

the class ExamServiceTest method addNewTextExerciseToExerciseGroup.

private TextExercise addNewTextExerciseToExerciseGroup(ExerciseGroup exerciseGroup, Long id, Double maxPoints, Double maxBonusPoints, IncludedInOverallScore includedInOverallScore) {
    TextExercise includedTextExercise = new TextExercise();
    includedTextExercise.setId(id);
    includedTextExercise.setMaxPoints(maxPoints);
    includedTextExercise.setBonusPoints(maxBonusPoints);
    includedTextExercise.setIncludedInOverallScore(includedInOverallScore);
    includedTextExercise.setExerciseGroup(exerciseGroup);
    return includedTextExercise;
}
Also used : TextExercise(de.tum.in.www1.artemis.domain.TextExercise)

Example 34 with ExerciseGroup

use of de.tum.in.www1.artemis.domain.exam.ExerciseGroup in project Artemis by ls1intum.

the class ExamService method getAllProgrammingExercisesForExam.

private Set<ProgrammingExercise> getAllProgrammingExercisesForExam(Long examId) {
    var exam = examRepository.findWithExerciseGroupsAndExercisesById(examId).orElseThrow(() -> new EntityNotFoundException("Exam", examId));
    // Collect all programming exercises for the given exam
    Set<ProgrammingExercise> programmingExercises = new HashSet<>();
    for (ExerciseGroup exerciseGroup : exam.getExerciseGroups()) {
        for (Exercise exercise : exerciseGroup.getExercises()) {
            if (exercise instanceof ProgrammingExercise) {
                programmingExercises.add((ProgrammingExercise) exercise);
            }
        }
    }
    return programmingExercises;
}
Also used : QuizExercise(de.tum.in.www1.artemis.domain.quiz.QuizExercise) ModelingExercise(de.tum.in.www1.artemis.domain.modeling.ModelingExercise) EntityNotFoundException(de.tum.in.www1.artemis.web.rest.errors.EntityNotFoundException) ExerciseGroup(de.tum.in.www1.artemis.domain.exam.ExerciseGroup)

Example 35 with ExerciseGroup

use of de.tum.in.www1.artemis.domain.exam.ExerciseGroup in project Artemis by ls1intum.

the class ExamService method findByIdWithExerciseGroupsAndExercisesElseThrow.

/**
 * Get one exam by id with exercise groups and exercises.
 * Also fetches the template and solution participation for programming exercises and questions for quiz exercises.
 *
 * @param examId the id of the entity
 * @return the exam with exercise groups
 */
@NotNull
public Exam findByIdWithExerciseGroupsAndExercisesElseThrow(Long examId) {
    log.debug("Request to get exam with exercise groups : {}", examId);
    Exam exam = examRepository.findWithExerciseGroupsAndExercisesById(examId).orElseThrow(() -> new EntityNotFoundException("Exam", examId));
    for (ExerciseGroup exerciseGroup : exam.getExerciseGroups()) {
        for (Exercise exercise : exerciseGroup.getExercises()) {
            if (exercise instanceof ProgrammingExercise) {
                ProgrammingExercise exerciseWithTemplateAndSolutionParticipation = programmingExerciseRepository.findByIdWithTemplateAndSolutionParticipationWithResultsElseThrow(exercise.getId());
                ((ProgrammingExercise) exercise).setTemplateParticipation(exerciseWithTemplateAndSolutionParticipation.getTemplateParticipation());
                ((ProgrammingExercise) exercise).setSolutionParticipation(exerciseWithTemplateAndSolutionParticipation.getSolutionParticipation());
            }
            if (exercise instanceof QuizExercise) {
                QuizExercise quizExercise = quizExerciseRepository.findByIdWithQuestionsElseThrow(exercise.getId());
                ((QuizExercise) exercise).setQuizQuestions(quizExercise.getQuizQuestions());
            }
        }
    }
    return exam;
}
Also used : QuizExercise(de.tum.in.www1.artemis.domain.quiz.QuizExercise) ModelingExercise(de.tum.in.www1.artemis.domain.modeling.ModelingExercise) EntityNotFoundException(de.tum.in.www1.artemis.web.rest.errors.EntityNotFoundException) ExerciseGroup(de.tum.in.www1.artemis.domain.exam.ExerciseGroup) StudentExam(de.tum.in.www1.artemis.domain.exam.StudentExam) Exam(de.tum.in.www1.artemis.domain.exam.Exam) QuizExercise(de.tum.in.www1.artemis.domain.quiz.QuizExercise) NotNull(javax.validation.constraints.NotNull)

Aggregations

ExerciseGroup (de.tum.in.www1.artemis.domain.exam.ExerciseGroup)126 WithMockUser (org.springframework.security.test.context.support.WithMockUser)76 Test (org.junit.jupiter.api.Test)70 Exam (de.tum.in.www1.artemis.domain.exam.Exam)64 StudentExam (de.tum.in.www1.artemis.domain.exam.StudentExam)46 ModelingExercise (de.tum.in.www1.artemis.domain.modeling.ModelingExercise)46 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)24 QuizExercise (de.tum.in.www1.artemis.domain.quiz.QuizExercise)22 PreAuthorize (org.springframework.security.access.prepost.PreAuthorize)22 AbstractSpringIntegrationBambooBitbucketJiraTest (de.tum.in.www1.artemis.AbstractSpringIntegrationBambooBitbucketJiraTest)20 BadRequestAlertException (de.tum.in.www1.artemis.web.rest.errors.BadRequestAlertException)20 StudentParticipation (de.tum.in.www1.artemis.domain.participation.StudentParticipation)18 EntityNotFoundException (de.tum.in.www1.artemis.web.rest.errors.EntityNotFoundException)14 TextExercise (de.tum.in.www1.artemis.domain.TextExercise)12 ZonedDateTime (java.time.ZonedDateTime)12 de.tum.in.www1.artemis.domain (de.tum.in.www1.artemis.domain)10 de.tum.in.www1.artemis.repository (de.tum.in.www1.artemis.repository)10 Collectors (java.util.stream.Collectors)10 ModelingSubmission (de.tum.in.www1.artemis.domain.modeling.ModelingSubmission)8 Participation (de.tum.in.www1.artemis.domain.participation.Participation)8