From 8e181e105fca5ed4638066007b93409050e38561 Mon Sep 17 00:00:00 2001 From: Ezequiel Valencia Date: Fri, 3 Jan 2025 07:36:22 -0500 Subject: [PATCH] Test For File Uploading --- .../restq/apiclient/FieldDataAPITest.java | 68 ++++++++++++++---- .../src/test/resources/flybrain-035.tif | Bin 0 -> 196839 bytes 2 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 vcell-rest/src/test/resources/flybrain-035.tif diff --git a/vcell-rest/src/test/java/org/vcell/restq/apiclient/FieldDataAPITest.java b/vcell-rest/src/test/java/org/vcell/restq/apiclient/FieldDataAPITest.java index 4a1a89748e..215ebd264b 100644 --- a/vcell-rest/src/test/java/org/vcell/restq/apiclient/FieldDataAPITest.java +++ b/vcell-rest/src/test/java/org/vcell/restq/apiclient/FieldDataAPITest.java @@ -6,6 +6,7 @@ import io.quarkus.test.keycloak.client.KeycloakTestClient; import jakarta.inject.Inject; import org.apache.commons.io.FileUtils; +import org.eclipse.jetty.http.HttpStatus; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.junit.jupiter.api.*; import org.vcell.restclient.ApiClient; @@ -13,14 +14,16 @@ import org.vcell.restclient.api.FieldDataResourceApi; import org.vcell.restclient.api.UsersResourceApi; import org.vcell.restclient.model.AnalyzedResultsFromFieldData; -import org.vcell.restclient.model.FieldDataInfo; -import org.vcell.restclient.model.FieldDataReferences; +import org.vcell.restclient.model.FieldDataReference; import org.vcell.restclient.model.FieldDataSaveResults; +import org.vcell.restclient.model.FieldDataShape; import org.vcell.restq.TestEndpointUtils; import org.vcell.restq.config.CDIVCellConfigProvider; import org.vcell.restq.db.AgroalConnectionFactory; -import org.vcell.util.*; -import org.vcell.util.document.KeyValue; +import org.vcell.util.DataAccessException; +import org.vcell.util.Extent; +import org.vcell.util.ISize; +import org.vcell.util.Origin; import java.io.File; import java.io.IOException; @@ -114,10 +117,10 @@ public void testAddAndDeleteFieldDataFromFile() throws ApiException { saveFieldDataFromFile.setShortSpecData(matrix); saveFieldDataFromFile.varNames(varNames); saveFieldDataFromFile.times(times); saveFieldDataFromFile.origin(Origin.originToDTO(origin)); saveFieldDataFromFile.extent(Extent.extentToDTO(extent)); saveFieldDataFromFile.isize(ISize.iSizeToDTO(iSize)); saveFieldDataFromFile.annotation("test annotation"); saveFieldDataFromFile.name("TestFile"); - FieldDataSaveResults results = fieldDataResourceApi.createNewFieldDataFromFileAlreadyAnalyzed(saveFieldDataFromFile); + FieldDataSaveResults results = fieldDataResourceApi.createFieldDataFromAnalyzedFile(saveFieldDataFromFile); // File is Saved on File System - FieldDataInfo fieldDataInfo = fieldDataResourceApi.getFieldDataFromID(results.getFieldDataID()); + FieldDataShape fieldDataInfo = fieldDataResourceApi.getFieldDataShapeFromID(results.getFieldDataID()); Assertions.assertEquals(saveFieldDataFromFile.getName(), results.getFieldDataName()); Assertions.assertTrue(origin.compareEqual(Origin.dtoToOrigin(fieldDataInfo.getOrigin()))); Assertions.assertTrue(extent.compareEqual(Extent.dtoToExtent(fieldDataInfo.getExtent()))); @@ -125,10 +128,10 @@ public void testAddAndDeleteFieldDataFromFile() throws ApiException { Assertions.assertEquals(times, fieldDataInfo.getTimes()); // It's in the DB - FieldDataReferences references = fieldDataResourceApi.getAllFieldDataIDs(); - Assertions.assertEquals(saveFieldDataFromFile.getAnnotation(), references.getExternalDataAnnotations().get(0)); - Assertions.assertEquals(results.getFieldDataID(), references.getExternalDataIdentifiers().get(0).getKey().getValue().toString()); - Assertions.assertEquals(0, references.getExternalDataIDSimRefs().size()); + List references = fieldDataResourceApi.getAllFieldDataIDs(); + Assertions.assertEquals(saveFieldDataFromFile.getAnnotation(), references.get(0).getExternalDataAnnotation()); + Assertions.assertEquals(results.getFieldDataID(), references.get(0).getExternalDataIdentifier().getKey().getValue().toString()); + Assertions.assertEquals(0, references.get(0).getExternalDataIDSimRef().size()); /////////////////////// // Delete Field Data // @@ -137,16 +140,53 @@ public void testAddAndDeleteFieldDataFromFile() throws ApiException { // No Longer on File System try{ - fieldDataResourceApi.getFieldDataFromID(results.getFieldDataID()); + fieldDataResourceApi.getFieldDataShapeFromID(results.getFieldDataID()); } catch (ApiException e){ Assertions.assertEquals(404, e.getCode()); } // No Longer in DB references = fieldDataResourceApi.getAllFieldDataIDs(); - Assertions.assertEquals(0, references.getExternalDataIdentifiers().size()); - Assertions.assertEquals(0, references.getExternalDataAnnotations().size()); - Assertions.assertEquals(0, references.getExternalDataIDSimRefs().size()); + Assertions.assertEquals(0, references.size()); + } + + + @Test + public void testFileUploading() throws ApiException, IOException { + FieldDataResourceApi fieldDataResourceApi = new FieldDataResourceApi(aliceAPIClient); + File testFile = TestEndpointUtils.getResourceFile("/flybrain-035.tif"); + try{ + fieldDataResourceApi.analyzeFieldDataFile(testFile, "invalid N@me #Ezequiel"); + } catch (ApiException e){ + Assertions.assertEquals(HttpStatus.BAD_REQUEST_400, e.getCode()); + } + + AnalyzedResultsFromFieldData results = fieldDataResourceApi.analyzeFieldDataFile(testFile, "bob"); + + Assertions.assertNotNull(results); + Assertions.assertNotNull(results.getShortSpecData()); + + FieldDataSaveResults saveResults = fieldDataResourceApi.createFieldDataFromAnalyzedFile(results); + Assertions.assertNotNull(saveResults); + + FieldDataShape fieldDataInfo = fieldDataResourceApi.getFieldDataShapeFromID(saveResults.getFieldDataID()); + Assertions.assertNotNull(fieldDataInfo); + Assertions.assertTrue(Origin.dtoToOrigin(fieldDataInfo.getOrigin()).compareEqual(new Origin(0.0, 0.0, 0.0))); + Assertions.assertTrue(Extent.dtoToExtent(fieldDataInfo.getExtent()).compareEqual(new Extent(684.9333393978472, 684.9333393978472, 1))); + Assertions.assertTrue(ISize.dtoToISize(fieldDataInfo.getIsize()).compareEqual(new ISize(256, 256, 1))); + Assertions.assertEquals(1, fieldDataInfo.getTimes().size()); + + fieldDataResourceApi.deleteFieldData(saveResults.getFieldDataID()); + + try{ + fieldDataResourceApi.getFieldDataShapeFromID(saveResults.getFieldDataID()); + } catch (ApiException e){ + Assertions.assertEquals(404, e.getCode()); + } + + // No Longer in DB + List references = fieldDataResourceApi.getAllFieldDataIDs(); + Assertions.assertEquals(0, references.size()); } } diff --git a/vcell-rest/src/test/resources/flybrain-035.tif b/vcell-rest/src/test/resources/flybrain-035.tif new file mode 100644 index 0000000000000000000000000000000000000000..5c5d889f677a9ef9c06e52573dfe63b6b2eb572a GIT binary patch literal 196839 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