Skip to content

Commit f358527

Browse files
committed
feat: add eval reasons to Cloud Bucketing Client
1 parent 264122a commit f358527

File tree

3 files changed

+65
-28
lines changed

3 files changed

+65
-28
lines changed

src/main/java/com/devcycle/sdk/server/cloud/api/DevCycleCloudClient.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
package com.devcycle.sdk.server.cloud.api;
22

3+
import java.io.IOException;
4+
import java.util.ArrayList;
5+
import java.util.Collections;
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
import java.util.Optional;
9+
310
import com.devcycle.sdk.server.cloud.model.DevCycleCloudOptions;
411
import com.devcycle.sdk.server.common.api.IDevCycleApi;
512
import com.devcycle.sdk.server.common.api.IDevCycleClient;
@@ -8,19 +15,29 @@
815
import com.devcycle.sdk.server.common.exception.BeforeHookError;
916
import com.devcycle.sdk.server.common.exception.DevCycleException;
1017
import com.devcycle.sdk.server.common.logging.DevCycleLogger;
11-
import com.devcycle.sdk.server.common.model.*;
18+
import com.devcycle.sdk.server.common.model.BaseVariable;
19+
import com.devcycle.sdk.server.common.model.DevCycleEvent;
20+
import com.devcycle.sdk.server.common.model.DevCycleResponse;
21+
import com.devcycle.sdk.server.common.model.DevCycleUser;
22+
import com.devcycle.sdk.server.common.model.DevCycleUserAndEvents;
23+
import com.devcycle.sdk.server.common.model.ErrorResponse;
24+
import com.devcycle.sdk.server.common.model.EvalHook;
25+
import com.devcycle.sdk.server.common.model.EvalHooksRunner;
26+
import com.devcycle.sdk.server.common.model.EvalReason;
27+
import com.devcycle.sdk.server.common.model.Feature;
28+
import com.devcycle.sdk.server.common.model.HookContext;
29+
import com.devcycle.sdk.server.common.model.HttpResponseCode;
30+
import com.devcycle.sdk.server.common.model.Variable;
1231
import com.devcycle.sdk.server.common.model.Variable.TypeEnum;
1332
import com.devcycle.sdk.server.openfeature.DevCycleProvider;
1433
import com.fasterxml.jackson.core.JsonProcessingException;
1534
import com.fasterxml.jackson.databind.ObjectMapper;
1635
import com.fasterxml.jackson.databind.exc.MismatchedInputException;
36+
1737
import dev.openfeature.sdk.FeatureProvider;
1838
import retrofit2.Call;
1939
import retrofit2.Response;
2040

21-
import java.io.IOException;
22-
import java.util.*;
23-
2441
public final class DevCycleCloudClient implements IDevCycleClient {
2542

2643
private static final ObjectMapper OBJECT_MAPPER = ObjectMapperUtils.createDefaultObjectMapper();
@@ -134,8 +151,8 @@ public <T> Variable<T> variable(DevCycleUser user, String key, T defaultValue) {
134151
throw beforeError;
135152
}
136153

137-
evalHooksRunner.executeAfter(reversedHooks, context, variable);
138154
variable.setIsDefaulted(false);
155+
evalHooksRunner.executeAfter(reversedHooks, context, variable);
139156
} catch (Throwable exception) {
140157
if (!(exception instanceof BeforeHookError || exception instanceof AfterHookError)) {
141158
variable = (Variable<T>) Variable.builder()
@@ -145,6 +162,7 @@ public <T> Variable<T> variable(DevCycleUser user, String key, T defaultValue) {
145162
.defaultValue(defaultValue)
146163
.isDefaulted(true)
147164
.build();
165+
variable.setEval(EvalReason.defaultReason(EvalReason.DefaultReasonDetailsEnum.USER_NOT_TARGETED));
148166
}
149167

150168
evalHooksRunner.executeError(reversedHooks, context, exception);

src/test/java/com/devcycle/sdk/server/cloud/DevCycleCloudClientTest.java

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,42 @@
11
package com.devcycle.sdk.server.cloud;
22

3-
import com.devcycle.sdk.server.cloud.api.DevCycleCloudClient;
4-
import com.devcycle.sdk.server.cloud.model.DevCycleCloudOptions;
5-
import com.devcycle.sdk.server.common.api.DVCApiMock;
6-
import com.devcycle.sdk.server.common.api.IDevCycleApi;
7-
import com.devcycle.sdk.server.common.exception.DevCycleException;
8-
import com.devcycle.sdk.server.common.model.*;
9-
import com.devcycle.sdk.server.helpers.WhiteBox;
10-
import dev.openfeature.sdk.Hook;
11-
import net.bytebuddy.implementation.bytecode.Throw;
12-
import org.junit.Assert;
13-
import org.junit.Before;
14-
import org.junit.Test;
15-
import org.junit.runner.RunWith;
16-
import org.mockito.Mock;
17-
import org.mockito.junit.MockitoJUnitRunner;
18-
import retrofit2.Call;
19-
import retrofit2.mock.Calls;
3+
import static org.mockito.Mockito.when;
204

215
import java.math.BigDecimal;
226
import java.time.Instant;
7+
import java.util.ArrayList;
238
import java.util.Collections;
9+
import java.util.List;
2410
import java.util.Map;
2511
import java.util.Optional;
2612
import java.util.UUID;
27-
import java.util.*;
2813

29-
import static org.mockito.Mockito.when;
14+
import org.junit.Assert;
15+
import org.junit.Before;
16+
import org.junit.Test;
17+
import org.junit.runner.RunWith;
18+
import org.mockito.Mock;
19+
import org.mockito.junit.MockitoJUnitRunner;
20+
21+
import com.devcycle.sdk.server.cloud.api.DevCycleCloudClient;
22+
import com.devcycle.sdk.server.cloud.model.DevCycleCloudOptions;
23+
import com.devcycle.sdk.server.common.api.DVCApiMock;
24+
import com.devcycle.sdk.server.common.api.IDevCycleApi;
25+
import com.devcycle.sdk.server.common.exception.DevCycleException;
26+
import com.devcycle.sdk.server.common.model.BaseVariable;
27+
import com.devcycle.sdk.server.common.model.DevCycleEvent;
28+
import com.devcycle.sdk.server.common.model.DevCycleUser;
29+
import com.devcycle.sdk.server.common.model.DevCycleUserAndEvents;
30+
import com.devcycle.sdk.server.common.model.EvalHook;
31+
import com.devcycle.sdk.server.common.model.EvalReason;
32+
import com.devcycle.sdk.server.common.model.Feature;
33+
import com.devcycle.sdk.server.common.model.HookContext;
34+
import com.devcycle.sdk.server.common.model.Meta;
35+
import com.devcycle.sdk.server.common.model.PlatformData;
36+
import com.devcycle.sdk.server.common.model.Variable;
37+
import com.devcycle.sdk.server.helpers.WhiteBox;
38+
39+
import retrofit2.mock.Calls;
3040

3141
/**
3242
* API tests for DevcycleApi
@@ -91,6 +101,11 @@ public void getVariableByKeyTest() {
91101
assertUserDefaultsCorrect(user);
92102

93103
Assert.assertFalse(variable.getValue());
104+
105+
EvalReason varEval = variable.getEval();
106+
Assert.assertEquals("TARGETING_MATCH", varEval.getReason());
107+
Assert.assertEquals("All Users", varEval.getDetails());
108+
Assert.assertEquals("test_cloud_target_id", varEval.getTargetId());
94109
} catch (IllegalArgumentException e) {
95110
e.printStackTrace();
96111
}
@@ -567,6 +582,7 @@ public void onFinally(HookContext<String> ctx, Optional<Variable<String>> variab
567582
.type(Variable.TypeEnum.STRING)
568583
.isDefaulted(false)
569584
.defaultValue("default string")
585+
.eval(new EvalReason("TARGETING_MATCH", "All Users", "test_target_id"))
570586
.build();
571587

572588
when(apiInterface.getVariableByKey(user, "test-string", dvcOptions.getEnableEdgeDB())).thenReturn(Calls.response(expected));

src/test/java/com/devcycle/sdk/server/helpers/TestResponse.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package com.devcycle.sdk.server.helpers;
22

3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.UUID;
6+
37
import com.devcycle.sdk.server.common.model.BaseVariable;
48
import com.devcycle.sdk.server.common.model.DevCycleResponse;
9+
import com.devcycle.sdk.server.common.model.EvalReason;
510
import com.devcycle.sdk.server.common.model.Feature;
611
import com.devcycle.sdk.server.common.model.Variable;
12+
713
import retrofit2.Call;
814
import retrofit2.mock.Calls;
915

10-
import java.util.HashMap;
11-
import java.util.Map;
12-
import java.util.UUID;
13-
1416
public final class TestResponse {
1517

1618
private TestResponse() {
@@ -84,6 +86,7 @@ public static <T> Call<Variable> getVariableByKey() {
8486
.key("test-false")
8587
.value(false)
8688
.type(Variable.TypeEnum.BOOLEAN)
89+
.eval(new EvalReason("TARGETING_MATCH", "All Users", "test_cloud_target_id"))
8790
.build();
8891

8992
return Calls.response(variable);

0 commit comments

Comments
 (0)