diff --git a/core/src/main/java/se/su/dsv/scipro/CoreConfig.java b/core/src/main/java/se/su/dsv/scipro/CoreConfig.java index c500f44d84..b24208d38f 100644 --- a/core/src/main/java/se/su/dsv/scipro/CoreConfig.java +++ b/core/src/main/java/se/su/dsv/scipro/CoreConfig.java @@ -434,9 +434,15 @@ public class CoreConfig { public FinalSeminarOppositionServiceImpl finalSeminarOppositionService( Provider<EntityManager> em, FinalSeminarOppositionGrading finalSeminarOppositionGrading, - EventBus eventBus + EventBus eventBus, + FinalSeminarOppositionRepo finalSeminarOppositionRepository ) { - return new FinalSeminarOppositionServiceImpl(em, finalSeminarOppositionGrading, eventBus); + return new FinalSeminarOppositionServiceImpl( + em, + finalSeminarOppositionGrading, + eventBus, + finalSeminarOppositionRepository + ); } @Bean diff --git a/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionService.java b/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionService.java index 23c37aa4e6..e320c1da2e 100755 --- a/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionService.java +++ b/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionService.java @@ -1,6 +1,5 @@ package se.su.dsv.scipro.finalseminar; -import java.util.List; import se.su.dsv.scipro.system.GenericService; public interface FinalSeminarOppositionService extends GenericService<FinalSeminarOpposition, Long> { @@ -9,5 +8,6 @@ public interface FinalSeminarOppositionService extends GenericService<FinalSemin OppositionCriteria getCriteriaForOpposition(FinalSeminarOpposition opposition); - void gradeOpponent(FinalSeminarOpposition opposition, int points, String feedback) throws PointNotValidException; + FinalSeminarOpposition gradeOpponent(FinalSeminarOpposition opposition, int points, String feedback) + throws PointNotValidException; } diff --git a/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImpl.java index 066a082fb4..abf7e61246 100755 --- a/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImpl.java @@ -4,6 +4,7 @@ import com.google.common.eventbus.EventBus; import jakarta.inject.Inject; import jakarta.inject.Provider; import jakarta.persistence.EntityManager; +import jakarta.transaction.Transactional; import java.util.List; import se.su.dsv.scipro.system.AbstractServiceImpl; @@ -13,16 +14,19 @@ public class FinalSeminarOppositionServiceImpl private final FinalSeminarOppositionGrading finalSeminarOppositionGrading; private final EventBus eventBus; + private final FinalSeminarOppositionRepo finalSeminarOppositionRepository; @Inject public FinalSeminarOppositionServiceImpl( Provider<EntityManager> em, FinalSeminarOppositionGrading finalSeminarOppositionGrading, - EventBus eventBus + EventBus eventBus, + FinalSeminarOppositionRepo finalSeminarOppositionRepository ) { super(em, FinalSeminarOpposition.class, QFinalSeminarOpposition.finalSeminarOpposition); this.finalSeminarOppositionGrading = finalSeminarOppositionGrading; this.eventBus = eventBus; + this.finalSeminarOppositionRepository = finalSeminarOppositionRepository; } @Override @@ -31,7 +35,8 @@ public class FinalSeminarOppositionServiceImpl } @Override - public void gradeOpponent(FinalSeminarOpposition opposition, int points, String feedback) + @Transactional + public FinalSeminarOpposition gradeOpponent(FinalSeminarOpposition opposition, int points, String feedback) throws PointNotValidException { OppositionCriteria criteriaForOpposition = getCriteriaForOpposition(opposition); boolean validPoints = criteriaForOpposition @@ -42,13 +47,16 @@ public class FinalSeminarOppositionServiceImpl throw new PointNotValidException(points, List.of(0, 1)); } + opposition.setPoints(points); + opposition.setFeedback(feedback); + FinalSeminarOpposition assessedOpposition = finalSeminarOppositionRepository.save(opposition); + if (criteriaForOpposition.pointsToPass() > points) { - eventBus.post(new OppositionFailedEvent(opposition)); + eventBus.post(new OppositionFailedEvent(assessedOpposition)); } else { - eventBus.post(new OppositionApprovedEvent(opposition)); + eventBus.post(new OppositionApprovedEvent(assessedOpposition)); } - // TODO: - // * save assessment - // * post events + + return assessedOpposition; } } diff --git a/core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImplIntegrationTest.java index 303139b29c..fb39050f2d 100644 --- a/core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImplIntegrationTest.java +++ b/core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImplIntegrationTest.java @@ -57,21 +57,7 @@ public class FinalSeminarOppositionServiceImplIntegrationTest extends Integratio @Test public void opposition_criteria_are_taken_from_the_grading_report_template() { FinalSeminarOpposition opposition = createOpposition(finalSeminar, createUser()); - GradingReportTemplate gradingReportTemplate = createGradingReportTemplate(); - - GradingCriterionPointTemplate failingCriterion = new GradingCriterionPointTemplate(); - failingCriterion.setPoint(0); - GradingCriterionPointTemplate passingCriterion = new GradingCriterionPointTemplate(); - passingCriterion.setPoint(1); - - gradingReportTemplate.addIndividualCriterion( - "Criterion 1", - "Criterion 1", - 1, - List.of(failingCriterion, passingCriterion), - AbstractGradingCriterion.Flag.OPPOSITION - ); - save(gradingReportTemplate); + createSimpleGradingReportTemplateWithPassFail(); assertEquals(2, finalSeminarOppositionService.getCriteriaForOpposition(opposition).pointsAvailable().size()); } @@ -79,21 +65,7 @@ public class FinalSeminarOppositionServiceImplIntegrationTest extends Integratio @Test public void can_not_grade_outside_criterion() { FinalSeminarOpposition opposition = createOpposition(finalSeminar, createUser()); - GradingReportTemplate gradingReportTemplate = createGradingReportTemplate(); - - GradingCriterionPointTemplate failingCriterion = new GradingCriterionPointTemplate(); - failingCriterion.setPoint(0); - GradingCriterionPointTemplate passingCriterion = new GradingCriterionPointTemplate(); - passingCriterion.setPoint(1); - - gradingReportTemplate.addIndividualCriterion( - "Criterion 1", - "Criterion 1", - 1, - List.of(failingCriterion, passingCriterion), - AbstractGradingCriterion.Flag.OPPOSITION - ); - save(gradingReportTemplate); + createSimpleGradingReportTemplateWithPassFail(); PointNotValidException exception = assertThrows(PointNotValidException.class, () -> finalSeminarOppositionService.gradeOpponent(opposition, 2, "Feedback") @@ -106,21 +78,7 @@ public class FinalSeminarOppositionServiceImplIntegrationTest extends Integratio @Test public void publishes_failed_event_when_grading_with_failing_criterion() throws Exception { FinalSeminarOpposition opposition = createOpposition(finalSeminar, createUser()); - GradingReportTemplate gradingReportTemplate = createGradingReportTemplate(); - - GradingCriterionPointTemplate failingCriterion = new GradingCriterionPointTemplate(); - failingCriterion.setPoint(0); - GradingCriterionPointTemplate passingCriterion = new GradingCriterionPointTemplate(); - passingCriterion.setPoint(1); - - gradingReportTemplate.addIndividualCriterion( - "Criterion 1", - "Criterion 1", - 1, - List.of(failingCriterion, passingCriterion), - AbstractGradingCriterion.Flag.OPPOSITION - ); - save(gradingReportTemplate); + createSimpleGradingReportTemplateWithPassFail(); finalSeminarOppositionService.gradeOpponent(opposition, 0, "Feedback"); @@ -130,6 +88,25 @@ public class FinalSeminarOppositionServiceImplIntegrationTest extends Integratio @Test public void publishes_approved_event_when_grading_with_passing_criterion() throws Exception { FinalSeminarOpposition opposition = createOpposition(finalSeminar, createUser()); + createSimpleGradingReportTemplateWithPassFail(); + + finalSeminarOppositionService.gradeOpponent(opposition, 1, "Feedback"); + + assertThat(getPublishedEvents(), hasItem(new OppositionApprovedEvent(opposition))); + } + + @Test + public void stores_assessment() throws Exception { + FinalSeminarOpposition opposition = createOpposition(finalSeminar, createUser()); + createSimpleGradingReportTemplateWithPassFail(); + + FinalSeminarOpposition graded = finalSeminarOppositionService.gradeOpponent(opposition, 1, "Feedback"); + + assertEquals(1, graded.getPoints()); + assertEquals("Feedback", graded.getFeedback()); + } + + private void createSimpleGradingReportTemplateWithPassFail() { GradingReportTemplate gradingReportTemplate = createGradingReportTemplate(); GradingCriterionPointTemplate failingCriterion = new GradingCriterionPointTemplate(); @@ -145,10 +122,6 @@ public class FinalSeminarOppositionServiceImplIntegrationTest extends Integratio AbstractGradingCriterion.Flag.OPPOSITION ); save(gradingReportTemplate); - - finalSeminarOppositionService.gradeOpponent(opposition, 1, "Feedback"); - - assertThat(getPublishedEvents(), hasItem(new OppositionApprovedEvent(opposition))); } private void createOppositionReport(FinalSeminarOpposition opposition) {