Allow supervisors to request improvements from final seminar opponents #78
@ -2,8 +2,10 @@ package se.su.dsv.scipro.finalseminar;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
import com.querydsl.core.BooleanBuilder;
|
||||
import com.querydsl.core.types.SubQueryExpressionImpl;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
import com.querydsl.core.types.dsl.Expressions;
|
||||
import com.querydsl.jpa.JPAExpressions;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Provider;
|
||||
import jakarta.persistence.EntityManager;
|
||||
@ -543,8 +545,15 @@ public class FinalSeminarServiceImpl extends AbstractServiceImpl<FinalSeminar, L
|
||||
|
||||
private BooleanExpression unfinishedSeminars(Date after, Date before) {
|
||||
QFinalSeminar seminar = QFinalSeminar.finalSeminar;
|
||||
QFinalSeminarOpposition opposition = QFinalSeminarOpposition.finalSeminarOpposition;
|
||||
BooleanExpression ungradedParticipant = Expressions.anyOf(
|
||||
seminar.oppositions.any().grade.isNull(),
|
||||
seminar.oppositions
|
||||
.any()
|
||||
.id.in(
|
||||
JPAExpressions.select(opposition.id)
|
||||
.from(opposition)
|
||||
.where(opposition.grade.isNull().and(opposition.improvementsRequestedAt.isNull()))
|
||||
),
|
||||
seminar.activeParticipations.any().grade.isNull(),
|
||||
seminar.respondents.any().grade.isNull()
|
||||
);
|
||||
|
@ -8,6 +8,7 @@ import static se.su.dsv.scipro.test.Matchers.isRight;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import jakarta.inject.Inject;
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDate;
|
||||
import java.time.Month;
|
||||
import java.time.ZonedDateTime;
|
||||
@ -30,6 +31,9 @@ public class FinalSeminarServiceImplIntegrationTest extends IntegrationTest {
|
||||
@Inject
|
||||
private FinalSeminarService finalSeminarService;
|
||||
|
||||
@Inject
|
||||
private FinalSeminarOppositionService finalSeminarOppositionService;
|
||||
|
||||
private ProjectType projectType;
|
||||
private FinalSeminar futureFinalSeminar;
|
||||
private User user;
|
||||
@ -309,6 +313,43 @@ public class FinalSeminarServiceImplIntegrationTest extends IntegrationTest {
|
||||
assertThat(finalSeminarService.canOppose(user, finalSeminar, otherProject), isRight(anything()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void seminar_is_not_unfinished_if_opponent_has_improvements_requested() {
|
||||
FinalSeminar seminar = createFinalSeminar(createProject(), -6);
|
||||
FinalSeminarOpposition finalSeminarOpposition = addOpposition(seminar, null);
|
||||
addOppositionReport(finalSeminarOpposition);
|
||||
|
||||
Date after = Date.from(seminar.getStartDate().toInstant().minus(Duration.ofDays(1)));
|
||||
Date before = Date.from(seminar.getStartDate().toInstant().plus(Duration.ofDays(1)));
|
||||
|
||||
List<FinalSeminar> unfinishedSeminars = finalSeminarService.findUnfinishedSeminars(
|
||||
after,
|
||||
before,
|
||||
new PageRequest(0, 5)
|
||||
);
|
||||
|
||||
assertThat(unfinishedSeminars, hasItem(seminar));
|
||||
|
||||
finalSeminarOppositionService.requestImprovements(finalSeminarOpposition, "improvements");
|
||||
|
||||
List<FinalSeminar> afterImprovements = finalSeminarService.findUnfinishedSeminars(
|
||||
after,
|
||||
before,
|
||||
new PageRequest(0, 5)
|
||||
);
|
||||
|
||||
assertThat(afterImprovements, not(hasItem(seminar)));
|
||||
}
|
||||
|
||||
private static void addOppositionReport(FinalSeminarOpposition finalSeminarOpposition) {
|
||||
GradingReportTemplate gradingReportTemplate = new GradingReportTemplate(
|
||||
finalSeminarOpposition.getProjectType(),
|
||||
LocalDate.now()
|
||||
);
|
||||
OppositionReport oppositionReport = new OppositionReport(gradingReportTemplate, finalSeminarOpposition);
|
||||
finalSeminarOpposition.setOppositionReport(oppositionReport);
|
||||
}
|
||||
|
||||
private FinalSeminar createFutureFinalSeminarSomeDaysAgo(final int daysAgo) {
|
||||
FinalSeminar finalSeminar = initFinalSeminar(createProject(), 5);
|
||||
final Date dateCreated = Date.from(ZonedDateTime.now().minusDays(daysAgo).toInstant());
|
||||
@ -340,10 +381,10 @@ public class FinalSeminarServiceImplIntegrationTest extends IntegrationTest {
|
||||
save(seminar);
|
||||
}
|
||||
|
||||
private void addOpposition(FinalSeminar seminar, FinalSeminarGrade grade) {
|
||||
private FinalSeminarOpposition addOpposition(FinalSeminar seminar, FinalSeminarGrade grade) {
|
||||
FinalSeminarOpposition opposition = createOpposition(seminar);
|
||||
opposition.setGrade(grade);
|
||||
save(opposition);
|
||||
return save(opposition);
|
||||
}
|
||||
|
||||
private OppositionReport createOppositionReport(FinalSeminarOpposition opposition) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user