new unit tests for params filtering on peer reviews

This commit is contained in:
Emil Siverhall 2012-05-28 13:44:53 +02:00
parent 2592aebdb1
commit b58b91003f
2 changed files with 176 additions and 84 deletions
src
main/java/se/su/dsv/scipro/springdata/serviceimpls
test/java/se/su/dsv/scipro/springdata

@ -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)

@ -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);
}
}