diff --git a/server/src/main/java/au/org/aodn/ogcapi/server/processes/RestServices.java b/server/src/main/java/au/org/aodn/ogcapi/server/processes/RestServices.java index 464b1225..97cd0e1e 100644 --- a/server/src/main/java/au/org/aodn/ogcapi/server/processes/RestServices.java +++ b/server/src/main/java/au/org/aodn/ogcapi/server/processes/RestServices.java @@ -81,8 +81,16 @@ public ResponseEntity downloadData( parameters.put(DatasetDownloadEnums.Parameter.UUID.getValue(), id); parameters.put(DatasetDownloadEnums.Parameter.START_DATE.getValue(), startDate); parameters.put(DatasetDownloadEnums.Parameter.END_DATE.getValue(), endDate); - parameters.put(DatasetDownloadEnums.Parameter.MULTI_POLYGON.getValue(), objectMapper.writeValueAsString(polygons)); parameters.put(DatasetDownloadEnums.Parameter.RECIPIENT.getValue(), recipient); + if (polygons == null || polygons.toString().isEmpty()) { + throw new IllegalArgumentException("Polygons parameter should now be null. If users didn't specify polygons, a 'non-specified' should be sent."); + + // String (e.g. "non-specified") is working weird with function ObjectMapper.writeValueAsString(), so handle it separately + } else if (polygons.toString().equals("non-specified")) { + parameters.put(DatasetDownloadEnums.Parameter.MULTI_POLYGON.getValue(), polygons.toString()); + } else { + parameters.put(DatasetDownloadEnums.Parameter.MULTI_POLYGON.getValue(), objectMapper.writeValueAsString(polygons)); + } parameters.put( DatasetDownloadEnums.Parameter.TYPE.getValue(), diff --git a/server/src/test/java/au/org/aodn/ogcapi/server/processes/RestServicesTest.java b/server/src/test/java/au/org/aodn/ogcapi/server/processes/RestServicesTest.java index 43275fa6..18530f1f 100644 --- a/server/src/test/java/au/org/aodn/ogcapi/server/processes/RestServicesTest.java +++ b/server/src/test/java/au/org/aodn/ogcapi/server/processes/RestServicesTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -68,4 +69,27 @@ public void testDownloadDataJsonProcessingException() throws JsonProcessingExcep assertEquals("Error", e.getMessage()); } } + + @Test + public void testDownloadDataCapturesSubmitJobRequest() throws JsonProcessingException { + // Arrange + String jobId = "12345"; + SubmitJobResponse submitJobResponse = SubmitJobResponse.builder().jobId(jobId).build(); + when(batchClient.submitJob(any(SubmitJobRequest.class))).thenReturn(submitJobResponse); + when(objectMapper.writeValueAsString(any())).thenReturn("test-multipolygon"); + + // Act + ResponseEntity response = restServices.downloadData( + "test-uuid", "2023-01-01", "2023-01-31", "non-specified", "test@example.com"); + + // Capture the submitted request + ArgumentCaptor captor = + ArgumentCaptor.forClass(SubmitJobRequest.class); + verify(batchClient, times(1)).submitJob(captor.capture()); + SubmitJobRequest captured = captor.getValue(); + + // Assert relevant parameters + assertEquals("non-specified", captured.parameters().get("multi_polygon")); + assertEquals(ResponseEntity.ok("Job submitted with ID: " + jobId), response); + } }