diff --git a/src/main/java/org/sagebionetworks/web/client/FeatureFlagKey.java b/src/main/java/org/sagebionetworks/web/client/FeatureFlagKey.java index 489779ba58..0960d6cddd 100644 --- a/src/main/java/org/sagebionetworks/web/client/FeatureFlagKey.java +++ b/src/main/java/org/sagebionetworks/web/client/FeatureFlagKey.java @@ -37,6 +37,9 @@ public enum FeatureFlagKey { // If enabled, use the re-implemented ACL Editor for entities REACT_ENTITY_ACL_EDITOR("REACT_ENTITY_ACL_EDITOR"), + // If enabled, sharing settings will appear in a dialog immediately after uploading one or more files. + SHOW_SHARING_SETTINGS_AFTER_UPLOAD("SHOW_SHARING_SETTINGS_AFTER_UPLOAD"), + // Last flag is used only for tests TEST_FLAG_ONLY("TEST_FLAG_ONLY"); diff --git a/src/main/java/org/sagebionetworks/web/client/widget/entity/download/UploadDialogWidget.java b/src/main/java/org/sagebionetworks/web/client/widget/entity/download/UploadDialogWidget.java index af2608df27..527f41c389 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/entity/download/UploadDialogWidget.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/entity/download/UploadDialogWidget.java @@ -4,6 +4,8 @@ import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import org.sagebionetworks.repo.model.Entity; +import org.sagebionetworks.web.client.FeatureFlagConfig; +import org.sagebionetworks.web.client.FeatureFlagKey; import org.sagebionetworks.web.client.events.EntityUpdatedEvent; import org.sagebionetworks.web.client.utils.CallbackP; import org.sagebionetworks.web.client.widget.SynapseWidgetPresenter; @@ -16,18 +18,21 @@ public class UploadDialogWidget private Uploader uploader; private final EventBus eventBus; private final EntityAccessControlListModalWidget entityAclEditor; + private final FeatureFlagConfig featureFlagConfig; @Inject public UploadDialogWidget( UploadDialogWidgetView view, Uploader uploader, EventBus eventBus, - EntityAccessControlListModalWidget entityAccessControlListModalWidget + EntityAccessControlListModalWidget entityAccessControlListModalWidget, + FeatureFlagConfig featureFlagConfig ) { this.view = view; this.uploader = uploader; this.eventBus = eventBus; this.entityAclEditor = entityAccessControlListModalWidget; + this.featureFlagConfig = featureFlagConfig; view.setPresenter(this); } @@ -54,7 +59,12 @@ public void configure( // add handlers for closing the window uploader.setSuccessHandler(benefactorId -> { view.hideDialog(); - if (benefactorId != null) { + if ( + benefactorId != null && + featureFlagConfig.isFeatureEnabled( + FeatureFlagKey.SHOW_SHARING_SETTINGS_AFTER_UPLOAD + ) + ) { entityAclEditor.configure( benefactorId, () -> eventBus.fireEvent(new EntityUpdatedEvent(benefactorId)), diff --git a/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/download/UploadDialogTest.java b/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/download/UploadDialogTest.java index 8aed2efd02..5c2fe4316e 100644 --- a/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/download/UploadDialogTest.java +++ b/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/download/UploadDialogTest.java @@ -1,9 +1,12 @@ package org.sagebionetworks.web.unitclient.widget.entity.download; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import com.google.gwt.event.shared.EventBus; import org.junit.Before; @@ -14,6 +17,8 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.sagebionetworks.repo.model.Entity; +import org.sagebionetworks.web.client.FeatureFlagConfig; +import org.sagebionetworks.web.client.FeatureFlagKey; import org.sagebionetworks.web.client.events.CancelHandler; import org.sagebionetworks.web.client.events.UploadSuccessHandler; import org.sagebionetworks.web.client.jsinterop.EntityAclEditorModalProps; @@ -38,6 +43,9 @@ public class UploadDialogTest { @Mock EntityAccessControlListModalWidget mockEntityAccessControlListModalWidget; + @Mock + FeatureFlagConfig mockFeatureFlagConfig; + @Captor ArgumentCaptor uploadSuccessCaptor; @@ -55,12 +63,58 @@ public void before() throws Exception { view, mockUploader, mockEventBus, - mockEntityAccessControlListModalWidget + mockEntityAccessControlListModalWidget, + mockFeatureFlagConfig ); } @Test public void testConfigure() { + when( + mockFeatureFlagConfig.isFeatureEnabled( + FeatureFlagKey.SHOW_SHARING_SETTINGS_AFTER_UPLOAD + ) + ) + .thenReturn(false); + + String title = "dialog title"; + Entity entity = mock(Entity.class); + String parentEntityId = "parent"; + CallbackP fileHandleIdCallback = mock(CallbackP.class); + boolean isEntity = true; + widget.configure( + title, + entity, + parentEntityId, + fileHandleIdCallback, + isEntity + ); + + verify(mockUploader) + .configure(entity, parentEntityId, fileHandleIdCallback, isEntity); + verify(view).configureDialog(eq(title), any()); + + verify(mockUploader).setSuccessHandler(uploadSuccessCaptor.capture()); + verify(mockUploader).setCancelHandler(any(CancelHandler.class)); + + // simulate a successful upload + String benefactorId = "syn123"; + uploadSuccessCaptor.getValue().onSuccessfulUpload(benefactorId); + verify(view).hideDialog(); + verify(mockEntityAccessControlListModalWidget, never()) + .configure(eq(benefactorId), any(), anyBoolean()); + verify(mockEntityAccessControlListModalWidget, never()).setOpen(true); + } + + @Test + public void testSharingSettingsFeatureEnabled() { + when( + mockFeatureFlagConfig.isFeatureEnabled( + FeatureFlagKey.SHOW_SHARING_SETTINGS_AFTER_UPLOAD + ) + ) + .thenReturn(true); + String title = "dialog title"; Entity entity = mock(Entity.class); String parentEntityId = "parent";