diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/core/repository/jobs/GroupSyncJobRepository.java b/citesphere/src/main/java/edu/asu/diging/citesphere/core/repository/jobs/GroupSyncJobRepository.java index 77f266f21..6cf562eaf 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/core/repository/jobs/GroupSyncJobRepository.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/core/repository/jobs/GroupSyncJobRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.repository.PagingAndSortingRepository; +import edu.asu.diging.citesphere.core.model.jobs.JobStatus; import edu.asu.diging.citesphere.core.model.jobs.impl.GroupSyncJob; public interface GroupSyncJobRepository extends PagingAndSortingRepository { @@ -14,5 +15,11 @@ public interface GroupSyncJobRepository extends PagingAndSortingRepository findByGroupIdIn(List groupIds, Pageable page); + public List findByGroupIdInAndStatus(List groupIds, JobStatus status, Pageable page); + + public List findByGroupId(String groupId, Pageable page); + + public List findByGroupIdAndStatus(String groupId, JobStatus status, Pageable page); + public long countByGroupIdIn(List groupIds); } diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/jobs/ISyncJobManager.java b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/jobs/ISyncJobManager.java index bb245da6c..bdc740b1d 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/jobs/ISyncJobManager.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/jobs/ISyncJobManager.java @@ -4,6 +4,7 @@ import org.springframework.data.domain.Pageable; +import edu.asu.diging.citesphere.core.model.jobs.JobStatus; import edu.asu.diging.citesphere.core.model.jobs.impl.GroupSyncJob; import edu.asu.diging.citesphere.user.IUser; @@ -14,7 +15,15 @@ public interface ISyncJobManager { GroupSyncJob getMostRecentJob(String groupId); List getJobs(IUser user, Pageable page); - + + List getJobs(IUser user, JobStatus status, Pageable page); + + List getJobs(String groupId, Pageable page); + + List getJobs(String groupId, JobStatus status, Pageable page); + + List getJobs(IUser user, String groupId, JobStatus jobStatus, Pageable page); + long getJobsCount(IUser user); void cancelJob(String jobId); diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/jobs/impl/SyncJobManager.java b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/jobs/impl/SyncJobManager.java index fa4fb77df..fec8392fb 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/jobs/impl/SyncJobManager.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/jobs/impl/SyncJobManager.java @@ -67,6 +67,31 @@ public List getJobs(IUser user, Pageable page) { return jobRepo.findByGroupIdIn(groups.stream().map(g -> g.getGroupId() + "").collect(Collectors.toList()), page); } + @Override + public List getJobs(IUser user, JobStatus status, Pageable page) { + List groups = citationManager.getGroups(user); + return jobRepo.findByGroupIdInAndStatus(groups.stream().map(g -> g.getGroupId() + "").collect(Collectors.toList()), status, page); + } + + @Override + public List getJobs(String groupId, Pageable page) { + return jobRepo.findByGroupId(groupId, page); + } + + @Override + public List getJobs(String groupId, JobStatus status, Pageable page) { + return jobRepo.findByGroupIdAndStatus(groupId, status, page); + } + + @Override + public List getJobs(IUser user, String groupId, JobStatus jobStatus, Pageable page) { + if (groupId.equals("All")) { + return jobStatus == null ? getJobs(user, page) : getJobs(user, jobStatus, page); + } else { + return jobStatus == null ? getJobs(groupId, page) : getJobs(groupId, jobStatus, page); + } + } + @Override public long getJobsCount(IUser user) { List groups = citationManager.getGroups(user); @@ -89,4 +114,5 @@ public void cancelJob(String jobId) { jobRepo.save(job); } } + } diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/jobs/SyncJobsController.java b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/jobs/SyncJobsController.java index cf13e4dfd..4271bd7f6 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/jobs/SyncJobsController.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/jobs/SyncJobsController.java @@ -8,7 +8,9 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import edu.asu.diging.citesphere.core.model.jobs.JobStatus; import edu.asu.diging.citesphere.core.service.jobs.ISyncJobManager; import edu.asu.diging.citesphere.user.IUser; @@ -19,13 +21,17 @@ public class SyncJobsController { private ISyncJobManager jobManager; @RequestMapping("/auth/jobs/sync/list") - public String list(Model model, @PageableDefault(sort = { "createdOn" }, direction = Direction.DESC) Pageable page, - Authentication authentication) { + public String list(Model model, @PageableDefault(sort = { "createdOn" }, direction = Direction.DESC) Pageable page, Authentication authentication, + @RequestParam(value = "groupId", required = false, defaultValue = "All") String groupId, + @RequestParam(value = "jobStatus", required = false, defaultValue = "All") String jobStatus) { long total = jobManager.getJobsCount((IUser) authentication.getPrincipal()); if (total == -1) { return "redirect:/"; } - model.addAttribute("jobs", jobManager.getJobs((IUser) authentication.getPrincipal(), page)); + JobStatus jobStatusEnum = jobStatus.equals("All") ? null : JobStatus.valueOf(jobStatus); + model.addAttribute("jobs", jobManager.getJobs((IUser) authentication.getPrincipal(), groupId, jobStatusEnum, page)); + model.addAttribute("jobStatus", jobStatus); + model.addAttribute("groupId", groupId); model.addAttribute("total", Math.ceil(total/page.getPageSize())); model.addAttribute("page", page.getPageNumber() + 1); return "auth/jobs/list"; diff --git a/citesphere/src/main/webapp/WEB-INF/views/auth/jobs/list.html b/citesphere/src/main/webapp/WEB-INF/views/auth/jobs/list.html index bad98d32e..ff7b22740 100644 --- a/citesphere/src/main/webapp/WEB-INF/views/auth/jobs/list.html +++ b/citesphere/src/main/webapp/WEB-INF/views/auth/jobs/list.html @@ -15,6 +15,24 @@ window.location.href = "[(@{|/auth/jobs/sync/list|})]?page=" + (page - 1); } }); + + $("#jobStatus").change(function () { + var groupId = $("#findgroupId").val(); + var jobStatus = $("#jobStatus").val(); + if ($("#jobStatus").val() === 'All') { + window.location.href = [[@{/auth/jobs/sync/list}]]; + } else { + window.location.href = [[@{/auth/jobs/sync/list}]] + "?jobStatus=" + jobStatus + "&groupId=" + groupId; + } + }); + + $("#findBygroupIdBtn").click(function() { + var groupId = $("#findgroupId").val(); + var jobStatus = $("#jobStatus").val(); + if (groupId != undefined && groupId != '') { + window.location.href = [[@{/auth/jobs/sync/list}]] + "?jobStatus=" + jobStatus + "&groupId=" + groupId; + } + }); }); @@ -23,6 +41,22 @@

Jobs

+
+ +
+
+
+ + +
+
    diff --git a/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/jobs/impl/SyncJobManagerTest.java b/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/jobs/impl/SyncJobManagerTest.java new file mode 100644 index 000000000..806f94422 --- /dev/null +++ b/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/jobs/impl/SyncJobManagerTest.java @@ -0,0 +1,137 @@ +package edu.asu.diging.citesphere.core.service.jobs.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; + +import edu.asu.diging.citesphere.core.model.jobs.JobStatus; +import edu.asu.diging.citesphere.core.model.jobs.impl.GroupSyncJob; +import edu.asu.diging.citesphere.core.repository.jobs.GroupSyncJobRepository; +import edu.asu.diging.citesphere.core.service.ICitationManager; +import edu.asu.diging.citesphere.model.bib.ICitationGroup; +import edu.asu.diging.citesphere.model.bib.impl.CitationGroup; +import edu.asu.diging.citesphere.user.IUser; +import edu.asu.diging.citesphere.user.impl.User; + +public class SyncJobManagerTest { + + @InjectMocks + private SyncJobManager managerToTest; + + @Mock + private GroupSyncJobRepository jobRepo; + + @Mock + private ICitationManager citationManager; + + private IUser user; + private int page; + private int pageSize; + private Pageable paging; + private List citationGroupList; + private ICitationGroup citationGroup1; + private ICitationGroup citationGroup2; + private List groupSyncJobList; + private List groupSyncJobEmptyList; + private GroupSyncJob groupSyncJob1; + private GroupSyncJob groupSyncJob2; + private List groupIds; + private JobStatus status; + private String groupId; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + user = new User(); + page = 1; + pageSize = 10; + paging = PageRequest.of(page, pageSize); + + citationGroup1 = new CitationGroup(); + citationGroup1.setGroupId(1L); + citationGroup2 = new CitationGroup(); + groupSyncJob1 = new GroupSyncJob(); + groupSyncJob2 = new GroupSyncJob(); + + citationGroupList = new ArrayList<>(); + citationGroupList.add(citationGroup1); + citationGroupList.add(citationGroup2); + + groupSyncJobList = new ArrayList<>(); + groupSyncJobList.add(groupSyncJob1); + groupSyncJobList.add(groupSyncJob2); + + groupIds = new ArrayList<>(); + + groupSyncJobEmptyList = new ArrayList<>(); + status = JobStatus.DONE; + groupId = "group1"; + } + + @Test + public void test_getJobs_succsess() { + Mockito.when(jobRepo.findByGroupIdIn(groupIds, paging)).thenReturn(groupSyncJobList); + List actualResponse = managerToTest.getJobs(user, paging); + Assert.assertEquals(2, actualResponse.size()); + } + + @Test + public void test_getJobs_resultsNotFound() { + Mockito.when(jobRepo.findByGroupIdIn(groupIds, paging)).thenReturn(groupSyncJobEmptyList); + List actualResponse = managerToTest.getJobs(user, paging); + Assert.assertTrue(actualResponse.isEmpty()); + } + + @Test + public void test_getJobs_byJobStatus() { + Mockito.when(jobRepo.findByGroupIdInAndStatus(groupIds, status, paging)).thenReturn(groupSyncJobList); + List actualResponse = managerToTest.getJobs(user, status, paging); + Assert.assertEquals(2, actualResponse.size()); + } + + @Test + public void test_getJobs_byJobStatus_resultsNotFound() { + Mockito.when(jobRepo.findByGroupIdInAndStatus(groupIds, status, paging)).thenReturn(groupSyncJobEmptyList); + List actualResponse = managerToTest.getJobs(user, status, paging); + Assert.assertTrue(actualResponse.isEmpty()); + } + + @Test + public void test_getJobs_byGroupId() { + Mockito.when(jobRepo.findByGroupId(groupId, paging)).thenReturn(groupSyncJobList); + List actualResponse = managerToTest.getJobs(groupId, paging); + Assert.assertEquals(2, actualResponse.size()); + } + + @Test + public void test_getJobs_byGroupId_resultsNotFound() { + Mockito.when(jobRepo.findByGroupId(groupId, paging)).thenReturn(groupSyncJobEmptyList); + List actualResponse = managerToTest.getJobs(groupId, paging); + Assert.assertTrue(actualResponse.isEmpty()); + } + + @Test + public void test_getJobs_byJobStatusAndGroupId() { + Mockito.when(jobRepo.findByGroupIdAndStatus(groupId, status, paging)) + .thenReturn(groupSyncJobList); + List actualResponse = managerToTest.getJobs(groupId, status, paging); + Assert.assertEquals(2, actualResponse.size()); + } + + @Test + public void test_getJobs_byJobStatusAndGroupId_resultsNotFound() { + Mockito.when(jobRepo.findByGroupIdAndStatus(groupId, status, paging)) + .thenReturn(groupSyncJobEmptyList); + List actualResponse = managerToTest.getJobs(groupId, status, paging); + Assert.assertTrue(actualResponse.isEmpty()); + } +}