From 75fdd2897b4ec6c0c6a6e78e81722a19a7977604 Mon Sep 17 00:00:00 2001 From: Nick Grosenbacher Date: Mon, 1 Apr 2024 18:54:07 -0400 Subject: [PATCH] SWC-6755 - Fix null storage location Long value when uploading to a wiki --- .../upload/MultipartUploaderImplV2.java | 18 +++++++- .../upload/MultipartUploaderImplV2Test.java | 44 ++++++++++++++++++- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploaderImplV2.java b/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploaderImplV2.java index e57d3f0cc3..59aebb4858 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploaderImplV2.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploaderImplV2.java @@ -7,9 +7,11 @@ import org.sagebionetworks.web.client.DateTimeUtils; import org.sagebionetworks.web.client.GWTWrapper; import org.sagebionetworks.web.client.SynapseJSNIUtils; +import org.sagebionetworks.web.client.SynapseProperties; import org.sagebionetworks.web.client.jsinterop.Promise; import org.sagebionetworks.web.client.jsinterop.SRC.SynapseClient.FileUploadComplete; import org.sagebionetworks.web.client.security.AuthenticationController; +import org.sagebionetworks.web.shared.WebConstants; /** * Perform a multi-part parallel upload utilizing code from the Synapse React Client @@ -36,6 +38,7 @@ public class MultipartUploaderImplV2 implements MultipartUploader { DateTimeUtils dateTimeUtils; AuthenticationController auth; SRCUploadFileWrapper srcUploadFileWrapper; + private SynapseProperties synapseProperties; @Inject public MultipartUploaderImplV2( @@ -43,7 +46,8 @@ public MultipartUploaderImplV2( GWTWrapper gwt, SynapseJSNIUtils synapseJsniUtils, DateTimeUtils dateTimeUtils, - SRCUploadFileWrapper srcUploadFileWrapper + SRCUploadFileWrapper srcUploadFileWrapper, + SynapseProperties synapseProperties ) { super(); this.auth = auth; @@ -51,6 +55,7 @@ public MultipartUploaderImplV2( this.percentFormat = gwt.getNumberFormat("##"); this.dateTimeUtils = dateTimeUtils; this.srcUploadFileWrapper = srcUploadFileWrapper; + this.synapseProperties = synapseProperties; } @Override @@ -62,6 +67,15 @@ public void uploadFile( final Long storageLocationId, HasAttachHandlers view ) { + Long defaultStorageId = Long.parseLong( + synapseProperties.getSynapseProperty( + WebConstants.DEFAULT_STORAGE_ID_PROPERTY_KEY + ) + ); + + int storageLocationIntValue = storageLocationId == null + ? defaultStorageId.intValue() + : storageLocationId.intValue(); this.blob = blob; this.view = view; isCanceled = false; @@ -76,7 +90,7 @@ public void uploadFile( auth.getCurrentUserAccessToken(), fileName, blob, - storageLocationId.intValue(), + storageLocationIntValue, contentType, progress -> { double currentProgress = progress.value / progress.total; diff --git a/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderImplV2Test.java b/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderImplV2Test.java index a085b694b9..632a7bdccf 100644 --- a/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderImplV2Test.java +++ b/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderImplV2Test.java @@ -4,6 +4,7 @@ import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; @@ -22,6 +23,7 @@ import org.sagebionetworks.web.client.GWTWrapper; import org.sagebionetworks.web.client.ProgressCallback; import org.sagebionetworks.web.client.SynapseJSNIUtils; +import org.sagebionetworks.web.client.SynapseProperties; import org.sagebionetworks.web.client.jsinterop.Promise; import org.sagebionetworks.web.client.jsinterop.Promise.FunctionParam; import org.sagebionetworks.web.client.jsinterop.SRC.SynapseClient.FileUploadComplete; @@ -66,6 +68,9 @@ public class MultipartUploaderImplV2Test { @Mock SRCUploadFileWrapper mockSRCUploadFileWrapper; + @Mock + SynapseProperties mockSynapseProperties; + @Mock Promise mockPromise; @@ -83,6 +88,7 @@ public class MultipartUploaderImplV2Test { public static final double FILE_SIZE = 9281; public static final String FILE_NAME = "file.txt"; public static final String CONTENT_TYPE = "text/plain"; + public static final long defaultStorageLocationId = 1L; @Before public void before() throws Exception { @@ -104,12 +110,19 @@ public void before() throws Exception { FILE_SIZE ); + when( + mockSynapseProperties.getSynapseProperty( + WebConstants.DEFAULT_STORAGE_ID_PROPERTY_KEY + ) + ).thenReturn(String.valueOf(defaultStorageLocationId)); + uploader = new MultipartUploaderImplV2( mockAuth, gwt, synapseJsniUtils, mockDateTimeUtils, - mockSRCUploadFileWrapper + mockSRCUploadFileWrapper, + mockSynapseProperties ); when(mockView.isAttached()).thenReturn(true); @@ -152,6 +165,35 @@ public void testDirectUploadSinglePart() throws Exception { verify(mockHandler).uploadSuccess(RESULT_FILE_HANDLE_ID); } + @Test + public void testDirectUploadEmptyStorageLocationId() throws Exception { + uploader.uploadFile( + FILE_NAME, + CONTENT_TYPE, + mockFileBlob, + mockHandler, + null, + mockView + ); + + verify(mockPromise).then(promiseHandlerCaptor.capture()); + FunctionParam thenHandler = promiseHandlerCaptor.getValue(); + + thenHandler.exec(mockFileUploadComplete); + + verify(mockSRCUploadFileWrapper).uploadFile( + anyString(), + anyString(), + any(), + eq((int) defaultStorageLocationId), + anyString(), + any(), + any() + ); + // the handler should get the id. + verify(mockHandler).uploadSuccess(RESULT_FILE_HANDLE_ID); + } + @Test public void testUploadCanceled() throws Exception { uploader.uploadFile(