Skip to content

Commit 5bc8bc6

Browse files
committed
fix: PactVerificationExtension will fail when used with other extensions in a static context #1666
1 parent 3010a10 commit 5bc8bc6

File tree

2 files changed

+66
-3
lines changed

2 files changed

+66
-3
lines changed

provider/junit5/src/main/kotlin/au/com/dius/pact/provider/junit5/PactVerificationExtension.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,14 @@ open class PactVerificationExtension(
7373

7474
override fun supportsParameter(parameterContext: ParameterContext, extensionContext: ExtensionContext): Boolean {
7575
val store = extensionContext.getStore(ExtensionContext.Namespace.create("pact-jvm"))
76-
val testContext = store.get("interactionContext") as PactVerificationContext
76+
val testContext = store.get("interactionContext") as PactVerificationContext?
7777
return when (parameterContext.parameter.type) {
7878
Pact::class.java -> true
7979
Interaction::class.java -> true
80-
ClassicHttpRequest::class.java, HttpRequest::class.java -> testContext.target is HttpTestTarget
80+
ClassicHttpRequest::class.java, HttpRequest::class.java -> testContext?.target is HttpTestTarget
8181
PactVerificationContext::class.java -> true
8282
ProviderVerifier::class.java -> true
83-
RequestData::class.java -> testContext.target is PluginTestTarget
83+
RequestData::class.java -> testContext?.target is PluginTestTarget
8484
else -> false
8585
}
8686
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package au.com.dius.pact.provider.junit5;
2+
3+
import au.com.dius.pact.provider.junitsupport.Provider;
4+
import au.com.dius.pact.provider.junitsupport.State;
5+
import au.com.dius.pact.provider.junitsupport.loader.PactFolder;
6+
import org.junit.jupiter.api.extension.Extension;
7+
import org.junit.jupiter.api.extension.ExtensionContext;
8+
import org.junit.jupiter.api.extension.ParameterContext;
9+
import org.junit.jupiter.api.extension.ParameterResolutionException;
10+
import org.junit.jupiter.api.extension.ParameterResolver;
11+
import org.junit.jupiter.api.extension.RegisterExtension;
12+
import org.slf4j.Logger;
13+
import org.slf4j.LoggerFactory;
14+
import org.junit.jupiter.api.TestTemplate;
15+
import org.junit.jupiter.api.extension.ExtendWith;
16+
17+
import static org.hamcrest.MatcherAssert.assertThat;
18+
import static org.hamcrest.Matchers.is;
19+
import static org.hamcrest.Matchers.notNullValue;
20+
21+
@Provider("myAwesomeService")
22+
@PactFolder("pacts")
23+
public class WithRegisteredExtensionTest {
24+
private static final Logger LOGGER = LoggerFactory.getLogger(WithRegisteredExtensionTest.class);
25+
26+
@RegisterExtension
27+
static final TestDependencyResolver resolverExt = new TestDependencyResolver(/*...*/);
28+
29+
private final TestDependency dependency;
30+
31+
public WithRegisteredExtensionTest(TestDependency dependency) {
32+
this.dependency = dependency;
33+
}
34+
35+
@TestTemplate
36+
@ExtendWith(PactVerificationInvocationContextProvider.class)
37+
void test() {
38+
assertThat(dependency, is(notNullValue()));
39+
}
40+
41+
@State("state 2")
42+
void state2() {
43+
}
44+
45+
@State("default")
46+
void stateDefault() {
47+
}
48+
49+
static class TestDependencyResolver implements Extension, ParameterResolver {
50+
@Override
51+
public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
52+
return parameterContext.getParameter().getType().isAssignableFrom(TestDependency.class);
53+
}
54+
55+
@Override
56+
public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
57+
return new TestDependency();
58+
}
59+
}
60+
61+
static class TestDependency {
62+
}
63+
}

0 commit comments

Comments
 (0)