Skip to content

Commit 080bea2

Browse files
authored
fix: bug in type inference (#20)
1 parent 3358606 commit 080bea2

File tree

5 files changed

+48
-7
lines changed

5 files changed

+48
-7
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,3 +119,4 @@ fabric.properties
119119

120120
#sonarlint
121121
/.idea/sonarlint/issuestore/index.pb
122+
/.idea/copilot/

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>co.featbit</groupId>
88
<artifactId>featbit-java-sdk</artifactId>
9-
<version>1.4.1</version>
9+
<version>1.4.2</version>
1010

1111
<name>featbit/featbit-java-sdk</name>
1212

src/main/java/co/featbit/server/FBClientImp.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,13 +212,13 @@ public EvalDetail<Long> longVariationDetail(String featureFlagKey, FBUser user,
212212

213213
@Override
214214
public <T> T jsonVariation(String featureFlagKey, FBUser user, Class<T> clazz, T defaultValue) {
215-
String json = variation(featureFlagKey, user, DEFAULT_JSON_VALUE);
216-
return Utils.parseJsonObject(json, defaultValue, clazz, DEFAULT_JSON_VALUE.equals(json));
215+
Evaluator.EvalResult res = evaluateInternal(featureFlagKey, user, DEFAULT_JSON_VALUE, clazz);
216+
return Utils.parseJsonObject(res.getValue(), defaultValue, clazz, DEFAULT_JSON_VALUE.equals(res.getValue()));
217217
}
218218

219219
@Override
220220
public <T> EvalDetail<T> jsonVariationDetail(String featureFlagKey, FBUser user, Class<T> clazz, T defaultValue) {
221-
Evaluator.EvalResult res = evaluateInternal(featureFlagKey, user, DEFAULT_JSON_VALUE, null);
221+
Evaluator.EvalResult res = evaluateInternal(featureFlagKey, user, DEFAULT_JSON_VALUE, clazz);
222222
T value = Utils.parseJsonObject(res.getValue(), defaultValue, clazz, DEFAULT_JSON_VALUE.equals(res.getValue()));
223223
return res.toEvalDetail(value);
224224
}

src/main/java/co/featbit/server/Utils.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.apache.commons.lang3.BooleanUtils;
1111
import org.apache.commons.lang3.StringUtils;
1212
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
13-
import org.apache.commons.lang3.math.NumberUtils;
1413

1514
import java.math.BigInteger;
1615
import java.net.InetSocketAddress;
@@ -194,11 +193,11 @@ public static boolean checkType(String variationType, Class<?> requiredType, Str
194193
// bool value is generated by feature flag center
195194
return requiredType == Boolean.class || requiredType == String.class;
196195
case FLAG_NUMERIC_TYPE:
197-
return NumberUtils.isCreatable(returnValue);
196+
return requiredType == Integer.class || requiredType == Long.class || requiredType == Double.class || requiredType == String.class;
198197
case FLAG_JSON_TYPE:
199198
case FLAG_STRING_TYPE:
200199
if (requiredType == Boolean.class) {
201-
return BooleanUtils.toBooleanObject(returnValue) == null;
200+
return Objects.nonNull(BooleanUtils.toBooleanObject(returnValue));
202201
}
203202
if (requiredType == Integer.class || requiredType == Long.class || requiredType == Double.class) {
204203
return StringUtils.isNumeric(returnValue);

src/test/java/co/featbit/server/FBClientTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,16 @@ void testBoolVariation() throws IOException {
8080
ed = client.boolVariationDetail("ff-test-bool", user4, false);
8181
assertTrue(ed.getVariation());
8282
assertEquals(REASON_FALLTHROUGH, ed.getReason());
83+
String res1 = client.variation("ff-test-bool", user4, "error");
84+
assertEquals("true", res1);
85+
Integer res2 = client.intVariation("ff-test-bool", user4, -1);
86+
assertEquals(-1, res2);
87+
res = client.jsonVariation("ff-test-bool", user4, Boolean.class, false);
88+
assertTrue(res);
89+
res1 = client.jsonVariation("ff-test-bool", user4, String.class, "error");
90+
assertEquals("true", res1);
91+
res2 = client.jsonVariation("ff-test-bool", user4, Integer.class, -1);
92+
assertEquals(-1, res2);
8393
}
8494
}
8595

@@ -98,6 +108,22 @@ void testNumericVariation() throws IOException {
98108
EvalDetail<Double> ed1 = client.doubleVariationDetail("ff-test-number", user4, -1D);
99109
assertEquals(9999D, ed1.getVariation());
100110
assertEquals(REASON_FALLTHROUGH, ed1.getReason());
111+
EvalDetail<Boolean> ed2 = client.boolVariationDetail("ff-test-number", user4, false);
112+
assertFalse(ed2.getVariation());
113+
assertEquals(REASON_WRONG_TYPE, ed2.getReason());
114+
EvalDetail<String> ed3 = client.variationDetail("ff-test-number", user4, "error");
115+
assertEquals("9999",ed3.getVariation());
116+
assertEquals(REASON_FALLTHROUGH, ed3.getReason());
117+
EvalDetail<Integer> ed4 = client.jsonVariationDetail("ff-test-number", user4, Integer.class, -1);
118+
assertEquals(9999, ed4.getVariation());
119+
assertEquals(REASON_FALLTHROUGH, ed4.getReason());
120+
EvalDetail<Boolean> ed5 = client.jsonVariationDetail("ff-test-number", user4, Boolean.class, false);
121+
assertFalse(ed5.getVariation());
122+
assertEquals(REASON_WRONG_TYPE, ed5.getReason());
123+
EvalDetail<String> ed6 = client.jsonVariationDetail("ff-test-number", user4, String.class, "error");
124+
assertEquals("9999",ed6.getVariation());
125+
assertEquals(REASON_FALLTHROUGH, ed6.getReason());
126+
101127
}
102128
}
103129

@@ -114,6 +140,21 @@ void testStringVariation() throws IOException {
114140
EvalDetail<String> ed = client.variationDetail("ff-test-string", user1, "error");
115141
assertEquals("others", ed.getVariation());
116142
assertEquals(REASON_FALLTHROUGH, ed.getReason());
143+
EvalDetail<Boolean> ed1 = client.boolVariationDetail("ff-test-string", email, false);
144+
assertFalse(ed1.getVariation());
145+
assertEquals(REASON_WRONG_TYPE, ed1.getReason());
146+
EvalDetail<Double> ed2 = client.doubleVariationDetail("ff-test-string", email, -1D);
147+
assertEquals(-1D, ed2.getVariation());
148+
assertEquals(REASON_WRONG_TYPE, ed2.getReason());
149+
EvalDetail<Boolean> ed3 = client.jsonVariationDetail("ff-test-string", email, Boolean.class, false);
150+
assertFalse(ed3.getVariation());
151+
assertEquals(REASON_WRONG_TYPE, ed3.getReason());
152+
EvalDetail<Long> ed4 = client.jsonVariationDetail("ff-test-string", email, Long.class, -1L);
153+
assertEquals(-1L, ed4.getVariation());
154+
assertEquals(REASON_WRONG_TYPE, ed4.getReason());
155+
EvalDetail<String> ed5 = client.jsonVariationDetail("ff-test-string", email, String.class, "error");
156+
assertEquals("email", ed5.getVariation());
157+
assertEquals(REASON_RULE_MATCH, ed5.getReason());
117158
}
118159
}
119160

0 commit comments

Comments
 (0)