Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,18 @@ public ResponseEntity<String> downloadData(

private String submitJob(String jobName, String jobQueue, String jobDefinition, Map<String, String> parameters) {

// Filter out null or empty parameter values before submitting to AWS Batch.
// AWS Batch returns "Parameter values must be provided" when the job definition
// declares parameters but some submitted values are null/empty.
if (parameters != null) {
var suggestedCitation = parameters.get(DatasetDownloadEnums.Parameter.SUGGESTED_CITATION.getValue());
// empty suggested citation is acceptable since it may be from external orgs
if (suggestedCitation == null || suggestedCitation.isEmpty()) {
log.warn("Suggested citation is null or empty for job '{}'. Submitting with unavailable as value.", jobName);
parameters.replace(DatasetDownloadEnums.Parameter.SUGGESTED_CITATION.getValue(), "unavailable");
}
}

SubmitJobRequest submitJobRequest = SubmitJobRequest.builder()
.jobName(jobName)
.jobQueue(jobQueue)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import au.org.aodn.ogcapi.server.core.model.enumeration.DatasetDownloadEnums;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -92,4 +93,27 @@ public void testDownloadDataCapturesSubmitJobRequest() throws JsonProcessingExce
assertEquals("non-specified", captured.parameters().get("multi_polygon"));
assertEquals(ResponseEntity.ok("Job submitted with ID: " + jobId), response);
}

@Test
public void submitJobReplacesEmptySuggestedCitationWithUnavailable() throws JsonProcessingException {
// Arrange
String jobId = "67890";
SubmitJobResponse submitJobResponse = SubmitJobResponse.builder().jobId(jobId).build();
when(batchClient.submitJob(any(SubmitJobRequest.class))).thenReturn(submitJobResponse);
// polygons set to 'non-specified' to avoid objectMapper serialization

// Act: pass empty suggestedCitation
ResponseEntity<String> response = restServices.downloadData(
"test-uuid", "test-dname","2023-01-01", "2023-01-31", "non-specified", "test@example.com",
"Test Ocean Data Collection", "https://metadata.imas.utas.edu.au/.../test-uuid-123", "", "geotiff");

// Capture the submitted request
ArgumentCaptor<SubmitJobRequest> captor = ArgumentCaptor.forClass(SubmitJobRequest.class);
verify(batchClient, times(1)).submitJob(captor.capture());
SubmitJobRequest captured = captor.getValue();

String suggestedKey = DatasetDownloadEnums.Parameter.SUGGESTED_CITATION.getValue();
assertEquals("unavailable", captured.parameters().get(suggestedKey));
assertEquals(ResponseEntity.ok("Job submitted with ID: " + jobId), response);
}
}
Loading