From 2592aebdb18167063867066042bc92acfe5dbd41 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Mon, 28 May 2012 10:56:06 +0200 Subject: [PATCH 1/2] added ajax date filtering to all peers lists --- .../scipro/admin/panels/AdminMailPanel.java | 14 ++++++++++- .../scipro/components/DatePickerPanel.java | 13 +++++----- .../panels/FilterFormRequestStatusPanel.html | 2 +- .../panels/FilterFormReviewStatusPanel.html | 2 +- .../peer/panels/PeerRequestListPanel.html | 10 +++++--- .../peer/panels/PeerRequestListPanel.java | 25 +++++++++++++++++++ .../peer/panels/PeerReviewListPanel.html | 10 +++++--- .../peer/panels/PeerReviewListPanel.java | 24 ++++++++++++++++++ .../serviceimpls/PeerRequestServiceImpl.java | 11 +++++++- .../serviceimpls/PeerReviewServiceImpl.java | 12 ++++++++- .../services/PeerRequestService.java | 15 +++++++++++ .../services/PeerReviewService.java | 19 ++++++++++++++ 12 files changed, 138 insertions(+), 19 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/AdminMailPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/AdminMailPanel.java index 9f6589bdf3..cd37b0c9b3 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/AdminMailPanel.java +++ b/src/main/java/se/su/dsv/scipro/admin/panels/AdminMailPanel.java @@ -144,7 +144,19 @@ public class AdminMailPanel extends Panel { DateTime start = new DateTime(); start = start.minusMonths(6); - dpp = new DatePickerPanel("datePanel", start.toDate(), null); + dpp = new DatePickerPanel("datePanel", start.toDate(), null) { + private static final long serialVersionUID = 8199436051263013307L; + + @Override + public void updateStartDate(AjaxRequestTarget target) { + updateUserSet(target); + } + + @Override + public void updateEndDate(AjaxRequestTarget target) { + updateUserSet(target); + } + }; add(dpp); } diff --git a/src/main/java/se/su/dsv/scipro/components/DatePickerPanel.java b/src/main/java/se/su/dsv/scipro/components/DatePickerPanel.java index a0b5022b3f..33ae3b1b61 100644 --- a/src/main/java/se/su/dsv/scipro/components/DatePickerPanel.java +++ b/src/main/java/se/su/dsv/scipro/components/DatePickerPanel.java @@ -11,11 +11,7 @@ import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.Model; - - - - -public class DatePickerPanel extends Panel{ +public abstract class DatePickerPanel extends Panel{ private static final long serialVersionUID = -5607127520132313062L; @@ -74,6 +70,7 @@ public class DatePickerPanel extends Panel{ @Override protected void onUpdate(AjaxRequestTarget target) { setStartDate(startDtf.getModelObject()); + updateStartDate(target); } }; @@ -85,7 +82,7 @@ public class DatePickerPanel extends Panel{ @Override protected void onUpdate(AjaxRequestTarget target) { setEndDate(endDtf.getModelObject()); - + updateEndDate(target); } }; @@ -128,4 +125,8 @@ public class DatePickerPanel extends Panel{ //model.getObject().setEndDate(dpm.getEndDate()); endDtf.setModelObject(dpm.getEndDate()); } + + public abstract void updateStartDate(AjaxRequestTarget target); + public abstract void updateEndDate(AjaxRequestTarget target); + } diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormRequestStatusPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormRequestStatusPanel.html index 13185320cc..2082da651d 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormRequestStatusPanel.html +++ b/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormRequestStatusPanel.html @@ -8,7 +8,7 @@ <wicket:panel> <div wicket:id="container"> - <label for="checkGroup">Filter by status:</label> + <label for="checkGroup">Filter by status</label> <div wicket:id="checkGroup"> <div wicket:id="statusView"> <input type="checkbox" wicket:id="statusCheckBox"></input> diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormReviewStatusPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormReviewStatusPanel.html index 13185320cc..2082da651d 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormReviewStatusPanel.html +++ b/src/main/java/se/su/dsv/scipro/peer/panels/FilterFormReviewStatusPanel.html @@ -8,7 +8,7 @@ <wicket:panel> <div wicket:id="container"> - <label for="checkGroup">Filter by status:</label> + <label for="checkGroup">Filter by status</label> <div wicket:id="checkGroup"> <div wicket:id="statusView"> <input type="checkbox" wicket:id="statusCheckBox"></input> diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.html index 318374e249..2e8b07492f 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.html +++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.html @@ -6,15 +6,17 @@ <div class="span-24 prepend-top last"> <form wicket:id="form"> - <div class="span-6"> - <label>Filter by requesting author:</label> + <div class="span-5"> + <label>Filter by requesting author</label> <br /> <input wicket:id="filterAuthor" /> <br /> </div> - <div class="span-6" wicket:id="statusFilter"></div> + <div class="span-5" wicket:id="statusFilter"></div> + <label>Request created between</label><br /> + <div class="span-6" wicket:id="datePanel"></div> <div class="span-10" wicket:id="supervisorContainer"> - <label>Show only my projects:</label> + <label>Show only my projects</label> <br /> <input type="checkbox" wicket:id="supervisorCheckBox" /> <br /> diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.java b/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.java index 06e4f9f10c..8e43b06773 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.java +++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerRequestListPanel.java @@ -3,6 +3,7 @@ */ package se.su.dsv.scipro.peer.panels; +import java.util.Date; import java.util.Iterator; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -22,10 +23,12 @@ import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; +import org.joda.time.DateTime; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.components.DatePickerPanel; import se.su.dsv.scipro.components.ItemsPerPageChoice; import se.su.dsv.scipro.data.dataobjects.Employee; import se.su.dsv.scipro.data.dataobjects.Student; @@ -137,6 +140,28 @@ public class PeerRequestListPanel extends Panel { }; params.setStatuses(statusFilter.getSelectedStatuses()); add(statusFilter); + + DateTime start = new DateTime(); + start = start.minusMonths(12); + params.setCreatedAfter(start.toDate()); + params.setCreatedBefore(new Date()); + final DatePickerPanel datePanel = new DatePickerPanel("datePanel", start.toDate(), null) { + private static final long serialVersionUID = 1502923890365050302L; + + @Override + public void updateStartDate(AjaxRequestTarget target) { + params.setCreatedAfter(getStartDate()); + updateTarget(target, params); + } + + @Override + public void updateEndDate(AjaxRequestTarget target) { + params.setCreatedBefore(getEndDate()); + updateTarget(target, params); + } + }; + add(datePanel); + final AjaxCheckBox supervisorProjects = new AjaxCheckBox("supervisorCheckBox", new Model<Boolean>()) { private static final long serialVersionUID = -7624763782876907386L; diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.html index b601ba03ce..c26d9acde5 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.html +++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.html @@ -6,15 +6,17 @@ <div class="span-24 prepend-top last"> <form wicket:id="form"> - <div class="span-6"> - <label>Filter by reviewing author:</label> + <div class="span-5"> + <label>Filter by reviewing author</label> <br/> <input wicket:id="filterAuthor"/> <br/> </div> - <div class="span-6" wicket:id="statusFilter"></div> + <div class="span-5" wicket:id="statusFilter"></div> + <label>Review commenced between</label><br /> + <div class="span-6" wicket:id="datePanel"></div> <div class="span-10" wicket:id="supervisorContainer"> - <label>Show only my projects:</label> + <label>Show only my projects</label> <br> <input type="checkbox" wicket:id="supervisorCheckBox"/> <br> diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.java b/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.java index 80864939b6..5785550575 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.java +++ b/src/main/java/se/su/dsv/scipro/peer/panels/PeerReviewListPanel.java @@ -3,6 +3,7 @@ */ package se.su.dsv.scipro.peer.panels; +import java.util.Date; import java.util.Iterator; import org.apache.wicket.PageParameters; @@ -23,10 +24,12 @@ import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; +import org.joda.time.DateTime; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.components.DatePickerPanel; import se.su.dsv.scipro.components.ItemsPerPageChoice; import se.su.dsv.scipro.data.dataobjects.Employee; import se.su.dsv.scipro.data.dataobjects.Student; @@ -159,6 +162,27 @@ public class PeerReviewListPanel extends Panel { } }; add(statusFilter); + + DateTime start = new DateTime(); + start = start.minusMonths(12); + params.setCreatedAfter(start.toDate()); + params.setCreatedBefore(new Date()); + final DatePickerPanel datePanel = new DatePickerPanel("datePanel", start.toDate(), null) { + private static final long serialVersionUID = -411662653140866688L; + + @Override + public void updateStartDate(AjaxRequestTarget target) { + params.setCreatedAfter(getStartDate()); + updateTarget(target, params); + } + + @Override + public void updateEndDate(AjaxRequestTarget target) { + params.setCreatedBefore(getEndDate()); + updateTarget(target, params); + } + }; + add(datePanel); final AjaxCheckBox supervisorProjects = new AjaxCheckBox("supervisorCheckBox", new Model<Boolean>()) { private static final long serialVersionUID = -6475334474261478489L; diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerRequestServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerRequestServiceImpl.java index 3f84e8a8a8..d152512515 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerRequestServiceImpl.java +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/PeerRequestServiceImpl.java @@ -2,6 +2,7 @@ package se.su.dsv.scipro.springdata.serviceimpls; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.List; import javax.annotation.Resource; @@ -132,6 +133,13 @@ public class PeerRequestServiceImpl extends AbstractQueryService<PeerRequest, Lo } } + private BooleanExpression createdBetween(Date from, Date to) { + if(from!=null&to!=null) + return QPeerRequest.peerRequest.dateCreated.between(from, to); + else + return null; + } + private BooleanBuilder statusFilter(Collection<RequestStatus> statuses){ BooleanBuilder e = new BooleanBuilder(); if(statuses!=null && !statuses.isEmpty()){ @@ -150,7 +158,8 @@ public class PeerRequestServiceImpl extends AbstractQueryService<PeerRequest, Lo private Predicate predicateFromParams(FilterParams params) { return isRequester(params.getAuthor()) .and(statusFilter(params.getStatuses())) - .and(supervisorIs(params.getSupervisor())); + .and(supervisorIs(params.getSupervisor())) + .and(createdBetween(params.getCreatedAfter(), params.getCreatedBefore())); } @Transactional ( readOnly = false ) 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 2d05e5a36f..d90c1f3c1f 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 @@ -1,6 +1,7 @@ package se.su.dsv.scipro.springdata.serviceimpls; import java.util.ArrayList; +import java.util.Date; import java.util.List; import javax.annotation.Resource; @@ -55,7 +56,8 @@ public class PeerReviewServiceImpl extends AbstractQueryService<PeerReview, Long private Predicate predicateFromParams(FilterParams params) { return reviewerIs(params.getAuthor()) .and(statusFilter(params.isIncludeCompleted(), params.isIncludeAborted(), params.isIncludeInProgress())) - .and(supervisorIs(params.getSupervisor())); + .and(supervisorIs(params.getSupervisor())) + .and(startedBetween(params.getCreatedAfter(), params.getCreatedBefore())); } @@ -181,6 +183,14 @@ public class PeerReviewServiceImpl extends AbstractQueryService<PeerReview, Long private BooleanExpression isSubmitted(boolean isSubmitted){ return QPeerReview.peerReview.submitted.eq(isSubmitted); } + + private BooleanExpression startedBetween(Date from, Date to) { + if(from!=null&&to!=null) { + return QPeerReview.peerReview.dateCreated.between(from, to); + } + else + return null; + } //Construct a list from Iterable Object. private List<PeerReview> constructList(Iterable<PeerReview> reviews) { diff --git a/src/main/java/se/su/dsv/scipro/springdata/services/PeerRequestService.java b/src/main/java/se/su/dsv/scipro/springdata/services/PeerRequestService.java index 3b600d558f..dace639726 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/services/PeerRequestService.java +++ b/src/main/java/se/su/dsv/scipro/springdata/services/PeerRequestService.java @@ -2,6 +2,7 @@ package se.su.dsv.scipro.springdata.services; import java.io.Serializable; import java.util.Collection; +import java.util.Date; import java.util.List; import org.springframework.data.domain.Page; @@ -36,6 +37,8 @@ public interface PeerRequestService extends GenericService<PeerRequest, Long>, Q private Employee supervisor; private Student author; private Collection<RequestStatus> statuses; + private Date createdAfter; + private Date createdBefore; public void setSupervisor(Employee supervisor) { this.supervisor = supervisor; @@ -55,6 +58,18 @@ public interface PeerRequestService extends GenericService<PeerRequest, Long>, Q public Student getAuthor() { return author; } + public void setCreatedAfter(Date createdAfter) { + this.createdAfter = createdAfter; + } + public Date getCreatedAfter() { + return createdAfter; + } + public void setCreatedBefore(Date createdBefore) { + this.createdBefore = createdBefore; + } + public Date getCreatedBefore() { + return createdBefore; + } } } diff --git a/src/main/java/se/su/dsv/scipro/springdata/services/PeerReviewService.java b/src/main/java/se/su/dsv/scipro/springdata/services/PeerReviewService.java index 65ea0d035c..8665f245f4 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/services/PeerReviewService.java +++ b/src/main/java/se/su/dsv/scipro/springdata/services/PeerReviewService.java @@ -1,6 +1,7 @@ package se.su.dsv.scipro.springdata.services; import java.io.Serializable; +import java.util.Date; import java.util.List; import org.springframework.data.domain.Page; @@ -39,6 +40,8 @@ public interface PeerReviewService extends GenericService<PeerReview, Long>, Que private boolean includeCompleted; private boolean includeAborted; private boolean includeInProgress; + private Date createdAfter; + private Date createdBefore; public void setIncludeCompleted(boolean includeCompleted) { this.includeCompleted = includeCompleted; @@ -80,5 +83,21 @@ public interface PeerReviewService extends GenericService<PeerReview, Long>, Que return author; } + public void setCreatedAfter(Date createdAfter) { + this.createdAfter = createdAfter; + } + + public Date getCreatedAfter() { + return createdAfter; + } + + public void setCreatedBefore(Date createdBefore) { + this.createdBefore = createdBefore; + } + + public Date getCreatedBefore() { + return createdBefore; + } + } } From b58b91003ff8abac80a37f12560911ed46e52c90 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Mon, 28 May 2012 13:44:53 +0200 Subject: [PATCH 2/2] new unit tests for params filtering on peer reviews --- .../serviceimpls/PeerReviewServiceImpl.java | 2 +- .../dsv/scipro/springdata/TestPeerReview.java | 258 ++++++++++++------ 2 files changed, 176 insertions(+), 84 deletions(-) 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); + } }