diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerReviewServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerReviewServiceImpl.java index d90c1f3c1f..80f2a03b16 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerReviewServiceImpl.java +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerReviewServiceImpl.java @@ -137,7 +137,7 @@ public class PeerReviewServiceImpl extends AbstractQueryService<PeerReview, Long private BooleanBuilder statusFilter(boolean includeCompleted,boolean includeAborted,boolean includeInProgress) { BooleanBuilder e = new BooleanBuilder(); if(includeCompleted) - e.and(isAborted(false).and(isSubmitted(true)).and(isDeleted(false))); + e.or(isAborted(false).and(isSubmitted(true)).and(isDeleted(false))); if(includeAborted) e.or(isAborted(true).and(isSubmitted(false)).and(isDeleted(false))); if(includeInProgress) diff --git a/src/test/java/se/su/dsv/scipro/springdata/TestPeerReview.java b/src/test/java/se/su/dsv/scipro/springdata/TestPeerReview.java index cc307070c2..180a5713ba 100644 --- a/src/test/java/se/su/dsv/scipro/springdata/TestPeerReview.java +++ b/src/test/java/se/su/dsv/scipro/springdata/TestPeerReview.java @@ -1,15 +1,21 @@ package se.su.dsv.scipro.springdata; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Date; import java.util.List; +import java.util.Locale; import junit.framework.Assert; +import org.joda.time.DateTime; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -18,18 +24,15 @@ import org.springframework.transaction.annotation.Transactional; import se.su.dsv.scipro.data.dataobjects.Employee; import se.su.dsv.scipro.data.dataobjects.Project; import se.su.dsv.scipro.data.dataobjects.ProjectClass; -import se.su.dsv.scipro.data.dataobjects.ProjectFollower; import se.su.dsv.scipro.data.dataobjects.Student; import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.data.enums.ProjectStatus; -import se.su.dsv.scipro.data.enums.ProjectTeamMemberRoles; import se.su.dsv.scipro.peer.data.dataobjects.PeerRequest; import se.su.dsv.scipro.peer.data.dataobjects.PeerReview; import se.su.dsv.scipro.peer.enums.RequestStatus; import se.su.dsv.scipro.springdata.services.PeerRequestService; import se.su.dsv.scipro.springdata.services.PeerReviewService; import se.su.dsv.scipro.springdata.services.ProjectClassService; -import se.su.dsv.scipro.springdata.services.ProjectFollowerService; import se.su.dsv.scipro.springdata.services.ProjectService; import se.su.dsv.scipro.springdata.services.RoleService; import se.su.dsv.scipro.springdata.services.UserService; @@ -60,107 +63,41 @@ public class TestPeerReview { private ProjectClass bachelor; private ProjectClass master; private PeerReview review1, review2, review3; - private PeerRequest request1, request2, request3, awaitingRequest; + private PeerRequest request1, request2, request3, request4; @Before public void startTransaction() throws Exception { bachelor = new ProjectClass(ProjectClass.BACHELOR, "Bachelor", "Bachelor degree thesis project"); bachelor = projectClassService.save(bachelor); - master = new ProjectClass(ProjectClass.MASTER, "Master", "Master degree thesis project"); master = projectClassService.save(master); employeeUser = new User(); employeeUser = userService.save(employeeUser); - reviewer = new User(); reviewer = userService.save(reviewer); requester = new User(); requester = userService.save(requester); - reviewerRole = new Student(); - reviewerRole.setUser(reviewer); - reviewerRole = (Student) roleService.save(reviewerRole); - requesterRole = new Student(); - requesterRole.setUser(requester); - requesterRole = (Student) roleService.save(requesterRole); - + reviewerRole = newStudent(reviewer); + requesterRole = newStudent(requester); + headSupervisor = new Employee(); headSupervisor.setUser(employeeUser); headSupervisor = (Employee) roleService.save(headSupervisor); - reviewerProject = new Project(); - reviewerProject.setProjectClass(bachelor); - reviewerProject.setTitle("Project 1"); - reviewerProject.setHeadSupervisor(headSupervisor); - reviewerProject.addProjectParticipant(reviewerRole); - reviewerProject.setProjectStatus(ProjectStatus.ACTIVE); - reviewerProject = projectService.save(reviewerProject); - - requesterProject = new Project(); - requesterProject.setProjectClass(master); - requesterProject.setTitle("Project 2"); - requesterProject.setHeadSupervisor(headSupervisor); - requesterProject.addProjectParticipant(requesterRole); - requesterProject.setProjectStatus(ProjectStatus.ACTIVE); - requesterProject = projectService.save(requesterProject); + reviewerProject = newProject(bachelor, reviewerRole, headSupervisor, ProjectStatus.ACTIVE); + requesterProject = newProject(master, requesterRole, headSupervisor, ProjectStatus.ACTIVE); - request1 = new PeerRequest(); - request1.setComment("Request 1"); - request1.setRequester(requesterRole); - request1.setProject(requesterProject); - request1 = peerRequestService.save(request1); - - review1 = new PeerReview(); - review1.setReviewer(reviewerRole); - review1.setProject(reviewerProject); - review1.setComment("Overall ok!"); - review1.setPeerRequest(request1); - request1.setStatus(RequestStatus.FINISHED); - request1 = peerRequestService.save(request1); - review1.setSubmitted(true); - review1 = peerReviewService.save(review1); - - request2 = new PeerRequest(); - request2.setComment("Request 2"); - request2.setRequester(requesterRole); - request2.setProject(requesterProject); - request2 = peerRequestService.save(request2); - - review2 = new PeerReview(); - review2.setReviewer(reviewerRole); - review2.setProject(reviewerProject); - review2.setComment("Overall ok!"); - review2.setPeerRequest(request2); - request2.setStatus(RequestStatus.FINISHED); - request2 = peerRequestService.save(request2); - review2.setSubmitted(true); - review2 = peerReviewService.save(review2); - - request3 = new PeerRequest(); - request3.setComment("Request 3"); - request3.setRequester(requesterRole); - request3.setProject(requesterProject); - request3 = peerRequestService.save(request3); - - review3 = new PeerReview(); - review3.setReviewer(reviewerRole); - review3.setProject(reviewerProject); - review3.setComment("Overall ok!"); - review3.setPeerRequest(request2); - request3.setStatus(RequestStatus.TAKEN); - request3 = peerRequestService.save(request3); - review3.setSubmitted(false); - review3 = peerReviewService.save(review3); - - awaitingRequest = new PeerRequest(); - awaitingRequest.setComment("Awaiting request"); - awaitingRequest.setRequester(requesterRole); - awaitingRequest.setProject(requesterProject); - awaitingRequest.setStatus(RequestStatus.WAITING); - awaitingRequest = peerRequestService.save(awaitingRequest); + request1 = newRequest(requesterRole, requesterProject, "Request 1", null); + request2 = newRequest(requesterRole, requesterProject, "Request 2", null); + request3 = newRequest(requesterRole, requesterProject, "Request 3", null); + request4 = newRequest(requesterRole, requesterProject, "Request 4", RequestStatus.WAITING); + review1 = newReview(reviewerRole, reviewerProject, request1, RequestStatus.FINISHED, false, true); + review2 = newReview(reviewerRole, reviewerProject, request2, RequestStatus.FINISHED, false, true); + review3 = newReview(reviewerRole, reviewerProject, request3, RequestStatus.TAKEN, false, false); } @Test @@ -220,7 +157,162 @@ public class TestPeerReview { public void testFindAwaitingRequestsByProject(){ List<PeerRequest> awaitingRequests = peerRequestService.findAwaitingRequests(requesterProject); Assert.assertEquals(1, awaitingRequests.size()); - Assert.assertEquals(Arrays.asList(new PeerRequest[]{awaitingRequest}), awaitingRequests); + Assert.assertEquals(Arrays.asList(new PeerRequest[]{request4}), awaitingRequests); } + @Test + @Transactional + @Rollback + public void testCountAllAbortedReviews(){ + Long allAborted = peerReviewService.countAllAborted(); + Long expected = new Long(0); + Assert.assertEquals(expected, allAborted); + + review2.setAborted(true); + review2.setSubmitted(false); + review3.setAborted(true); + + allAborted = peerReviewService.countAllAborted(); + expected = new Long(2); + Assert.assertEquals(expected, allAborted); + } + + @Test + @Transactional + @Rollback + public void testCountAllInProgressReviews(){ + Long allInProgress = peerReviewService.countAllInProgress(); + Long expected = new Long(1); + Assert.assertEquals(expected, allInProgress); + + review3.setSubmitted(true); + + allInProgress = peerReviewService.countAllInProgress(); + expected = new Long(0); + Assert.assertEquals(expected, allInProgress); + } + + @Test + @Transactional + @Rollback + public void testCountAllCompletedReviews(){ + Long allCompleted = peerReviewService.countAllCompleted(); + Long expected = new Long(2); + Assert.assertEquals(expected, allCompleted); + + review3.setSubmitted(true); + + allCompleted = peerReviewService.countAllCompleted(); + expected = new Long(3); + Assert.assertEquals(expected, allCompleted); + } + + @Test + @Transactional + @Rollback + public void testCountAllReviewsByStudent(){ + Long allReviewsByStudent = peerReviewService.countAllReviewsByStudent(reviewerRole); + Long expected = new Long(3); + Assert.assertEquals(expected, allReviewsByStudent); + } + + @Test + @Transactional + @Rollback + public void testFindAllWithParams(){ + PeerReviewService.FilterParams params = new PeerReviewService.FilterParams(); + params.setAuthor(reviewerRole); + List<PeerReview> reviewList = peerReviewService.findAll(params, new PageRequest(0, 10)).getContent(); + Assert.assertEquals(Arrays.asList(new PeerReview[]{review1,review2,review3}), reviewList); + + review3.setReviewer(requesterRole); + reviewList = peerReviewService.findAll(params, new PageRequest(0, 10)).getContent(); + Assert.assertEquals(Arrays.asList(new PeerReview[]{review1,review2}), reviewList); + + params.setAuthor(null); + reviewList = peerReviewService.findAll(params, new PageRequest(0, 10)).getContent(); + Assert.assertEquals(Arrays.asList(new PeerReview[]{review1,review2,review3}), reviewList); + + params.setIncludeAborted(false); + params.setIncludeCompleted(false); + params.setIncludeInProgress(true); + reviewList = peerReviewService.findAll(params, new PageRequest(0, 10)).getContent(); + Assert.assertEquals(Arrays.asList(new PeerReview[]{review3}), reviewList); + + review3.setAborted(true); + params.setIncludeAborted(true); + reviewList = peerReviewService.findAll(params, new PageRequest(0, 10)).getContent(); + Assert.assertEquals(Arrays.asList(new PeerReview[]{review3}), reviewList); + } + + @Test + @Transactional + @Rollback + public void testReviewParamsDateFiltering() throws ParseException { + PeerReviewService.FilterParams params = new PeerReviewService.FilterParams(); + SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); + + Date january12 = date.parse("2012-01-12"); + Date february15 = date.parse("2012-02-15"); + Date march21 = date.parse("2012-03-21"); + Date april05 = date.parse("2012-04-05"); + Date may02 = date.parse("2012-05-02"); + Date march27 = date.parse("2012-03-27"); + + review1.setDateCreated(february15); + review2.setDateCreated(march21); + review3.setDateCreated(may02); + + params.setCreatedAfter(january12); + params.setCreatedBefore(april05); + + List<PeerReview> reviewList = peerReviewService.findAll(params, new PageRequest(0,10)).getContent(); + Assert.assertEquals(2, reviewList.size()); + Assert.assertEquals(Arrays.asList(new PeerReview[]{review1,review2}), reviewList); + + review3.setDateCreated(march27); + reviewList = peerReviewService.findAll(params, new PageRequest(0,10)).getContent(); + Assert.assertEquals(Arrays.asList(new PeerReview[]{review1,review2,review3}), reviewList); + } + + //Helper methods for setting up test objects + + private PeerReview newReview(final Student reviewer, final Project project, PeerRequest request, final RequestStatus status, boolean aborted, boolean submitted) { + PeerReview review = new PeerReview(); + review.setReviewer(reviewer); + review.setProject(project); + review.setComment("Hi there!"); + review.setPeerRequest(request); + request.setStatus(status); + request = peerRequestService.save(request); + review.setSubmitted(submitted); + review.setAborted(aborted); + return peerReviewService.save(review); + } + + private PeerRequest newRequest(final Student requester, final Project project, final String comment, final RequestStatus status){ + PeerRequest request = new PeerRequest(); + request.setComment(comment); + request.setRequester(requester); + request.setProject(project); + if(status!=null) + request.setStatus(status); + return peerRequestService.save(request); + } + + private Student newStudent(final User user) { + Student student = new Student(); + student.setUser(user); + return (Student) roleService.save(student); + } + + private Project newProject(final ProjectClass pc, final Student role, final Employee headSupervisor, final ProjectStatus status){ + Project newProject = new Project(); + newProject.setProjectClass(pc); + newProject.setTitle("Project title"); + newProject.setHeadSupervisor(headSupervisor); + newProject.addProjectParticipant(role); + newProject.setProjectStatus(status); + return projectService.save(newProject); + } }