Skip to content

Commit a006f10

Browse files
authored
Merge pull request #463 from Breeding-Insight/bug/BI-2632
[BI-2632] Germplasm download from single list no longer working
2 parents 6b146e1 + 3f37b4f commit a006f10

2 files changed

Lines changed: 56 additions & 0 deletions

File tree

src/main/java/org/breedinginsight/brapi/v2/BrAPIGermplasmController.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,25 @@ public HttpResponse<Response<DataResponse<List<BrAPIGermplasm>>>> getGermplasm(
221221
return HttpResponse.status(HttpStatus.UNPROCESSABLE_ENTITY, "Error parsing requested date format");
222222
}
223223
}
224+
@Get("/programs/{programId}/germplasm/lists/{listDbId}/export{?fileExtension}")
225+
@Produces(value = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
226+
@ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.PROGRAM_SCOPED_ROLES})
227+
public HttpResponse<StreamedFile> germplasmListExport(
228+
@PathVariable("programId") UUID programId, @PathVariable("listDbId") String listDbId, @QueryValue(defaultValue = "XLSX") String fileExtension) {
229+
String downloadErrorMessage = "An error occurred while generating the download file. Contact the development team at bidevteam@cornell.edu.";
230+
try {
231+
FileType extension = Enum.valueOf(FileType.class, fileExtension);
232+
DownloadFile germplasmListFile = germplasmService.exportGermplasmList(programId, listDbId, extension);
233+
HttpResponse<StreamedFile> germplasmListExport = HttpResponse.ok(germplasmListFile.getStreamedFile()).header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename="+germplasmListFile.getFileName()+extension.getExtension());
234+
return germplasmListExport;
235+
}
236+
catch (Exception e) {
237+
log.info(e.getMessage(), e);
238+
e.printStackTrace();
239+
HttpResponse response = HttpResponse.status(HttpStatus.INTERNAL_SERVER_ERROR, downloadErrorMessage).contentType(MediaType.TEXT_PLAIN).body(downloadErrorMessage);
240+
return response;
241+
}
242+
}
224243

225244
@Get("/programs/{programId}/germplasm/export{?fileExtension,list}")
226245
@Produces(value = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")

src/test/java/org/breedinginsight/brapi/v2/GermplasmControllerIntegrationTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,22 @@
2525
import org.breedinginsight.model.Program;
2626
import org.breedinginsight.model.Species;
2727
import org.breedinginsight.services.SpeciesService;
28+
import org.breedinginsight.utilities.FileUtil;
2829
import org.breedinginsight.utilities.response.mappers.GermplasmQueryMapper;
2930
import org.jooq.DSLContext;
3031
import org.junit.jupiter.api.*;
32+
import org.junit.jupiter.params.ParameterizedTest;
33+
import org.junit.jupiter.params.provider.CsvSource;
34+
import tech.tablesaw.api.Table;
3135

3236
import javax.inject.Inject;
37+
import java.io.ByteArrayInputStream;
3338
import java.io.File;
3439
import java.time.OffsetDateTime;
3540
import java.util.ArrayList;
3641
import java.util.List;
3742
import java.util.Map;
43+
import java.util.Objects;
3844

3945
import static io.micronaut.http.HttpRequest.GET;
4046
import static io.micronaut.http.HttpRequest.POST;
@@ -237,7 +243,38 @@ public void getAllGermplasmListsSuccess() {
237243
}
238244
}
239245
}
246+
@ParameterizedTest
247+
@CsvSource(value = {"CSV", "XLSX", "XLS"})
248+
@SneakyThrows
249+
public void germplasmListExport(String extension) {
250+
String programId = validProgram.getId().toString();
251+
String germplasmListDbId = fetchGermplasmListDbId(programId);
252+
253+
// Build the endpoint to get germplasm by germplasm list.
254+
String endpoint = String.format("/programs/%s/germplasm/lists/%s/export?fileExtension=%s", programId, germplasmListDbId, extension);
255+
256+
// Get germplasm by list.
257+
Flowable<HttpResponse<byte[]>> call = client.exchange(
258+
GET(endpoint).cookie(new NettyCookie("phylo-token", "test-registered-user")), byte[].class
259+
);
240260

261+
HttpResponse<byte[]> response = call.blockingFirst();
262+
263+
assertEquals(HttpStatus.OK, response.getStatus());
264+
265+
266+
ByteArrayInputStream bodyStream = new ByteArrayInputStream(Objects.requireNonNull(response.body()));
267+
268+
Table download = Table.create();
269+
if (extension.equals("CSV")) {
270+
download = FileUtil.parseTableFromCsv(bodyStream);
271+
}
272+
if (extension.equals("XLS") || extension.equals("XLSX")) {
273+
download = FileUtil.parseTableFromExcel(bodyStream, 0);
274+
}
275+
int dataSize = download.rowCount();
276+
assertEquals(3, dataSize, "Wrong number of germplasm were returned");
277+
}
241278
@Test
242279
@SneakyThrows
243280
public void getAllGermplasmByListSuccess() {

0 commit comments

Comments
 (0)