Skip to content

v0.2.50..v0.2.51 changeset JobsResourceTest.java

Garret Voltz edited this page Jan 15, 2020 · 1 revision
diff --git a/hoot-services/src/test/java/hoot/services/controllers/jobs/JobsResourceTest.java b/hoot-services/src/test/java/hoot/services/controllers/jobs/JobsResourceTest.java
index 06b5922..1b8ca4c 100644
--- a/hoot-services/src/test/java/hoot/services/controllers/jobs/JobsResourceTest.java
+++ b/hoot-services/src/test/java/hoot/services/controllers/jobs/JobsResourceTest.java
@@ -26,17 +26,22 @@
  */
 package hoot.services.controllers.jobs;
 
+import static hoot.services.job.JobStatus.CANCELLED;
 import static hoot.services.job.JobStatus.COMPLETE;
+import static hoot.services.job.JobStatus.FAILED;
 import static hoot.services.job.JobStatus.RUNNING;
 import static hoot.services.utils.DbUtils.createQuery;
 
 import java.sql.Timestamp;
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.junit.After;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
@@ -61,178 +66,401 @@ import hoot.services.models.db.Users;
 @ContextConfiguration(classes = HootServicesSpringTestConfig.class, loader = AnnotationConfigContextLoader.class)
 @Transactional
 public class JobsResourceTest extends HootServicesJerseyTestAbstract {
+    public final String prefix = "test-JobsResourceTest-";
 
-    @Test
-    @Category(UnitTest.class)
-    public void testRecent() throws Exception {
+    @Before
+    public void before() throws Exception {
         // Truncate job status table:
-        createQuery().delete(QJobStatus.jobStatus).where(QJobStatus.jobStatus.jobId.startsWith("test")).execute();
+        createQuery().delete(QJobStatus.jobStatus).where(QJobStatus.jobStatus.jobId.startsWith(prefix)).execute();
+
         final long now = System.currentTimeMillis();
-        final String jobIdPrefix = "test-JobsResourceTest-testRecent-" + now + "-";
-        try {
-            for(int i = 0; i < 20; i++) {
-
-                    JobStatus jobStatus = new JobStatus();
-                    jobStatus.setJobId(jobIdPrefix + i);
-                    jobStatus.setJobType(JobType.UNKNOWN.ordinal());
-                    jobStatus.setStatus(COMPLETE.ordinal());
-                    jobStatus.setStatusDetail("FINISHED SUCCESSFULLY");
-                    jobStatus.setPercentComplete(100);
-                    jobStatus.setUserId(Users.TEST_USER.getId());
-
-                    Timestamp ts = new Timestamp(System.currentTimeMillis());
-                    jobStatus.setStart(ts);
-                    jobStatus.setEnd(new Timestamp(System.currentTimeMillis() + 1000));
-
-                    createQuery().insert(QJobStatus.jobStatus).populate(jobStatus).execute();
+        final String jobIdPrefix = prefix + now + "-";
+
+        for(int i = 0; i < 50; i++) {
+
+            JobStatus jobStatus = new JobStatus();
+            jobStatus.setJobId(jobIdPrefix + i);
+            jobStatus.setJobType(i % JobType.values().length);
+            jobStatus.setUserId(Users.TEST_USER.getId());
+            if (i % 10 == 0) {
+                jobStatus.setStatus(RUNNING.ordinal());
+                jobStatus.setStatusDetail("RUNNING");
+                jobStatus.setPercentComplete(50);
+                //make two running jobs owned by someone else
+                if (i <= 20 ) jobStatus.setUserId(-13L);
+            } else {
+                jobStatus.setStatus(COMPLETE.ordinal());
+                jobStatus.setStatusDetail("FINISHED SUCCESSFULLY");
+                jobStatus.setPercentComplete(100);
+                //make 5 history jobs owned by someone else
+                if (i % 9 == 0) jobStatus.setUserId(-13L);
+                //make 3 history jobs cancelled
+                if (i % 13 == 0) jobStatus.setStatus(CANCELLED.ordinal());
+                //make 3 history jobs failed
+                if (i % 14 == 0) jobStatus.setStatus(FAILED.ordinal());
             }
 
-            Response response = target("/recent")
-                    .request(MediaType.APPLICATION_JSON)
-                    .get();
-            String actualResult = response.readEntity(String.class);
-            ObjectMapper objectMapper = new ObjectMapper();
-            List<JobStatusResponse> jobs = objectMapper.readValue(actualResult, new TypeReference<List<JobStatusResponse>>(){});
-            Assert.assertEquals(20, jobs.size());
-            for(JobStatusResponse j : jobs) {
-                Assert.assertTrue(j.getJobId().startsWith(jobIdPrefix));
-            }
-        } finally {
-            createQuery().delete(QJobStatus.jobStatus).where(QJobStatus.jobStatus.jobId.startsWith("test")).execute();
+            Timestamp ts = new Timestamp(now + i);
+            jobStatus.setStart(ts);
+            jobStatus.setEnd(new Timestamp(now + i + (jobStatus.getJobType() * 1000)));
+
+            createQuery().insert(QJobStatus.jobStatus).populate(jobStatus).execute();
         }
 
+    }
 
+    @After
+    public void after() throws Exception {
+        createQuery().delete(QJobStatus.jobStatus).where(QJobStatus.jobStatus.jobId.startsWith(prefix)).execute();
     }
 
     @Test
     @Category(UnitTest.class)
-    public void testRecentOlder() throws Exception {
-        // Truncate job status table:
-        createQuery().delete(QJobStatus.jobStatus).where(QJobStatus.jobStatus.jobId.startsWith("test")).execute();
-        final long now = System.currentTimeMillis();
-        final long old = System.currentTimeMillis() - 3600000 * 72;
-        final String jobIdPrefix = "test-JobsResourceTest-testRecentOlder-" + now + "-";
-        try {
-            for(int i = 0; i < 5; i++) {
-
-                    JobStatus jobStatus = new JobStatus();
-                    jobStatus.setJobId(jobIdPrefix + i);
-                    jobStatus.setJobType(JobType.UNKNOWN.ordinal());
-                    jobStatus.setStatus(COMPLETE.ordinal());
-                    jobStatus.setStatusDetail("FINISHED SUCCESSFULLY");
-                    jobStatus.setPercentComplete(100);
-                    jobStatus.setUserId(Users.TEST_USER.getId());
-
-                    Timestamp ts = new Timestamp(now);
-                    jobStatus.setStart(ts);
-                    jobStatus.setEnd(new Timestamp(now + 1000));
-
-                    createQuery().insert(QJobStatus.jobStatus).populate(jobStatus).execute();
+    public void testHistoryDefaults() throws Exception {
+        Response response = target("/history")
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(25, jobs.size()); //default limit
+        Assert.assertEquals(40L, history.getTotal().longValue()); //non-running total owned by test user
+        JobStatusResponse previous = null;
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
+            if (previous != null) {
+                Assert.assertTrue(j.getStart() <= previous.getStart());
             }
-            // Add 15 jobs that are older than 12 hours:
-            for(int i = 5; i < 20; i++) {
-
-                JobStatus jobStatus = new JobStatus();
-                jobStatus.setJobId(jobIdPrefix + i);
-                jobStatus.setJobType(JobType.UNKNOWN.ordinal());
-                jobStatus.setStatus(COMPLETE.ordinal());
-                jobStatus.setStatusDetail("FINISHED SUCCESSFULLY");
-                jobStatus.setPercentComplete(100);
-                jobStatus.setUserId(Users.TEST_USER.getId());
+            previous = j;
+        }
+    }
 
-                Timestamp ts = new Timestamp(old);
-                jobStatus.setStart(ts);
-                jobStatus.setEnd(new Timestamp(old + 1000));
+    @Test
+    @Category(UnitTest.class)
+    public void testHistoryLimit() throws Exception {
+        Response response = target("/history")
+                .queryParam("limit", 50)
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(40, jobs.size());
+        Assert.assertEquals(40L, history.getTotal().longValue()); //non-running total owned by test user
+        JobStatusResponse previous = null;
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
+            if (previous != null) {
+                Assert.assertTrue(j.getStart() <= previous.getStart());
+            }
+            previous = j;
+        }
+    }
 
-                createQuery().insert(QJobStatus.jobStatus).populate(jobStatus).execute();
+    @Test
+    @Category(UnitTest.class)
+    public void testHistoryLimitOffset() throws Exception {
+        Response response = target("/history")
+                .queryParam("limit", 50)
+                .queryParam("offset", 25)
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(15, jobs.size());
+        Assert.assertEquals(40L, history.getTotal().longValue()); //non-running total owned by test user
+        JobStatusResponse previous = null;
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
+            if (previous != null) {
+                Assert.assertTrue(j.getStart() <= previous.getStart());
             }
+            previous = j;
+        }
+    }
 
+    @Test
+    @Category(UnitTest.class)
+    public void testHistoryOffset() throws Exception {
+        Response response = target("/history")
+                .queryParam("offset", 25)
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(15, jobs.size());
+        Assert.assertEquals(40L, history.getTotal().longValue()); //non-running total owned by test user
+        JobStatusResponse previous = null;
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
+            if (previous != null) {
+                Assert.assertTrue(j.getStart() <= previous.getStart());
+            }
+            previous = j;
+        }
+    }
 
-            Response response = target("/recent")
-                    .request(MediaType.APPLICATION_JSON)
-                    .get();
-            String actualResult = response.readEntity(String.class);
-            ObjectMapper objectMapper = new ObjectMapper();
-            List<JobStatusResponse> jobs = objectMapper.readValue(actualResult, new TypeReference<List<JobStatusResponse>>(){});
-            Assert.assertEquals(10, jobs.size());
-            for(JobStatusResponse j : jobs) {
-                Assert.assertTrue(j.getJobId().startsWith(jobIdPrefix));
+    @Test
+    @Category(UnitTest.class)
+    public void testHistorySortStartAsc() throws Exception {
+        Response response = target("/history")
+                .queryParam("sort", "+start")
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(25, jobs.size());
+        Assert.assertEquals(40L, history.getTotal().longValue()); //non-running total owned by test user
+        JobStatusResponse previous = null;
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
+            if (previous != null) {
+                Assert.assertTrue(j.getStart() >= previous.getStart());
             }
-        } finally {
-            createQuery().delete(QJobStatus.jobStatus).where(QJobStatus.jobStatus.jobId.startsWith("test")).execute();
+            previous = j;
         }
     }
 
     @Test
     @Category(UnitTest.class)
-    public void testRecentOlderRunning() throws Exception {
-        // Truncate job status table:
-        createQuery().delete(QJobStatus.jobStatus).where(QJobStatus.jobStatus.jobId.startsWith("test")).execute();
-        final long now = System.currentTimeMillis();
-        final long old = System.currentTimeMillis() - 3600000 * 72;
-        final String jobIdPrefix = "test-JobsResourceTest-testRecentOlder-" + now + "-";
-        try {
-            for(int i = 0; i < 5; i++) {
-
-                    JobStatus jobStatus = new JobStatus();
-                    jobStatus.setJobId(jobIdPrefix + i);
-                    jobStatus.setJobType(JobType.UNKNOWN.ordinal());
-                    jobStatus.setUserId(Users.TEST_USER.getId());
-                    if (i % 2 == 0) {
-                        jobStatus.setStatus(COMPLETE.ordinal());
-                        jobStatus.setStatusDetail("FINISHED SUCCESSFULLY");
-                        jobStatus.setPercentComplete(100);
-                    } else {
-                        jobStatus.setStatus(RUNNING.ordinal());
-                        jobStatus.setStatusDetail("RUNNING");
-                        jobStatus.setPercentComplete(50);
-                    }
-
-                    Timestamp ts = new Timestamp(now);
-                    jobStatus.setStart(ts);
-                    jobStatus.setEnd(new Timestamp(now + 1000));
-
-                    createQuery().insert(QJobStatus.jobStatus).populate(jobStatus).execute();
+    public void testHistorySortDurationDesc() throws Exception {
+        Response response = target("/history")
+                .queryParam("sort", "-duration")
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(25, jobs.size());
+        Assert.assertEquals(40L, history.getTotal().longValue()); //non-running total owned by test user
+        JobStatusResponse previous = null;
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
+            if (previous != null) {
+                Assert.assertTrue((j.getEnd() - j.getStart()) <= (previous.getEnd() - previous.getStart()));
             }
-            // Add 15 jobs that are older than 12 hours but 6 are still running:
-            for(int i = 5; i < 20; i++) {
-
-                JobStatus jobStatus = new JobStatus();
-                jobStatus.setJobId(jobIdPrefix + i);
-                jobStatus.setJobType(JobType.UNKNOWN.ordinal());
-                jobStatus.setUserId(Users.TEST_USER.getId());
-                if (i % 2 == 0) {
-                    jobStatus.setStatus(COMPLETE.ordinal());
-                    jobStatus.setStatusDetail("FINISHED SUCCESSFULLY");
-                    jobStatus.setPercentComplete(100);
-                } else {
-                    jobStatus.setStatus(RUNNING.ordinal());
-                    jobStatus.setStatusDetail("RUNNING");
-                    jobStatus.setPercentComplete(50);
-                }
-
-                Timestamp ts = new Timestamp(old);
-                jobStatus.setStart(ts);
-                jobStatus.setEnd(new Timestamp(old + 1000));
-
-                createQuery().insert(QJobStatus.jobStatus).populate(jobStatus).execute();
+            previous = j;
+        }
+    }
+
+    @Test
+    @Category(UnitTest.class)
+    public void testHistorySortDurationAsc() throws Exception {
+        Response response = target("/history")
+                .queryParam("sort", "+duration")
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(25, jobs.size());
+        Assert.assertEquals(40L, history.getTotal().longValue()); //non-running total owned by test user
+        JobStatusResponse previous = null;
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
+            if (previous != null) {
+                Assert.assertTrue((j.getEnd() - j.getStart()) >= (previous.getEnd() - previous.getStart()));
             }
+            previous = j;
+        }
+    }
+
+    @Test
+    @Category(UnitTest.class)
+    public void testHistorySortTypeAscWithLimit() throws Exception {
+        Response response = target("/history")
+                .queryParam("sort", "+type")
+                .queryParam("limit", 50)
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(40, jobs.size());
+        Assert.assertEquals(40L, history.getTotal().longValue()); //non-running total owned by test user
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
+        }
+        //IMPORT is the first job type enum but those are all set to RUNNING
+        Assert.assertEquals(JobType.EXPORT.toString(), jobs.get(0).getJobType());
+        Assert.assertEquals(JobType.UPLOAD_CHANGESET.toString(), jobs.get(jobs.size() - 1).getJobType());
+    }
 
+    @Test
+    @Category(UnitTest.class)
+    public void testHistorySortTypeDescWithLimit() throws Exception {
+        Response response = target("/history")
+                .queryParam("sort", "-type")
+                .queryParam("limit", 50)
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(40, jobs.size());
+        Assert.assertEquals(40L, history.getTotal().longValue()); //non-running total owned by test user
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
+        }
+        //IMPORT is the first job type enum but those are all set to RUNNING
+        Assert.assertEquals(JobType.UPLOAD_CHANGESET.toString(), jobs.get(0).getJobType());
+        Assert.assertEquals(JobType.EXPORT.toString(), jobs.get(jobs.size() - 1).getJobType());
+    }
 
-            Response response = target("/recent")
-                    .request(MediaType.APPLICATION_JSON)
-                    .get();
-            String actualResult = response.readEntity(String.class);
-            ObjectMapper objectMapper = new ObjectMapper();
-            List<JobStatusResponse> jobs = objectMapper.readValue(actualResult, new TypeReference<List<JobStatusResponse>>(){});
-            Assert.assertEquals(13, jobs.size());
-            for(JobStatusResponse j : jobs) {
-                Assert.assertTrue(j.getJobId().startsWith(jobIdPrefix));
-            }
-        } finally {
-            createQuery().delete(QJobStatus.jobStatus).where(QJobStatus.jobStatus.jobId.startsWith("test")).execute();
+    @Test
+    @Category(UnitTest.class)
+    public void testHistorySortStatusAscWithLimit() throws Exception {
+        Response response = target("/history")
+                .queryParam("sort", "+status")
+                .queryParam("limit", 50)
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(40, jobs.size());
+        Assert.assertEquals(40L, history.getTotal().longValue()); //non-running total owned by test user
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
         }
+        //RUNNING is the first job status enum but those filtered out in job history
+        Assert.assertEquals(hoot.services.job.JobStatus.COMPLETE.toString(), jobs.get(0).getStatus());
+        Assert.assertEquals(hoot.services.job.JobStatus.CANCELLED.toString(), jobs.get(jobs.size() - 1).getStatus());
     }
 
-}
+    @Test
+    @Category(UnitTest.class)
+    public void testHistorySortStatusDescWithLimit() throws Exception {
+        Response response = target("/history")
+                .queryParam("sort", "-status")
+                .queryParam("limit", 50)
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(40, jobs.size());
+        Assert.assertEquals(40L, history.getTotal().longValue()); //non-running total owned by test user
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
+        }
+        //RUNNING is the first job status enum but those filtered out in job history
+        Assert.assertEquals(hoot.services.job.JobStatus.CANCELLED.toString(), jobs.get(0).getStatus());
+        Assert.assertEquals(hoot.services.job.JobStatus.COMPLETE.toString(), jobs.get(jobs.size() - 1).getStatus());
+    }
+
+    @Test
+    @Category(UnitTest.class)
+    public void testHistoryFilterType() throws Exception {
+        Response response = target("/history")
+                .queryParam("jobType", "conflate")
+                .queryParam("limit", 50)
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(5, jobs.size());
+        for (JobStatusResponse j : jobs) {
+            Assert.assertFalse(("running").equalsIgnoreCase(j.getStatus()));
+            Assert.assertTrue(("conflate").equalsIgnoreCase(j.getJobType()));
+        }
+    }
+
+    @Test
+    @Category(UnitTest.class)
+    public void testHistoryFilterStatus() throws Exception {
+        Response response = target("/history")
+                .queryParam("status", "cancelled")
+                .queryParam("limit", 50)
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(3, jobs.size());
+        Assert.assertEquals(3L, history.getTotal().longValue()); //non-running total owned by test user
+        for (JobStatusResponse j : jobs) {
+            Assert.assertTrue(("cancelled").equalsIgnoreCase(j.getStatus()));
+        }
+    }
+
+    @Test
+    @Category(UnitTest.class)
+    public void testHistoryFilterTypeStatus() throws Exception {
+        Response response = target("/history")
+                .queryParam("jobType", "export,conflate,clip")
+                .queryParam("status", "complete")
+                .queryParam("limit", 50)
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        JobHistory history = objectMapper.readValue(actualResult, new TypeReference<JobHistory>(){});
+        List<JobStatusResponse> jobs = history.getJobs();
+        Assert.assertEquals(13, jobs.size());
+        Assert.assertEquals(13L, history.getTotal().longValue()); //non-running total owned by test user
+        List<String> expectedJobTypes = new ArrayList<>();
+        expectedJobTypes.add("export");
+        expectedJobTypes.add("conflate");
+        expectedJobTypes.add("clip");
+        for (JobStatusResponse j : jobs) {
+            Assert.assertTrue(("complete").equalsIgnoreCase(j.getStatus()));
+            Assert.assertTrue((expectedJobTypes).contains(j.getJobType()));
+        }
+    }
+
+    @Test
+    @Category(UnitTest.class)
+    public void testHistoryFilterStatusBad() throws Exception {
+        Response response = target("/history")
+                .queryParam("status", "foo")
+                .queryParam("limit", 50)
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        Assert.assertEquals(400, response.getStatus());
+    }
+
+    @Test
+    @Category(UnitTest.class)
+    public void testHistoryFilterTypeBad() throws Exception {
+        Response response = target("/history")
+                .queryParam("jobType", "bar")
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        Assert.assertEquals(400, response.getStatus());
+    }
 
+    @Test
+    @Category(UnitTest.class)
+    public void testRunning() throws Exception {
+        Response response = target("/running")
+                .request(MediaType.APPLICATION_JSON)
+                .get();
+        String actualResult = response.readEntity(String.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        List<JobStatusResponse> jobs = objectMapper.readValue(actualResult, new TypeReference<List<JobStatusResponse>>(){});
+        Assert.assertEquals(5, jobs.size());
+        for (JobStatusResponse j : jobs) {
+            Assert.assertNull(j.getStatus());
+            Assert.assertNotNull(j.getPercentComplete());
+        }
+    }
+
+}
Clone this wiki locally