Skip to content

Commit 0c08cf3

Browse files
feat: added interception of parameterized tests to Junit OpenFeature Extension
Signed-off-by: sebastian.zahrhuber <sebastian.zahrhuber@dynatrace.com>
1 parent 4808d44 commit 0c08cf3

File tree

5 files changed

+133
-8
lines changed

5 files changed

+133
-8
lines changed

tools/junit-openfeature/src/main/java/dev/openfeature/contrib/tools/junitopenfeature/OpenFeatureExtension.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@
33
import dev.openfeature.sdk.OpenFeatureAPI;
44
import dev.openfeature.sdk.providers.memory.Flag;
55
import org.apache.commons.lang3.BooleanUtils;
6-
import org.junit.jupiter.api.extension.AfterEachCallback;
7-
import org.junit.jupiter.api.extension.BeforeEachCallback;
8-
import org.junit.jupiter.api.extension.ExtensionContext;
9-
import org.junit.jupiter.api.extension.InvocationInterceptor;
10-
import org.junit.jupiter.api.extension.ReflectiveInvocationContext;
6+
import org.junit.jupiter.api.extension.*;
117
import org.junitpioneer.internal.PioneerAnnotationUtils;
128

139
import java.lang.reflect.Method;
@@ -97,9 +93,15 @@ public void interceptTestMethod(
9793
ReflectiveInvocationContext<Method> invocationContext,
9894
ExtensionContext extensionContext
9995
) throws Throwable {
100-
TestProvider.setCurrentNamespace(getNamespace(extensionContext));
101-
invocation.proceed();
102-
TestProvider.clearCurrentNamespace();
96+
executeWithNamespace(invocation, extensionContext);
97+
}
98+
99+
@Override
100+
public void interceptTestTemplateMethod(
101+
Invocation<Void> invocation,
102+
ReflectiveInvocationContext<Method> invocationContext,
103+
ExtensionContext extensionContext) throws Throwable {
104+
executeWithNamespace(invocation, extensionContext);
103105
}
104106

105107
@Override
@@ -150,4 +152,15 @@ private ExtensionContext.Namespace getNamespace(ExtensionContext extensionContex
150152
private ExtensionContext.Store getStore(ExtensionContext context) {
151153
return context.getStore(ExtensionContext.Namespace.create(getClass()));
152154
}
155+
156+
private void executeWithNamespace(
157+
Invocation<Void> invocation,
158+
ExtensionContext extensionContext) throws Throwable {
159+
TestProvider.setCurrentNamespace(getNamespace(extensionContext));
160+
try {
161+
invocation.proceed();
162+
} finally {
163+
TestProvider.clearCurrentNamespace();
164+
}
165+
}
153166
}

tools/junit-openfeature/src/test/java/dev/openfeature/contrib/tools/junitopenfeature/BooleanFlagTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import dev.openfeature.sdk.OpenFeatureAPI;
55
import org.junit.jupiter.api.Nested;
66
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.params.ParameterizedTest;
8+
import org.junit.jupiter.params.provider.ValueSource;
79

810
import static org.assertj.core.api.Assertions.assertThat;
911

@@ -45,6 +47,14 @@ void multipleFlagsSimple() {
4547
assertThat(client.getBooleanValue(FLAG + "2", false)).isTrue();
4648
assertThat(client.getBooleanValue(FLAG + "3", false)).isTrue();
4749
}
50+
51+
@ParameterizedTest
52+
@ValueSource(ints = {1, 2})
53+
@Flag(name = FLAG, value = "true")
54+
void existingSimpleFlagIsRetrievedOnParameterizedTest() {
55+
Client client = OpenFeatureAPI.getInstance().getClient();
56+
assertThat(client.getBooleanValue(FLAG, false)).isTrue();
57+
}
4858
}
4959

5060
@Nested
@@ -81,6 +91,14 @@ void multipleFlagsSimple() {
8191
assertThat(client.getBooleanValue(FLAG + "2", false)).isTrue();
8292
assertThat(client.getBooleanValue(FLAG + "3", false)).isTrue();
8393
}
94+
95+
@ParameterizedTest
96+
@ValueSource(ints = {1, 2})
97+
@Flag(name = FLAG, value = "true")
98+
void existingSimpleFlagIsRetrievedOnParameterizedTest() {
99+
Client client = OpenFeatureAPI.getInstance().getClient("testSpecific");
100+
assertThat(client.getBooleanValue(FLAG, false)).isTrue();
101+
}
84102
}
85103

86104
@Nested
@@ -125,6 +143,16 @@ void multipleFlags() {
125143
assertThat(client.getBooleanValue(FLAG + "3", false)).isTrue();
126144
}
127145

146+
@ParameterizedTest
147+
@ValueSource(ints = {1, 2})
148+
@OpenFeature({
149+
@Flag(name = FLAG, value = "true")
150+
})
151+
void existingFlagIsRetrievedOnParameterizedTest() {
152+
Client client = OpenFeatureAPI.getInstance().getClient();
153+
assertThat(client.getBooleanValue(FLAG, false)).isTrue();
154+
}
155+
128156
@Nested
129157
@OpenFeature({
130158
@Flag(name = FLAG, value = "true"),

tools/junit-openfeature/src/test/java/dev/openfeature/contrib/tools/junitopenfeature/DoubleFlagTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import dev.openfeature.sdk.OpenFeatureAPI;
55
import org.junit.jupiter.api.Nested;
66
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.params.ParameterizedTest;
8+
import org.junit.jupiter.params.provider.ValueSource;
79

810
import static org.assertj.core.api.Assertions.assertThat;
911

@@ -52,6 +54,14 @@ void multipleFlagsSimple() {
5254
assertThat(client.getDoubleValue(FLAG + "3", FALLBACK)).isEqualTo(FLAG_VALUE);
5355
}
5456
}
57+
58+
@ParameterizedTest
59+
@ValueSource(ints = {1, 2})
60+
@Flag(name = FLAG, value = FLAG_VALUE_STRING, valueType = Double.class)
61+
void existingSimpleFlagIsRetrievedOnParameterizedTest() {
62+
Client client = OpenFeatureAPI.getInstance().getClient();
63+
assertThat(client.getDoubleValue(FLAG, FALLBACK)).isEqualTo(FLAG_VALUE);
64+
}
5565
}
5666

5767
@Nested
@@ -88,6 +98,14 @@ void multipleFlagsSimple() {
8898
assertThat(client.getDoubleValue(FLAG + "3", FALLBACK)).isEqualTo(FLAG_VALUE);
8999
}
90100
}
101+
102+
@ParameterizedTest
103+
@ValueSource(ints = {1, 2})
104+
@Flag(name = FLAG, value = FLAG_VALUE_STRING, valueType = Double.class)
105+
void existingSimpleFlagIsRetrievedOnParameterizedTest() {
106+
Client client = OpenFeatureAPI.getInstance().getClient(SPECIFIC_DOMAIN);
107+
assertThat(client.getDoubleValue(FLAG, FALLBACK)).isEqualTo(FLAG_VALUE);
108+
}
91109
}
92110

93111
@Nested
@@ -132,6 +150,16 @@ void multipleFlags() {
132150
assertThat(client.getDoubleValue(FLAG + "3", FALLBACK)).isEqualTo(FLAG_VALUE);
133151
}
134152

153+
@ParameterizedTest
154+
@ValueSource(ints = {1, 2})
155+
@OpenFeature({
156+
@Flag(name = FLAG, value = FLAG_VALUE_STRING, valueType = Double.class)
157+
})
158+
void existingFlagIsRetrievedOnParameterizedTest() {
159+
Client client = OpenFeatureAPI.getInstance().getClient();
160+
assertThat(client.getDoubleValue(FLAG, FALLBACK)).isEqualTo(FLAG_VALUE);
161+
}
162+
135163
@Nested
136164
@OpenFeature({
137165
@Flag(name = FLAG, value = FLAG_VALUE_STRING, valueType = Double.class),

tools/junit-openfeature/src/test/java/dev/openfeature/contrib/tools/junitopenfeature/IntegerFlagTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import dev.openfeature.sdk.OpenFeatureAPI;
55
import org.junit.jupiter.api.Nested;
66
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.params.ParameterizedTest;
8+
import org.junit.jupiter.params.provider.ValueSource;
79

810
import static org.assertj.core.api.Assertions.assertThat;
911

@@ -52,6 +54,14 @@ void multipleFlagsSimple() {
5254
assertThat(client.getIntegerValue(FLAG + "3", FALLBACK)).isEqualTo(FLAG_VALUE);
5355
}
5456
}
57+
58+
@ParameterizedTest
59+
@ValueSource(ints = {1, 2})
60+
@Flag(name = FLAG, value = FLAG_VALUE_STRING, valueType = Integer.class)
61+
void existingSimpleFlagIsRetrievedOnParameterizedTest() {
62+
Client client = OpenFeatureAPI.getInstance().getClient();
63+
assertThat(client.getIntegerValue(FLAG, FALLBACK)).isEqualTo(FLAG_VALUE);
64+
}
5565
}
5666

5767
@Nested
@@ -88,6 +98,14 @@ void multipleFlagsSimple() {
8898
assertThat(client.getIntegerValue(FLAG + "3", FALLBACK)).isEqualTo(FLAG_VALUE);
8999
}
90100
}
101+
102+
@ParameterizedTest
103+
@ValueSource(ints = {1, 2})
104+
@Flag(name = FLAG, value = FLAG_VALUE_STRING, valueType = Integer.class)
105+
void existingSimpleFlagIsRetrievedOnParameterizedTest() {
106+
Client client = OpenFeatureAPI.getInstance().getClient(SPECIFIC_DOMAIN);
107+
assertThat(client.getIntegerValue(FLAG, FALLBACK)).isEqualTo(FLAG_VALUE);
108+
}
91109
}
92110

93111
@Nested
@@ -132,6 +150,16 @@ void multipleFlags() {
132150
assertThat(client.getIntegerValue(FLAG + "3", FALLBACK)).isEqualTo(FLAG_VALUE);
133151
}
134152

153+
@ParameterizedTest
154+
@ValueSource(ints = {1, 2})
155+
@OpenFeature({
156+
@Flag(name = FLAG, value = FLAG_VALUE_STRING, valueType = Integer.class)
157+
})
158+
void existingSimpleFlagIsRetrievedOnParameterizedTest() {
159+
Client client = OpenFeatureAPI.getInstance().getClient();
160+
assertThat(client.getIntegerValue(FLAG, FALLBACK)).isEqualTo(FLAG_VALUE);
161+
}
162+
135163
@Nested
136164
@OpenFeature({
137165
@Flag(name = FLAG, value = FLAG_VALUE_STRING, valueType = Integer.class),

tools/junit-openfeature/src/test/java/dev/openfeature/contrib/tools/junitopenfeature/StringFlagTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import dev.openfeature.sdk.OpenFeatureAPI;
55
import org.junit.jupiter.api.Nested;
66
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.params.ParameterizedTest;
8+
import org.junit.jupiter.params.provider.ValueSource;
79

810
import static org.assertj.core.api.Assertions.assertThat;
911

@@ -50,6 +52,14 @@ void multipleFlagsSimple() {
5052
assertThat(client.getStringValue(FLAG + "2", FALLBACK)).isEqualTo(FLAG_VALUE);
5153
assertThat(client.getStringValue(FLAG + "3", FALLBACK)).isEqualTo(FLAG_VALUE);
5254
}
55+
56+
@ParameterizedTest
57+
@ValueSource(ints = {1, 2})
58+
@Flag(name = FLAG, value = FLAG_VALUE, valueType = String.class)
59+
void existingSimpleFlagIsRetrievedOnParameterizedTest() {
60+
Client client = OpenFeatureAPI.getInstance().getClient();
61+
assertThat(client.getStringValue(FLAG, FALLBACK)).isEqualTo(FLAG_VALUE);
62+
}
5363
}
5464

5565
@Nested
@@ -86,6 +96,14 @@ void multipleFlagsSimple() {
8696
assertThat(client.getStringValue(FLAG + "2", FALLBACK)).isEqualTo(FLAG_VALUE);
8797
assertThat(client.getStringValue(FLAG + "3", FALLBACK)).isEqualTo(FLAG_VALUE);
8898
}
99+
100+
@ParameterizedTest
101+
@ValueSource(ints = {1, 2})
102+
@Flag(name = FLAG, value = FLAG_VALUE, valueType = String.class)
103+
void existingSimpleFlagIsRetrievedOnParameterizedTest() {
104+
Client client = OpenFeatureAPI.getInstance().getClient(SPECIFIC_DOMAIN);
105+
assertThat(client.getStringValue(FLAG, FALLBACK)).isEqualTo(FLAG_VALUE);
106+
}
89107
}
90108

91109
@Nested
@@ -130,6 +148,16 @@ void multipleFlags() {
130148
assertThat(client.getStringValue(FLAG + "3", FALLBACK)).isEqualTo(FLAG_VALUE);
131149
}
132150

151+
@ParameterizedTest
152+
@ValueSource(ints = {1, 2})
153+
@OpenFeature({
154+
@Flag(name = FLAG , value = FLAG_VALUE, valueType = String.class)
155+
})
156+
void existingSimpleFlagIsRetrievedOnParameterizedTest() {
157+
Client client = OpenFeatureAPI.getInstance().getClient();
158+
assertThat(client.getStringValue(FLAG, FALLBACK)).isEqualTo(FLAG_VALUE);
159+
}
160+
133161
@Nested
134162
@OpenFeature({
135163
@Flag(name = FLAG , value = FLAG_VALUE, valueType = String.class),

0 commit comments

Comments
 (0)