Skip to content

Commit 0800ebf

Browse files
PR suggestions: integration test hook data usage in client, set pair value
Signed-off-by: Alexandra Oberaigner <[email protected]>
1 parent 3b02495 commit 0800ebf

File tree

5 files changed

+78
-41
lines changed

5 files changed

+78
-41
lines changed

src/main/java/dev/openfeature/sdk/HookSupport.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ public void setHookContexts(HookSupportData hookSupportData, SharedHookContext s
4242
for (int i = 0; i < hookSupportData.hooks.size(); i++) {
4343
Pair<Hook, HookContext> hookContextPair = hookSupportData.hooks.get(i);
4444
HookContext curHookContext = sharedContext.hookContextFor(null, new DefaultHookData());
45-
Pair<Hook, HookContext> updatedPair = Pair.of(hookContextPair.getKey(), curHookContext);
46-
hookSupportData.hooks.set(i, updatedPair);
45+
hookContextPair.setValue(curHookContext);
4746
}
4847
}
4948

src/main/java/dev/openfeature/sdk/Pair.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package dev.openfeature.sdk;
22

3+
import lombok.Setter;
34
import lombok.ToString;
45

56
@ToString
67
class Pair<K, V> {
78
private final K key;
8-
private final V value;
9+
10+
@Setter
11+
private V value;
912

1013
private Pair(K key, V value) {
1114
this.key = key;

src/test/java/dev/openfeature/sdk/HookSupportTest.java

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -163,42 +163,4 @@ private EvaluationContext evaluationContextWithValue(String key, String value) {
163163
attributes.put(key, new Value(value));
164164
return new ImmutableContext(attributes);
165165
}
166-
167-
private static class TestHookWithData implements Hook {
168-
private final Object value;
169-
HookData hookData = null;
170-
171-
public TestHookWithData(Object value) {
172-
this.value = value;
173-
}
174-
175-
public TestHookWithData() {
176-
this("test");
177-
}
178-
179-
@Override
180-
public Optional<EvaluationContext> before(HookContext ctx, Map hints) {
181-
ctx.getHookData().set("before", value);
182-
hookData = ctx.getHookData();
183-
return Optional.empty();
184-
}
185-
186-
@Override
187-
public void after(HookContext ctx, FlagEvaluationDetails details, Map hints) {
188-
ctx.getHookData().set("after", value);
189-
hookData = ctx.getHookData();
190-
}
191-
192-
@Override
193-
public void error(HookContext ctx, Exception error, Map hints) {
194-
ctx.getHookData().set("error", value);
195-
hookData = ctx.getHookData();
196-
}
197-
198-
@Override
199-
public void finallyAfter(HookContext ctx, FlagEvaluationDetails details, Map hints) {
200-
ctx.getHookData().set("finallyAfter", value);
201-
hookData = ctx.getHookData();
202-
}
203-
}
204166
}

src/test/java/dev/openfeature/sdk/OpenFeatureClientTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import org.junit.jupiter.api.BeforeEach;
1717
import org.junit.jupiter.api.DisplayName;
1818
import org.junit.jupiter.api.Test;
19+
import org.junit.jupiter.params.ParameterizedTest;
20+
import org.junit.jupiter.params.provider.ValueSource;
1921
import org.mockito.Mockito;
2022
import org.simplify4u.slf4jmock.LoggerMock;
2123
import org.slf4j.Logger;
@@ -104,4 +106,33 @@ void shouldNotCallEvaluationMethodsWhenProviderIsInNotReadyState() {
104106

105107
assertThat(details.getErrorCode()).isEqualTo(ErrorCode.PROVIDER_NOT_READY);
106108
}
109+
110+
@ParameterizedTest
111+
@ValueSource(booleans = {true, false})
112+
@DisplayName("Should support usage of HookData with/without error")
113+
void shouldSupportUsageOfHookData(boolean isError) {
114+
FeatureProvider provider = new TestEventsProvider(5000);
115+
OpenFeatureAPI api = new OpenFeatureAPI();
116+
if (isError) {
117+
api.setProvider("shouldSupportUsageOfHookData", provider);
118+
} else {
119+
api.setProviderAndWait("shouldSupportUsageOfHookData", provider);
120+
}
121+
122+
var testHook = new TestHookWithData("test-data");
123+
api.addHooks(testHook);
124+
125+
Client client = api.getClient("shouldSupportUsageOfHookData");
126+
client.getBooleanDetails("key", true);
127+
128+
assertThat(testHook.hookData.get("before")).isEqualTo("test-data");
129+
assertThat(testHook.hookData.get("finallyAfter")).isEqualTo("test-data");
130+
if (isError) {
131+
assertThat(testHook.hookData.get("after")).isEqualTo(null);
132+
assertThat(testHook.hookData.get("error")).isEqualTo("test-data");
133+
} else {
134+
assertThat(testHook.hookData.get("after")).isEqualTo("test-data");
135+
assertThat(testHook.hookData.get("error")).isEqualTo(null);
136+
}
137+
}
107138
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package dev.openfeature.sdk;
2+
3+
import java.util.Map;
4+
import java.util.Optional;
5+
6+
class TestHookWithData implements Hook {
7+
private final Object value;
8+
HookData hookData = null;
9+
10+
public TestHookWithData(Object value) {
11+
this.value = value;
12+
}
13+
14+
public TestHookWithData() {
15+
this("test");
16+
}
17+
18+
@Override
19+
public Optional<EvaluationContext> before(HookContext ctx, Map hints) {
20+
ctx.getHookData().set("before", value);
21+
hookData = ctx.getHookData();
22+
return Optional.empty();
23+
}
24+
25+
@Override
26+
public void after(HookContext ctx, FlagEvaluationDetails details, Map hints) {
27+
ctx.getHookData().set("after", value);
28+
hookData = ctx.getHookData();
29+
}
30+
31+
@Override
32+
public void error(HookContext ctx, Exception error, Map hints) {
33+
ctx.getHookData().set("error", value);
34+
hookData = ctx.getHookData();
35+
}
36+
37+
@Override
38+
public void finallyAfter(HookContext ctx, FlagEvaluationDetails details, Map hints) {
39+
ctx.getHookData().set("finallyAfter", value);
40+
hookData = ctx.getHookData();
41+
}
42+
}

0 commit comments

Comments
 (0)