Skip to content

Commit a78c906

Browse files
feat: added interception of parameterized tests to Junit OpenFeature Extension (#1093)
Signed-off-by: sebastian.zahrhuber <[email protected]>
1 parent 4808d44 commit a78c906

File tree

6 files changed

+134
-4
lines changed

6 files changed

+134
-4
lines changed

tools/junit-openfeature/README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ A JUnit5 extension to reduce boilerplate code for testing code which utilizes Op
1616

1717
## Getting Started
1818

19-
We are supporting two different flavors for testing, a [simple](#simple-configuration) and an [extended](#extended-configuration) configuration.
19+
- We are supporting two different flavors for testing, a [simple](#simple-configuration) and an [extended](#extended-configuration) configuration.
20+
- Both the [`@Test`](https://junit.org/junit5/docs/5.9.0/api/org.junit.jupiter.api/org/junit/jupiter/api/Test.html) annotation and the [`@ParameterizedTest`](https://junit.org/junit5/docs/5.9.0/api/org.junit.jupiter.params/org/junit/jupiter/params/ParameterizedTest.html) annotation are supported.
2021

2122
Notice: We are most likely not multithread compatible!
2223
### Simple Configuration

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

+20-3
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,15 @@ public void interceptTestMethod(
9797
ReflectiveInvocationContext<Method> invocationContext,
9898
ExtensionContext extensionContext
9999
) throws Throwable {
100-
TestProvider.setCurrentNamespace(getNamespace(extensionContext));
101-
invocation.proceed();
102-
TestProvider.clearCurrentNamespace();
100+
executeWithNamespace(invocation, extensionContext);
101+
}
102+
103+
@Override
104+
public void interceptTestTemplateMethod(
105+
Invocation<Void> invocation,
106+
ReflectiveInvocationContext<Method> invocationContext,
107+
ExtensionContext extensionContext) throws Throwable {
108+
executeWithNamespace(invocation, extensionContext);
103109
}
104110

105111
@Override
@@ -150,4 +156,15 @@ private ExtensionContext.Namespace getNamespace(ExtensionContext extensionContex
150156
private ExtensionContext.Store getStore(ExtensionContext context) {
151157
return context.getStore(ExtensionContext.Namespace.create(getClass()));
152158
}
159+
160+
private void executeWithNamespace(
161+
Invocation<Void> invocation,
162+
ExtensionContext extensionContext) throws Throwable {
163+
TestProvider.setCurrentNamespace(getNamespace(extensionContext));
164+
try {
165+
invocation.proceed();
166+
} finally {
167+
TestProvider.clearCurrentNamespace();
168+
}
169+
}
153170
}

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

+28
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

+28
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

+28
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

+28
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)