-
Notifications
You must be signed in to change notification settings - Fork 37
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
SWC-6770: migrate Provenance v2 visualization to feature flag
- Loading branch information
Showing
15 changed files
with
240 additions
and
22 deletions.
There are no files selected for viewing
38 changes: 38 additions & 0 deletions
38
src/main/java/org/sagebionetworks/web/client/FeatureFlagConfig.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package org.sagebionetworks.web.client; | ||
|
||
import com.google.gwt.json.client.JSONObject; | ||
import com.google.gwt.json.client.JSONParser; | ||
import com.google.gwt.json.client.JSONValue; | ||
import org.sagebionetworks.web.client.cookie.CookieProvider; | ||
|
||
public class FeatureFlagConfig { | ||
|
||
CookieProvider cookieProvider; | ||
private JSONObject config; | ||
|
||
public FeatureFlagConfig(String json, CookieProvider cookieProvider) { | ||
JSONValue parsed = JSONParser.parseStrict(json); | ||
config = parsed.isObject(); | ||
this.cookieProvider = cookieProvider; | ||
} | ||
|
||
/** | ||
* Constructor for testing with dependency injection | ||
* The required native library for GWT is not available in JUnit | ||
*/ | ||
public FeatureFlagConfig(JSONObject config, CookieProvider cookieProvider) { | ||
this.config = config; | ||
this.cookieProvider = cookieProvider; | ||
} | ||
|
||
public boolean isFeatureEnabled(String featureName) { | ||
try { | ||
return ( | ||
DisplayUtils.isInTestWebsite(cookieProvider) || | ||
config.get(featureName).isBoolean().booleanValue() | ||
); | ||
} catch (Exception e) { | ||
return DisplayUtils.isInTestWebsite(cookieProvider); | ||
} | ||
} | ||
} |
24 changes: 24 additions & 0 deletions
24
src/main/java/org/sagebionetworks/web/client/FeatureFlagConfigProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package org.sagebionetworks.web.client; | ||
|
||
import com.google.inject.Inject; | ||
import com.google.inject.Provider; | ||
import org.sagebionetworks.web.client.cookie.CookieProvider; | ||
import org.sagebionetworks.web.shared.WebConstants; | ||
|
||
public class FeatureFlagConfigProvider implements Provider<FeatureFlagConfig> { | ||
|
||
CookieProvider cookieProvider; | ||
|
||
@Inject | ||
public FeatureFlagConfigProvider(CookieProvider cookieProvider) { | ||
this.cookieProvider = cookieProvider; | ||
} | ||
|
||
@Override | ||
public FeatureFlagConfig get() { | ||
return new FeatureFlagConfig( | ||
cookieProvider.getCookie(WebConstants.PORTAL_FEATURE_FLAG), | ||
cookieProvider | ||
); | ||
} | ||
} |
15 changes: 15 additions & 0 deletions
15
src/main/java/org/sagebionetworks/web/client/FeatureFlagKey.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package org.sagebionetworks.web.client; | ||
|
||
public enum FeatureFlagKey { | ||
PROVENANCE_V2_VISUALIZATION("Provenance v2 visualization"); | ||
|
||
private final String key; | ||
|
||
FeatureFlagKey(String key) { | ||
this.key = key; | ||
} | ||
|
||
public String getKey() { | ||
return key; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
73 changes: 73 additions & 0 deletions
73
src/test/java/org/sagebionetworks/web/client/FeatureFlagConfigTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
package org.sagebionetworks.web.client; | ||
|
||
import static org.junit.Assert.*; | ||
import static org.mockito.Mockito.*; | ||
|
||
import com.google.gwt.json.client.JSONBoolean; | ||
import com.google.gwt.json.client.JSONObject; | ||
import org.junit.Before; | ||
import org.junit.Test; | ||
import org.mockito.Mock; | ||
import org.mockito.MockitoAnnotations; | ||
import org.sagebionetworks.web.client.cookie.CookieProvider; | ||
|
||
public class FeatureFlagConfigTest { | ||
|
||
@Mock | ||
CookieProvider mockCookieProvider; | ||
|
||
@Mock | ||
JSONObject mockJsonObject; | ||
|
||
private FeatureFlagConfig featureFlagConfig; | ||
private static final String FEATURE_NAME = "testFeature"; | ||
|
||
@Before | ||
public void setUp() { | ||
MockitoAnnotations.initMocks(this); | ||
} | ||
|
||
@Test | ||
public void testFeatureEnabled() { | ||
when(mockJsonObject.get(FEATURE_NAME)) | ||
.thenReturn(JSONBoolean.getInstance(true)); | ||
featureFlagConfig = | ||
new FeatureFlagConfig(mockJsonObject, mockCookieProvider); | ||
|
||
assertTrue(featureFlagConfig.isFeatureEnabled(FEATURE_NAME)); | ||
} | ||
|
||
@Test | ||
public void testFeatureDisabled() { | ||
when(mockJsonObject.get(FEATURE_NAME)) | ||
.thenReturn(JSONBoolean.getInstance(false)); | ||
featureFlagConfig = | ||
new FeatureFlagConfig(mockJsonObject, mockCookieProvider); | ||
|
||
assertFalse(featureFlagConfig.isFeatureEnabled(FEATURE_NAME)); | ||
} | ||
|
||
@Test | ||
public void testFeatureDisabledButExperimentalModeEnabled() { | ||
when(mockCookieProvider.getCookie(eq("SynapseTestWebsite"))) | ||
.thenReturn("true"); | ||
when(mockJsonObject.get(FEATURE_NAME)) | ||
.thenReturn(JSONBoolean.getInstance(false)); | ||
featureFlagConfig = | ||
new FeatureFlagConfig(mockJsonObject, mockCookieProvider); | ||
|
||
assertTrue(featureFlagConfig.isFeatureEnabled(FEATURE_NAME)); | ||
} | ||
|
||
@Test | ||
public void testExperimentalModeValueReturnedOnException() { | ||
when(mockJsonObject.get(FEATURE_NAME)) | ||
.thenThrow(new RuntimeException("Test exception")); | ||
when(mockCookieProvider.getCookie(eq("SynapseTestWebsite"))) | ||
.thenReturn("true"); | ||
featureFlagConfig = | ||
new FeatureFlagConfig(mockJsonObject, mockCookieProvider); | ||
|
||
assertTrue(featureFlagConfig.isFeatureEnabled(FEATURE_NAME)); | ||
} | ||
} |
Oops, something went wrong.