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..9a9165bb7 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 @@ -19,4 +19,6 @@ public interface ISyncJobManager { void cancelJob(String jobId); + void deleteJob(String jobId); + } \ No newline at end of file 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..30a2985f0 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 @@ -89,4 +89,19 @@ public void cancelJob(String jobId) { jobRepo.save(job); } } + + @Override + public void deleteJob(String jobId) { + Optional jobOptional = jobRepo.findById(jobId); + if (jobOptional.isPresent()) { + GroupSyncJob job = currentJobs.get(jobOptional.get().getGroupId()); + if (job == null) { + job = jobOptional.get(); + } +// job.setStatus(JobStatus.CANCELED); + job.setFinishedOn(OffsetDateTime.now()); + jobRepo.delete(job); + } + + } } diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/web/DeleteSyncJobController.java b/citesphere/src/main/java/edu/asu/diging/citesphere/web/DeleteSyncJobController.java new file mode 100644 index 000000000..64882eabd --- /dev/null +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/web/DeleteSyncJobController.java @@ -0,0 +1,21 @@ +package edu.asu.diging.citesphere.web; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import edu.asu.diging.citesphere.core.service.jobs.ISyncJobManager; + +@Controller +public class DeleteSyncJobController { + @Autowired + private ISyncJobManager syncManager; + + @RequestMapping(value = "/auth/jobs/sync/{jobId}/delete", method=RequestMethod.POST) + public String delete(@PathVariable String jobId) { + syncManager.deleteJob(jobId); + return "redirect:/auth/jobs/sync/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..9c312fed3 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 @@ -34,6 +34,7 @@

Jobs

Finished On + [[${job.id}]] @@ -59,6 +60,14 @@

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..21a158c98 --- /dev/null +++ b/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/jobs/impl/SyncJobManagerTest.java @@ -0,0 +1,102 @@ +package edu.asu.diging.citesphere.core.service.jobs.impl; + +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +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 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.impl.User; + +public class SyncJobManagerTest { + + @InjectMocks + private SyncJobManager managerToTest; + + @Mock + private GroupSyncJobRepository jobRepo; + + @Mock + private ICitationManager citationManager; + + private int page; + private int pageSize; + private List citationGroupList; + private ICitationGroup citationGroup1; + private ICitationGroup citationGroup2; + private List groupSyncJobList; + private GroupSyncJob groupSyncJob1; + private GroupSyncJob groupSyncJob2; + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + managerToTest.init(); + new User(); + page = 1; + pageSize = 10; + 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); + + new ArrayList<>(); + + new ArrayList<>(); + } + + @Test + public void test_deleteJob_success() { + groupSyncJob1.setId("job1"); + groupSyncJob1.setGroupId(String.valueOf(citationGroup1.getGroupId())); + + when(jobRepo.findById("job1")).thenReturn(Optional.of(groupSyncJob1)); + + managerToTest.addJob(groupSyncJob1); + + managerToTest.deleteJob("job1"); + + verify(jobRepo, times(1)).delete(groupSyncJob1); + } + + @Test(expected = IllegalArgumentException.class) + public void test_deleteJob_failed() { + groupSyncJob1.setId("job1"); + groupSyncJob1.setGroupId(String.valueOf(citationGroup1.getGroupId())); + + when(jobRepo.findById("job1")).thenReturn(Optional.of(groupSyncJob1)); + + doThrow(new IllegalArgumentException("entity is null")) + .when(jobRepo).delete(Mockito.any(GroupSyncJob.class)); + + managerToTest.deleteJob("job1"); + } + + +}