3392 Failing test
This commit is contained in:
parent
325b93ce3d
commit
a79ee20cba
core/src
main/java/se/su/dsv/scipro/reviewing
test/java/se/su/dsv/scipro/reviewing
view/src/main/java/se/su/dsv/scipro/crosscutting
@ -1,4 +1,4 @@
|
|||||||
package se.su.dsv.scipro.crosscutting;
|
package se.su.dsv.scipro.reviewing;
|
||||||
|
|
||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
126
core/src/test/java/se/su/dsv/scipro/reviewing/ReviewerTest.java
Normal file
126
core/src/test/java/se/su/dsv/scipro/reviewing/ReviewerTest.java
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
package se.su.dsv.scipro.reviewing;
|
||||||
|
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import se.su.dsv.scipro.file.FileUpload;
|
||||||
|
import se.su.dsv.scipro.project.Project;
|
||||||
|
import se.su.dsv.scipro.reviewing.ReviewerAssignmentService.ReviewerAssignment;
|
||||||
|
import se.su.dsv.scipro.security.auth.roles.Roles;
|
||||||
|
import se.su.dsv.scipro.system.DegreeType;
|
||||||
|
import se.su.dsv.scipro.system.ProjectType;
|
||||||
|
import se.su.dsv.scipro.system.User;
|
||||||
|
import se.su.dsv.scipro.test.MutableFixedClock;
|
||||||
|
import se.su.dsv.scipro.util.Either;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.Month;
|
||||||
|
import java.time.Year;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class ReviewerTest extends ReviewingModuleTest {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
MutableFixedClock clock;
|
||||||
|
@Inject
|
||||||
|
ReviewerAssignmentService reviewerAssignmentService;
|
||||||
|
@Inject
|
||||||
|
ReviewerCapacityService reviewerCapacityService;
|
||||||
|
@Inject
|
||||||
|
RoughDraftApprovalService roughDraftApprovalService;
|
||||||
|
@Inject
|
||||||
|
ReviewerDecisionService reviewerDecisionService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void an_assigned_reviewer_should_only_consume_one_target_per_project() {
|
||||||
|
// Given
|
||||||
|
clock.setDate(LocalDate.of(2024, Month.MAY, 22)); // some date in spring
|
||||||
|
|
||||||
|
Project project = createProject();
|
||||||
|
User reviewer = createUser();
|
||||||
|
var target = new ReviewerCapacityService.Target(Year.now(clock), 2, 0, "Can review at any time");
|
||||||
|
|
||||||
|
// When
|
||||||
|
reviewerCapacityService.assignTarget(reviewer, target);
|
||||||
|
Either<AlreadyRequested, RoughDraftApproval> firstReviewRequest = roughDraftApprovalService.requestApproval(
|
||||||
|
project,
|
||||||
|
dummyFile(),
|
||||||
|
"Some comment");
|
||||||
|
assertTrue(firstReviewRequest.isRight());
|
||||||
|
|
||||||
|
ReviewerAssignment assignment = reviewerAssignmentService.assignReviewer(project,reviewer);
|
||||||
|
assertEquals(ReviewerAssignment.OK, assignment);
|
||||||
|
|
||||||
|
reviewerDecisionService.reject(firstReviewRequest.right(), "Not good enough", Optional.empty());
|
||||||
|
|
||||||
|
Either<AlreadyRequested, RoughDraftApproval> secondReviewRequest = roughDraftApprovalService.requestApproval(
|
||||||
|
project,
|
||||||
|
dummyFile(),
|
||||||
|
"Some new comment");
|
||||||
|
assertTrue(secondReviewRequest.isRight());
|
||||||
|
|
||||||
|
// Then
|
||||||
|
ReviewerCapacityService.RemainingTargets remainingTargets =
|
||||||
|
reviewerCapacityService.getRemainingTargets(reviewer, target.year());
|
||||||
|
assertEquals(1, remainingTargets.spring());
|
||||||
|
}
|
||||||
|
|
||||||
|
private User createUser() {
|
||||||
|
User user = User.builder()
|
||||||
|
.firstName("Edward")
|
||||||
|
.lastName("Employee")
|
||||||
|
.emailAddress("stuart@example.com")
|
||||||
|
.roles(Set.of(Roles.REVIEWER, Roles.SUPERVISOR))
|
||||||
|
.build();
|
||||||
|
return save(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Project createProject() {
|
||||||
|
ProjectType bachelor = new ProjectType(DegreeType.BACHELOR, "Bachelor", "Bachelor");
|
||||||
|
save(bachelor);
|
||||||
|
|
||||||
|
User supervisor = createUser();
|
||||||
|
|
||||||
|
Project project = Project.builder()
|
||||||
|
.title("A project")
|
||||||
|
.projectType(bachelor)
|
||||||
|
.startDate(LocalDate.now(clock).minusMonths(1))
|
||||||
|
.headSupervisor(supervisor)
|
||||||
|
.build();
|
||||||
|
return save(project);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FileUpload dummyFile() {
|
||||||
|
return new FileUpload() {
|
||||||
|
@Override
|
||||||
|
public String getFileName() {
|
||||||
|
return "dummy.tmp";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getContentType() {
|
||||||
|
return "text/plain";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public User getUploader() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getSize() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T handleData(Function<InputStream, T> handler) {
|
||||||
|
return handler.apply(InputStream.nullInputStream());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,18 @@
|
|||||||
package se.su.dsv.scipro.reviewing;
|
package se.su.dsv.scipro.reviewing;
|
||||||
|
|
||||||
|
import com.google.inject.AbstractModule;
|
||||||
|
import com.google.inject.Module;
|
||||||
import se.su.dsv.scipro.test.IntegrationTest;
|
import se.su.dsv.scipro.test.IntegrationTest;
|
||||||
|
|
||||||
public abstract class ReviewingModuleTest extends IntegrationTest {
|
public abstract class ReviewingModuleTest extends IntegrationTest {
|
||||||
|
@Override
|
||||||
|
protected Module moduleUnderTest() {
|
||||||
|
return new AbstractModule() {
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
install(ReviewingModuleTest.super.moduleUnderTest());
|
||||||
|
bind(ReviewerAssignedDeadline.class).asEagerSingleton();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package se.su.dsv.scipro.crosscutting;
|
|||||||
|
|
||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
import com.google.inject.AbstractModule;
|
import com.google.inject.AbstractModule;
|
||||||
|
import se.su.dsv.scipro.reviewing.ReviewerAssignedDeadline;
|
||||||
|
|
||||||
public class CrosscuttingModule extends AbstractModule {
|
public class CrosscuttingModule extends AbstractModule {
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user