Search in sources :

Example 61 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 62 with ExerciseGroup

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

the class ExamServiceTest method validateForStudentExamGeneration_tooManyPointsInMandatoryExercises_shouldThrowException.

@Test
@WithMockUser(username = "admin", roles = "ADMIN")
public void validateForStudentExamGeneration_tooManyPointsInMandatoryExercises_shouldThrowException() {
    Exam exam = createExam(1, 1L, 10);
    ExerciseGroup exerciseGroup = addExerciseGroupToExam(exam, 1L, true);
    TextExercise exercise1 = addNewTextExerciseToExerciseGroup(exerciseGroup, 1L, 20.0, 5.0, IncludedInOverallScore.INCLUDED_COMPLETELY);
    TextExercise exercise2 = addNewTextExerciseToExerciseGroup(exerciseGroup, 2L, 20.0, 5.0, IncludedInOverallScore.INCLUDED_COMPLETELY);
    exerciseGroup.setExercises(Set.of(exercise1, exercise2));
    BadRequestAlertException thrown = assertThrows(BadRequestAlertException.class, () -> examService.validateForStudentExamGeneration(exam), "Expected to throw bad request alert exception, but it didn't");
    assertTrue(thrown.getMessage().contains("Check that you set the exam max points correctly! The max points a student can earn in the mandatory exercise groups is too big"));
}
Also used : BadRequestAlertException(de.tum.in.www1.artemis.web.rest.errors.BadRequestAlertException) TextExercise(de.tum.in.www1.artemis.domain.TextExercise) ExerciseGroup(de.tum.in.www1.artemis.domain.exam.ExerciseGroup) Exam(de.tum.in.www1.artemis.domain.exam.Exam) WithMockUser(org.springframework.security.test.context.support.WithMockUser) Test(org.junit.jupiter.api.Test) AbstractSpringIntegrationBambooBitbucketJiraTest(de.tum.in.www1.artemis.AbstractSpringIntegrationBambooBitbucketJiraTest)

Example 63 with ExerciseGroup

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

the class GroupNotificationServiceTest method setUp.

/**
 * Sets up all needed mocks and their wanted behavior.
 */
@BeforeEach
public void setUp() {
    course = database.createCourse();
    database.addUsers(1, 0, 0, 1);
    student = database.getUserByLogin("student1");
    instructor = database.getUserByLogin("instructor1");
    archiveErrors = new ArrayList<>();
    exam = database.addExam(course);
    examRepository.save(exam);
    lecture = new Lecture();
    lecture.setCourse(course);
    attachment = new Attachment();
    exercise = ModelFactory.generateTextExercise(null, null, null, course);
    exerciseRepository.save(exercise);
    updatedExercise = ModelFactory.generateTextExercise(null, null, null, course);
    exerciseRepository.save(updatedExercise);
    ExerciseGroup exerciseGroup = new ExerciseGroup();
    exerciseGroup.setExam(exam);
    examExercise = new TextExercise();
    examExercise.setExerciseGroup(exerciseGroup);
    examExercise.setProblemStatement(EXAM_PROBLEM_STATEMENT);
    quizExercise = database.createQuiz(course, null, null, QuizMode.SYNCHRONIZED);
    exerciseRepository.save(quizExercise);
    programmingExercise = new ProgrammingExercise();
    programmingExercise.setCourse(course);
    post = new Post();
    post.setExercise(exercise);
    post.setLecture(lecture);
    post.setCourse(course);
    answerPost = new AnswerPost();
    answerPost.setPost(post);
    // explicitly change the user to prevent issues in the following server call due to userRepository.getUser() (@WithMockUser is not working here)
    database.changeUser("instructor1");
    doNothing().when(javaMailSender).send(any(MimeMessage.class));
}
Also used : MimeMessage(javax.mail.internet.MimeMessage) AnswerPost(de.tum.in.www1.artemis.domain.metis.AnswerPost) Post(de.tum.in.www1.artemis.domain.metis.Post) ExerciseGroup(de.tum.in.www1.artemis.domain.exam.ExerciseGroup) AnswerPost(de.tum.in.www1.artemis.domain.metis.AnswerPost) BeforeEach(org.junit.jupiter.api.BeforeEach)

Example 64 with ExerciseGroup

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

the class ExamService method reset.

/**
 * Deletes all elements associated with the exam but not the exam itself in order to reset it.
 *
 * The deleted elements are:
 * <ul>
 *     <li>All StudentExams</li>
 *     <li>Everything that has been submitted by students to the exercises that are part of the exam,
 *           but not the exercises themself. See {@link ExerciseDeletionService#reset}</li>
 * </ul>
 * @param examId the ID of the exam to be reset
 */
public void reset(@NotNull Long examId) {
    User user = userRepository.getUser();
    Exam exam = examRepository.findOneWithEagerExercisesGroupsAndStudentExams(examId);
    log.info("User {} has requested to reset the exam {}", user.getLogin(), exam.getTitle());
    AuditEvent auditEvent = new AuditEvent(user.getLogin(), Constants.RESET_EXAM, "exam=" + exam.getTitle());
    auditEventRepository.add(auditEvent);
    for (ExerciseGroup exerciseGroup : exam.getExerciseGroups()) {
        if (exerciseGroup != null) {
            for (Exercise exercise : exerciseGroup.getExercises()) {
                exerciseDeletionService.reset(exercise);
            }
        }
    }
    studentExamRepository.deleteAll(exam.getStudentExams());
}
Also used : QuizExercise(de.tum.in.www1.artemis.domain.quiz.QuizExercise) ModelingExercise(de.tum.in.www1.artemis.domain.modeling.ModelingExercise) AuditEvent(org.springframework.boot.actuate.audit.AuditEvent) 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)

Example 65 with ExerciseGroup

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

the class ExamService method delete.

/**
 * Fetches the exam and eagerly loads all required elements and deletes all elements associated with the
 * exam including:
 * <ul>
 *     <li>The Exam</li>
 *     <li>All ExerciseGroups</li>
 *     <li>All Exercises including:
 *     Submissions, Participations, Results, Repositories and build plans, see {@link ExerciseDeletionService#delete}</li>
 *     <li>All StudentExams</li>
 *     <li>The exam Grading Scale if such exists</li>
 * </ul>
 * Note: StudentExams and ExerciseGroups are not explicitly deleted as the delete operation of the exam is cascaded by the database.
 *
 * @param examId the ID of the exam to be deleted
 */
public void delete(@NotNull long examId) {
    User user = userRepository.getUser();
    Exam exam = examRepository.findOneWithEagerExercisesGroupsAndStudentExams(examId);
    log.info("User {} has requested to delete the exam {}", user.getLogin(), exam.getTitle());
    AuditEvent auditEvent = new AuditEvent(user.getLogin(), Constants.DELETE_EXAM, "exam=" + exam.getTitle());
    auditEventRepository.add(auditEvent);
    for (ExerciseGroup exerciseGroup : exam.getExerciseGroups()) {
        if (exerciseGroup != null) {
            for (Exercise exercise : exerciseGroup.getExercises()) {
                exerciseDeletionService.delete(exercise.getId(), true, true);
            }
        }
    }
    deleteGradingScaleOfExam(exam);
    examRepository.deleteById(exam.getId());
}
Also used : QuizExercise(de.tum.in.www1.artemis.domain.quiz.QuizExercise) ModelingExercise(de.tum.in.www1.artemis.domain.modeling.ModelingExercise) AuditEvent(org.springframework.boot.actuate.audit.AuditEvent) 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)

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