Skip to content

Commit

Permalink
SWC-6776 - Put feature in experimental mode under feature flag
Browse files Browse the repository at this point in the history
  • Loading branch information
nickgros committed Oct 4, 2024
1 parent 1226c24 commit c411df6
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}

Expand All @@ -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)),
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -38,6 +43,9 @@ public class UploadDialogTest {
@Mock
EntityAccessControlListModalWidget mockEntityAccessControlListModalWidget;

@Mock
FeatureFlagConfig mockFeatureFlagConfig;

@Captor
ArgumentCaptor<UploadSuccessHandler> uploadSuccessCaptor;

Expand All @@ -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<String> 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";
Expand Down

0 comments on commit c411df6

Please sign in to comment.