Search in sources :

Example 11 with AssessmentType

use of de.tum.in.www1.artemis.domain.enumeration.AssessmentType in project ArTEMiS by ls1intum.

the class AssessmentService method cancelAssessmentOfSubmission.

/**
 * Cancel an assessment of a given submission for the current user, i.e. delete the corresponding result / release the lock. Then the submission is available for assessment
 * again.
 *
 * @param submission the submission for which the current assessment should be canceled
 */
// NOTE: As we use delete methods with underscores, we need a transactional context here!
@Transactional
public void cancelAssessmentOfSubmission(Submission submission) {
    StudentParticipation participation = studentParticipationRepository.findWithEagerResultsById(submission.getParticipation().getId()).orElseThrow(() -> new BadRequestAlertException("Participation could not be found", "participation", "notfound"));
    // cancel is only possible for the latest result.
    Result result = submission.getLatestResult();
    // We only want to be able to cancel a result if it is not of the AUTOMATIC AssessmentType
    if (result != null && result.getAssessmentType() != null && result.getAssessmentType() != AssessmentType.AUTOMATIC) {
        participation.removeResult(result);
        feedbackRepository.deleteByResult_Id(result.getId());
        resultRepository.deleteById(result.getId());
    }
}
Also used : BadRequestAlertException(de.tum.in.www1.artemis.web.rest.errors.BadRequestAlertException) StudentParticipation(de.tum.in.www1.artemis.domain.participation.StudentParticipation) Transactional(org.springframework.transaction.annotation.Transactional)

Example 12 with AssessmentType

use of de.tum.in.www1.artemis.domain.enumeration.AssessmentType in project ArTEMiS by ls1intum.

the class ResultServiceTest method testGetFeedbacksForResultAsStudentShouldOnlyFilterAutomaticResultBeforeLastDueDate.

@ParameterizedTest(name = "{displayName} [{index}] {argumentsWithNames}")
@EnumSource(AssessmentType.class)
@WithMockUser(username = "student1", roles = "STUDENT")
public void testGetFeedbacksForResultAsStudentShouldOnlyFilterAutomaticResultBeforeLastDueDate(AssessmentType assessmentType) {
    programmingExercise.setDueDate(ZonedDateTime.now().minusHours(2));
    programmingExercise.setAssessmentDueDate(null);
    programmingExercise = programmingExerciseRepository.save(programmingExercise);
    final var participation2 = database.addStudentParticipationForProgrammingExercise(programmingExercise, "student2");
    participation2.setIndividualDueDate(ZonedDateTime.now().plusDays(2));
    participationRepository.save(participation2);
    Result result = database.addResultToParticipation(assessmentType, null, programmingExerciseStudentParticipation);
    result = database.addVariousVisibilityFeedbackToResults(result);
    result = database.addFeedbackToResult(ModelFactory.createPositiveFeedback(FeedbackType.MANUAL), result);
    List<Feedback> expectedFeedbacks;
    if (AssessmentType.AUTOMATIC == assessmentType) {
        expectedFeedbacks = result.getFeedbacks().stream().filter(feedback -> !feedback.isInvisible() && !feedback.isAfterDueDate()).collect(Collectors.toList());
        assertThat(expectedFeedbacks).hasSize(2);
    } else {
        expectedFeedbacks = result.getFeedbacks().stream().filter(feedback -> !feedback.isInvisible()).collect(Collectors.toList());
        assertThat(expectedFeedbacks).hasSize(3);
    }
    assertThat(resultService.getFeedbacksForResult(result)).isEqualTo(expectedFeedbacks);
}
Also used : Feedback(de.tum.in.www1.artemis.domain.Feedback) Result(de.tum.in.www1.artemis.domain.Result) WithMockUser(org.springframework.security.test.context.support.WithMockUser) EnumSource(org.junit.jupiter.params.provider.EnumSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 13 with AssessmentType

use of de.tum.in.www1.artemis.domain.enumeration.AssessmentType in project ArTEMiS by ls1intum.

the class ResultServiceTest method testGetFeedbacksForResultAsStudentShouldNotFilterAfterLatestDueDate.

@ParameterizedTest(name = "{displayName} [{index}] {argumentsWithNames}")
@EnumSource(AssessmentType.class)
@WithMockUser(username = "student1", roles = "STUDENT")
public void testGetFeedbacksForResultAsStudentShouldNotFilterAfterLatestDueDate(AssessmentType assessmentType) {
    programmingExercise.setDueDate(ZonedDateTime.now().minusHours(2));
    programmingExercise.setAssessmentDueDate(null);
    programmingExercise = programmingExerciseRepository.save(programmingExercise);
    final var participation2 = database.addStudentParticipationForProgrammingExercise(programmingExercise, "student2");
    participation2.setIndividualDueDate(ZonedDateTime.now().minusHours(1));
    participationRepository.save(participation2);
    Result result = database.addResultToParticipation(assessmentType, null, programmingExerciseStudentParticipation);
    result = database.addVariousVisibilityFeedbackToResults(result);
    result = database.addFeedbackToResult(ModelFactory.createPositiveFeedback(FeedbackType.MANUAL), result);
    List<Feedback> expectedFeedbacks;
    expectedFeedbacks = result.getFeedbacks().stream().filter(feedback -> !feedback.isInvisible()).collect(Collectors.toList());
    assertThat(expectedFeedbacks).hasSize(3);
    assertThat(resultService.getFeedbacksForResult(result)).isEqualTo(expectedFeedbacks);
}
Also used : Feedback(de.tum.in.www1.artemis.domain.Feedback) Result(de.tum.in.www1.artemis.domain.Result) WithMockUser(org.springframework.security.test.context.support.WithMockUser) EnumSource(org.junit.jupiter.params.provider.EnumSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 14 with AssessmentType

use of de.tum.in.www1.artemis.domain.enumeration.AssessmentType in project ArTEMiS by ls1intum.

the class ProgrammingExerciseTest method updateExerciseTestCasesZeroWeight.

@ParameterizedTest(name = "{displayName} [{index}] {argumentsWithNames}")
@EnumSource(AssessmentType.class)
@WithMockUser(username = "instructor1", roles = "INSTRUCTOR")
void updateExerciseTestCasesZeroWeight(AssessmentType assessmentType) throws Exception {
    ProgrammingExercise programmingExercise = programmingExerciseRepository.findWithTemplateAndSolutionParticipationTeamAssignmentConfigCategoriesById(programmingExerciseId).get();
    database.addTestCasesToProgrammingExercise(programmingExercise);
    Set<ProgrammingExerciseTestCase> testCases = programmingExerciseTestCaseRepository.findByExerciseId(programmingExercise.getId());
    testCases.forEach(testCase -> testCase.setWeight(0D));
    programmingExerciseTestCaseRepository.saveAll(testCases);
    programmingExercise.setAssessmentType(assessmentType);
    if (assessmentType == AssessmentType.AUTOMATIC) {
        bambooRequestMockProvider.enableMockingOfRequests();
        bitbucketRequestMockProvider.enableMockingOfRequests();
        bambooRequestMockProvider.mockBuildPlanExists(programmingExercise.getTemplateBuildPlanId(), true, false);
        bambooRequestMockProvider.mockBuildPlanExists(programmingExercise.getSolutionBuildPlanId(), true, false);
        bitbucketRequestMockProvider.mockRepositoryUrlIsValid(programmingExercise.getVcsTemplateRepositoryUrl(), programmingExercise.getProjectKey(), true);
        bitbucketRequestMockProvider.mockRepositoryUrlIsValid(programmingExercise.getVcsSolutionRepositoryUrl(), programmingExercise.getProjectKey(), true);
        // test cases with weights = 0, changing to automatic feedback: update should NOT work
        request.putAndExpectError("/api/programming-exercises", programmingExercise, HttpStatus.BAD_REQUEST, ProgrammingExerciseResourceErrorKeys.INVALID_TEST_CASE_WEIGHTS);
    } else {
        // for exercises with manual feedback the update should work
        updateProgrammingExercise(programmingExercise, "new problem 1", "new title 1");
    }
}
Also used : ProgrammingExercise(de.tum.in.www1.artemis.domain.ProgrammingExercise) ProgrammingExerciseTestCase(de.tum.in.www1.artemis.domain.ProgrammingExerciseTestCase) WithMockUser(org.springframework.security.test.context.support.WithMockUser) EnumSource(org.junit.jupiter.params.provider.EnumSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 15 with AssessmentType

use of de.tum.in.www1.artemis.domain.enumeration.AssessmentType in project ArTEMiS by ls1intum.

the class SubmissionIntegrationTest method addMultipleResultsToOneSubmissionSavedSequentially.

@Test
public void addMultipleResultsToOneSubmissionSavedSequentially() {
    AssessmentType assessmentType = AssessmentType.MANUAL;
    Submission submission = new TextSubmission();
    submission = submissionRepository.save(submission);
    Result result1 = new Result().assessmentType(assessmentType).resultString("x points of y").score(100D).rated(true);
    result1 = resultRepository.save(result1);
    result1.setSubmission(submission);
    submission.addResult(result1);
    submission = submissionRepository.save(submission);
    Result result2 = new Result().assessmentType(assessmentType).resultString("x points of y 2").score(200D).rated(true);
    result2 = resultRepository.save(result2);
    result2.setSubmission(submission);
    submission.addResult(result2);
    submission = submissionRepository.save(submission);
    submission = submissionRepository.findWithEagerResultsAndAssessorById(submission.getId()).orElseThrow();
    assert submission.getResults() != null;
    assertThat(submission.getResults()).hasSize(2);
    assertThat(submission.getFirstResult()).isNotEqualTo(submission.getLatestResult());
    assertThat(submission.getFirstResult()).isEqualTo(result1);
    assertThat(submission.getLatestResult()).isEqualTo(result2);
}
Also used : AssessmentType(de.tum.in.www1.artemis.domain.enumeration.AssessmentType) Test(org.junit.jupiter.api.Test)

Aggregations

Test (org.junit.jupiter.api.Test)10 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)10 WithMockUser (org.springframework.security.test.context.support.WithMockUser)10 AssessmentType (de.tum.in.www1.artemis.domain.enumeration.AssessmentType)8 EnumSource (org.junit.jupiter.params.provider.EnumSource)8 Feedback (de.tum.in.www1.artemis.domain.Feedback)6 ModelingPlagiarismResult (de.tum.in.www1.artemis.domain.plagiarism.modeling.ModelingPlagiarismResult)6 TextPlagiarismResult (de.tum.in.www1.artemis.domain.plagiarism.text.TextPlagiarismResult)6 AbstractSpringIntegrationBambooBitbucketJiraTest (de.tum.in.www1.artemis.AbstractSpringIntegrationBambooBitbucketJiraTest)4 ProgrammingExercise (de.tum.in.www1.artemis.domain.ProgrammingExercise)4 ProgrammingExerciseTestCase (de.tum.in.www1.artemis.domain.ProgrammingExerciseTestCase)4 Result (de.tum.in.www1.artemis.domain.Result)4 StudentParticipation (de.tum.in.www1.artemis.domain.participation.StudentParticipation)4 BadRequestAlertException (de.tum.in.www1.artemis.web.rest.errors.BadRequestAlertException)4 ProgrammingLanguage (de.tum.in.www1.artemis.domain.enumeration.ProgrammingLanguage)2 Visibility (de.tum.in.www1.artemis.domain.enumeration.Visibility)2 ProgrammingExerciseTestCaseType (de.tum.in.www1.artemis.domain.hestia.ProgrammingExerciseTestCaseType)2 Participation (de.tum.in.www1.artemis.domain.participation.Participation)2 ProgrammingExerciseStudentParticipation (de.tum.in.www1.artemis.domain.participation.ProgrammingExerciseStudentParticipation)2 SolutionProgrammingExerciseParticipation (de.tum.in.www1.artemis.domain.participation.SolutionProgrammingExerciseParticipation)2