Skip to content

Commit 5487253

Browse files
committed
0.3.0
Signed-off-by: liran2000 <liran2000@gmail.com>
1 parent 6039699 commit 5487253

File tree

4 files changed

+40
-80
lines changed

4 files changed

+40
-80
lines changed

providers/statsig/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,4 @@ for more information.
7777
## Release Notes
7878

7979
### 0.3.0
80-
Migrated to according to [Migration guide](https://docs.statsig.com/server-core/migration-guides/java#java-migration-steps).
80+
Migrated to Java Core according to [Migration guide](https://docs.statsig.com/server-core/migration-guides/java#java-migration-steps).

providers/statsig/src/main/java/dev/openfeature/contrib/providers/statsig/ContextTransformer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ static StatsigUser transform(EvaluationContext ctx) {
2323
if (ctx.getTargetingKey() == null) {
2424
throw new TargetingKeyMissingError("targeting key is required.");
2525
}
26-
StatsigUser.Builder user = new StatsigUser.Builder()
27-
.setUserID(ctx.getTargetingKey());
26+
StatsigUser.Builder user = new StatsigUser.Builder().setUserID(ctx.getTargetingKey());
2827
Map<String, String> customMap = new HashMap<>();
2928
ctx.asObjectMap().forEach((k, v) -> {
3029
switch (k) {

providers/statsig/src/main/java/dev/openfeature/contrib/providers/statsig/StatsigProvider.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import dev.openfeature.sdk.ProviderEvaluation;
1313
import dev.openfeature.sdk.Structure;
1414
import dev.openfeature.sdk.Value;
15-
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
1615
import java.util.concurrent.CompletableFuture;
1716
import lombok.AllArgsConstructor;
1817
import lombok.Getter;
@@ -64,9 +63,6 @@ public Metadata getMetadata() {
6463

6564
@SneakyThrows
6665
@Override
67-
@SuppressFBWarnings(
68-
value = {"NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE"},
69-
justification = "reason can be null")
7066
public ProviderEvaluation<Boolean> getBooleanEvaluation(String key, Boolean defaultValue, EvaluationContext ctx) {
7167
StatsigUser user = ContextTransformer.transform(ctx);
7268
Boolean evaluatedValue = defaultValue;
@@ -76,11 +72,6 @@ public ProviderEvaluation<Boolean> getBooleanEvaluation(String key, Boolean defa
7672
FeatureGate featureGate = statsig.getFeatureGate(user, key);
7773
reason = featureGate.getEvaluationDetails().getReason();
7874
evaluatedValue = featureGate.getValue();
79-
80-
// in case of evaluation failure, remain with default value.
81-
// if (!assumeFailure(featureGate)) {
82-
// evaluatedValue = featureGate.getValue();
83-
// }
8475
} else {
8576
FeatureConfig featureConfig = parseFeatureConfig(ctx);
8677
switch (featureConfig.getType()) {
@@ -103,18 +94,6 @@ public ProviderEvaluation<Boolean> getBooleanEvaluation(String key, Boolean defa
10394
.build();
10495
}
10596

106-
/*
107-
https://github.com/statsig-io/java-server-sdk/issues/22#issuecomment-2002346349
108-
failure is assumed by reason, since success status is not returned.
109-
*/
110-
// private boolean assumeFailure(FeatureGate featureGate) {
111-
// EvaluationReason reason = featureGate.getEvaluationDetails().getReason();
112-
// return EvaluationReason.DEFAULT.equals(reason)
113-
// || EvaluationReason.UNINITIALIZED.equals(reason)
114-
// || EvaluationReason.UNRECOGNIZED.equals(reason)
115-
// || EvaluationReason.UNSUPPORTED.equals(reason);
116-
// }
117-
11897
@Override
11998
public ProviderEvaluation<String> getStringEvaluation(String key, String defaultValue, EvaluationContext ctx) {
12099
StatsigUser user = ContextTransformer.transform(ctx);

providers/statsig/src/test/java/dev/openfeature/contrib/providers/statsig/StatsigProviderTest.java

Lines changed: 38 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import static dev.openfeature.contrib.providers.statsig.ContextTransformer.CONTEXT_LOCALE;
88
import static dev.openfeature.contrib.providers.statsig.ContextTransformer.CONTEXT_PRIVATE_ATTRIBUTES;
99
import static dev.openfeature.contrib.providers.statsig.ContextTransformer.CONTEXT_USER_AGENT;
10-
import static org.apache.commons.lang3.builder.ToStringStyle.NO_CLASS_NAME_STYLE;
1110
import static org.junit.jupiter.api.Assertions.assertEquals;
1211
import static org.mockito.ArgumentMatchers.any;
1312
import static org.mockito.Mockito.doAnswer;
@@ -31,11 +30,9 @@
3130
import java.util.HashMap;
3231
import java.util.Map;
3332
import lombok.SneakyThrows;
34-
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
3533
import org.junit.jupiter.api.AfterAll;
3634
import org.junit.jupiter.api.BeforeAll;
3735
import org.junit.jupiter.api.Test;
38-
import org.junit.platform.commons.util.ReflectionUtils;
3936

4037
/**
4138
* StatsigProvider test, based on local config file evaluation. Configuration file test by statsig
@@ -64,12 +61,12 @@ class StatsigProviderTest {
6461
static void setUp() {
6562
String sdkKey = "test";
6663
StatsigOptions statsigOptions = new StatsigOptions.Builder()
67-
// .setLocalMode(true)
64+
// .setLocalMode(true)
6865
.build();
6966
StatsigProviderConfig statsigProviderConfig = StatsigProviderConfig.builder()
70-
.sdkKey(sdkKey)
71-
.options(statsigOptions)
72-
.build();
67+
.sdkKey(sdkKey)
68+
.options(statsigOptions)
69+
.build();
7370

7471
statsigProvider = spy(new StatsigProvider(statsigProviderConfig));
7572
OpenFeatureAPI.getInstance().setProviderAndWait(statsigProvider);
@@ -79,21 +76,7 @@ static void setUp() {
7976

8077
@SneakyThrows
8178
private static void buildFlags() {
82-
83-
boolean res = statsigProvider.getStatsig().checkGate(new StatsigUser.Builder()
84-
.setUserID(TARGETING_KEY)
85-
.build(), FLAG_NAME);
86-
87-
System.out.println("Initial flag evaluation: " + res);
88-
8979
statsigProvider.getStatsig().overrideGate(FLAG_NAME, true);
90-
91-
res = statsigProvider.getStatsig().checkGate(new StatsigUser.Builder()
92-
.setUserID(TARGETING_KEY)
93-
.build(), FLAG_NAME);
94-
95-
System.out.println("Overridden flag evaluation: " + res);
96-
9780
Map<String, Object> configMap = new HashMap<>();
9881
configMap.put("boolean", true);
9982
configMap.put("alias", "test");
@@ -111,14 +94,14 @@ private static void buildFlags() {
11194
when(dynamicConfig.getRuleID()).thenReturn("test-rule-id");
11295

11396
doAnswer(invocation -> {
114-
if ("object-config-name"
115-
.equals(invocation
116-
.getArgument(1, StatsigProvider.FeatureConfig.class)
117-
.getName())) {
118-
return dynamicConfig;
119-
}
120-
return invocation.callRealMethod();
121-
})
97+
if ("object-config-name"
98+
.equals(invocation
99+
.getArgument(1, StatsigProvider.FeatureConfig.class)
100+
.getName())) {
101+
return dynamicConfig;
102+
}
103+
return invocation.callRealMethod();
104+
})
122105
.when(statsigProvider)
123106
.fetchDynamicConfig(any(), any());
124107

@@ -129,14 +112,14 @@ private static void buildFlags() {
129112
when(layer.getRuleID()).thenReturn("test-rule-id");
130113

131114
doAnswer(invocation -> {
132-
if ("layer-name"
133-
.equals(invocation
134-
.getArgument(1, StatsigProvider.FeatureConfig.class)
135-
.getName())) {
136-
return layer;
137-
}
138-
return invocation.callRealMethod();
139-
})
115+
if ("layer-name"
116+
.equals(invocation
117+
.getArgument(1, StatsigProvider.FeatureConfig.class)
118+
.getName())) {
119+
return layer;
120+
}
121+
return invocation.callRealMethod();
122+
})
140123
.when(statsigProvider)
141124
.fetchLayer(any(), any());
142125
}
@@ -153,13 +136,12 @@ void getBooleanEvaluation() {
153136
assertEquals(false, flagEvaluationDetails.getValue());
154137
assertEquals("ERROR", flagEvaluationDetails.getReason());
155138

156-
boolean res = statsigProvider.getStatsig().checkGate(new StatsigUser.Builder()
157-
.setUserID(TARGETING_KEY)
158-
.build(), FLAG_NAME);
139+
boolean res = statsigProvider
140+
.getStatsig()
141+
.checkGate(new StatsigUser.Builder().setUserID(TARGETING_KEY).build(), FLAG_NAME);
159142

160143
System.out.println("Overridden flag evaluation: " + res);
161144

162-
163145
MutableContext evaluationContext = new MutableContext();
164146
evaluationContext.setTargetingKey(TARGETING_KEY);
165147
assertEquals(
@@ -220,7 +202,8 @@ void getObjectConfigEvaluation() {
220202
.getObjectEvaluation("dummy", new Value("fallback"), evaluationContext)
221203
.getValue();
222204

223-
String expectedObjectEvaluation = "{name=object-config-name, ruleID=test-rule-id, value={value-key=test-value}}";
205+
String expectedObjectEvaluation =
206+
"{name=object-config-name, ruleID=test-rule-id, value={value-key=test-value}}";
224207
assertEquals(
225208
expectedObjectEvaluation,
226209
objectEvaluation.asStructure().asObjectMap().toString());
@@ -238,8 +221,9 @@ void getObjectLayerEvaluation() {
238221
.getObjectEvaluation("dummy", new Value("fallback"), evaluationContext)
239222
.getValue();
240223

241-
String expectedObjectEvaluation = "{groupName=null, name=layer-name, allocatedExperiment=null, ruleID=test-rule-id, "
242-
+ "value={value-key=test-value}}";
224+
String expectedObjectEvaluation =
225+
"{groupName=null, name=layer-name, allocatedExperiment=null, ruleID=test-rule-id, "
226+
+ "value={value-key=test-value}}";
243227
assertEquals(
244228
expectedObjectEvaluation,
245229
objectEvaluation.asStructure().asObjectMap().toString());
@@ -429,15 +413,15 @@ void contextTransformTest() {
429413
HashMap<String, String> customMap = new HashMap<>();
430414
customMap.put(customPropertyKey, customPropertyValue);
431415
StatsigUser expectedUser = new StatsigUser.Builder()
432-
.setUserID(evaluationContext.getTargetingKey())
433-
.setEmail(email)
434-
.setCountry(country)
435-
.setUserAgent(userAgent)
436-
.setIp(ip)
437-
.setAppVersion(appVersion)
438-
.setPrivateAttributes(Collections.singletonMap(CONTEXT_LOCALE, locale))
439-
.setCustomIDs(customMap)
440-
.build();
416+
.setUserID(evaluationContext.getTargetingKey())
417+
.setEmail(email)
418+
.setCountry(country)
419+
.setUserAgent(userAgent)
420+
.setIp(ip)
421+
.setAppVersion(appVersion)
422+
.setPrivateAttributes(Collections.singletonMap(CONTEXT_LOCALE, locale))
423+
.setCustomIDs(customMap)
424+
.build();
441425
StatsigUser transformedUser = ContextTransformer.transform(evaluationContext);
442426

443427
assertEquals(expectedUser.getUserID(), transformedUser.getUserID());
@@ -446,9 +430,7 @@ void contextTransformTest() {
446430
assertEquals(expectedUser.getUserAgent(), transformedUser.getUserAgent());
447431
assertEquals(expectedUser.getIp(), transformedUser.getIp());
448432
assertEquals(expectedUser.getAppVersion(), transformedUser.getAppVersion());
449-
assertEquals(
450-
expectedUser.getPrivateAttributes(),
451-
transformedUser.getPrivateAttributes());
433+
assertEquals(expectedUser.getPrivateAttributes(), transformedUser.getPrivateAttributes());
452434
assertEquals(expectedUser.getCustomIDs(), transformedUser.getCustomIDs());
453435
}
454436
}

0 commit comments

Comments
 (0)