/** * Adds another provider state to this interaction * @param stateDesc Description of the state */ public PactDslWithState given(String stateDesc) { state.add(new ProviderState(stateDesc)); return this; }
protected void executeStateChanges(final RequestResponseInteraction interaction, final TestClass testClass, final Object target) { if (!interaction.getProviderStates().isEmpty()) { for (final ProviderState state : interaction.getProviderStates()) { Arrays.stream(testClass.getMethods(State.class)) .filter(method -> ArrayUtils.contains(method.getAnnotation(State.class).value(), state.getName())) .forEach(method -> { if (method.getParameterCount() == 1) { executeMethod(method, target, state.getParams()); } else { executeMethod(method, target); } }); } } }
private void executeStateMethodWithRegExp(Method stateMethod, ProviderState state, Object target) { final Optional<String> matchingStateOptional = ArrayMatcher.firstMatch( stateMethod.getAnnotation(State.class).value(), state.getName()); // We are sure that at this point, an state is present final String matchingState = matchingStateOptional.get(); final List<String> arguments = ArgumentPatternMatcher.arguments( Pattern.compile(matchingState), state.getName()); if (arguments.size() != stateMethod.getParameterCount()) { throw new IllegalArgumentException(String.format( "Consumer state %s matches with provider state %s but provider method contains %s arguments instead of matching %s", state.getName(), matchingState, stateMethod.getParameterCount(), arguments.size())); } Class<?>[] parameterTypes = stateMethod.getParameterTypes(); final Object[] instances = new Object[parameterTypes.length]; for (int i = 0; i < parameterTypes.length; i++) { Class<?> parameter = parameterTypes[i]; instances[i] = StateTypeConverter.convert(arguments.get(i), parameter); } executeMethod(stateMethod, target, instances); }
private void invokeStateChangeMethods(StateChangeAction action) throws Throwable { for (Pair<FrameworkMethod, State> pair : methods) { if (pair.getSecond().action() == action) { if (pair.getFirst().getMethod().getParameterCount() == 1) { pair.getFirst().invokeExplosively(target, providerState.getParams()); } else { pair.getFirst().invokeExplosively(target); } } } } }
protected void executeStateChanges(final RequestResponseInteraction interaction, final TestClass testClass, final Object target) { if (!interaction.getProviderStates().isEmpty()) { for (final ProviderState state : interaction.getProviderStates()) { Arrays.stream(testClass.getMethods(State.class)) .filter(method -> ArrayMatcher.matches( method.getAnnotation(State.class).value(), state.getName())) .forEach(method -> { if (isStateMethodWithMapParameter(method)) { executeMethod(method, target, state.getParams()); } else { if (method.getParameterCount() > 0) { // Use regular expressions to pass parameters. executeStateMethodWithRegExp(method, state, target); } else { executeMethod(method, target); } } }); } } }
protected Statement withStateChanges(final Interaction interaction, final Object target, final Statement prevStatement) { if (!interaction.getProviderStates().isEmpty()) { Statement stateChange = prevStatement; for (ProviderState state: interaction.getProviderStates()) { List<Pair<FrameworkMethod, State>> methods = getAnnotatedMethods(testClass, State.class) .stream() .map(method -> { final State annotation = method.getAnnotation(State.class); return new Pair<>(method, annotation); }) .filter(method -> ArrayUtils.contains(method.getSecond().value(), state.getName())) .collect(Collectors.toList()); if (methods.isEmpty()) { return new Fail(new MissingStateChangeMethod("MissingStateChangeMethod: Did not find a test class method annotated with @State(\"" + state.getName() + "\")")); } else { stateChange = new RunStateChanges(stateChange, methods, target, state); } } return stateChange; } else { return prevStatement; } }
@Override protected ProviderVerifier setupVerifier(Interaction interaction, ProviderInfo provider, ConsumerInfo consumer) { ProviderVerifier verifier = new ProviderVerifier(); setupReporters(verifier, provider.getName(), interaction.getDescription()); verifier.initialiseReporters(provider); verifier.reportVerificationForConsumer(consumer, provider); if (!interaction.getProviderStates().isEmpty()) { for (ProviderState providerState: interaction.getProviderStates()) { verifier.reportStateForInteraction(providerState.getName(), provider, consumer, true); } } verifier.reportInteractionDescription(interaction); return verifier; }
/** * Adds another provider state to this interaction * @param stateDesc Description of the state * @param params State data parameters */ public PactDslWithState given(String stateDesc, Map<String, Object> params) { state.add(new ProviderState(stateDesc, params)); return this; } }
@NotNull @Override protected ProviderVerifier setupVerifier(Interaction interaction, ProviderInfo provider, ConsumerInfo consumer) { ProviderVerifier verifier = new CustomProviderVerifier(getPackagesToScan()); setupReporters(verifier, provider.getName(), interaction.getDescription()); verifier.initialiseReporters(provider); verifier.reportVerificationForConsumer(consumer, provider); if (!interaction.getProviderStates().isEmpty()) { for (ProviderState state : interaction.getProviderStates()) { verifier.reportStateForInteraction(state.getName(), provider, consumer, true); } } verifier.reportInteractionDescription(interaction); return verifier; } }
/** * Adds another provider state to this interaction * @param stateDesc Description of the state * @param params State data parameters */ public PactDslWithState given(String stateDesc, Map<String, Object> params) { state.add(new ProviderState(stateDesc, params)); return this; } }
/** * Sets the provider state. * * @param providerState state of the provider * @return this builder. */ public MessagePactBuilder given(String providerState) { this.providerStates.add(new ProviderState(providerState)); return this; }
/** * Adds another provider state to this interaction * @param stateDesc Description of the state */ public PactDslWithState given(String stateDesc) { state.add(new ProviderState(stateDesc)); return this; }
/** * Sets the provider state. * * @param providerState state of the provider * @return this builder. */ public MessagePactBuilder given(String providerState) { this.providerStates.add(new ProviderState(providerState)); return this; }
/** * Describe the state the provider needs to be in for the pact test to be verified. * * @param state Provider state */ public PactDslWithState given(String state) { return new PactDslWithState(consumerPactBuilder, consumerPactBuilder.getConsumerName(), providerName, new ProviderState(state), defaultRequestValues, defaultResponseValues); }
/** * Describe the state the provider needs to be in for the pact test to be verified. * * @param state Provider state * @param params Data parameters for the state */ public PactDslWithState given(String state, Map<String, Object> params) { return new PactDslWithState(consumerPactBuilder, consumerPactBuilder.getConsumerName(), providerName, new ProviderState(state, params), defaultRequestValues, defaultResponseValues); }
/** * Describe the state the provider needs to be in for the pact test to be verified. * * @param state Provider state */ public PactDslWithState given(String state) { return new PactDslWithState(consumerPactBuilder, consumerPactBuilder.getConsumerName(), providerName, new ProviderState(state), defaultRequestValues, defaultResponseValues); }
/** * Describe the state the provider needs to be in for the pact test to be verified. * * @param state Provider state * @param params Data parameters for the state */ public PactDslWithState given(String state, Map<String, Object> params) { return new PactDslWithState(consumerPactBuilder, consumerPactBuilder.getConsumerName(), providerName, new ProviderState(state, params), defaultRequestValues, defaultResponseValues); }
/** * Describe the state the provider needs to be in for the pact test to be verified. * * @param firstKey Key of first parameter element * @param firstValue Value of first parameter element * @param paramsKeyValuePair Additional parameters in key-value pairs */ public PactDslWithState given(String state, String firstKey, Object firstValue, Object... paramsKeyValuePair) { if (paramsKeyValuePair.length % 2 != 0) { throw new IllegalArgumentException("Pair key value should be provided, but there is one key without value."); } final Map<String, Object> params = new HashMap<>(); params.put(firstKey, firstValue); for (int i = 0; i < paramsKeyValuePair.length; i+=2) { params.put(paramsKeyValuePair[i].toString(), paramsKeyValuePair[i+1]); } return new PactDslWithState(consumerPactBuilder, consumerPactBuilder.getConsumerName(), providerName, new ProviderState(state, params), defaultRequestValues, defaultResponseValues); }
/** * Describe the state the provider needs to be in for the pact test to be verified. * * @param firstKey Key of first parameter element * @param firstValue Value of first parameter element * @param paramsKeyValuePair Additional parameters in key-value pairs */ public PactDslWithState given(String state, String firstKey, Object firstValue, Object... paramsKeyValuePair) { if (paramsKeyValuePair.length % 2 != 0) { throw new IllegalArgumentException("Pair key value should be provided, but there is one key without value."); } final Map<String, Object> params = new HashMap<>(); params.put(firstKey, firstValue); for (int i = 0; i < paramsKeyValuePair.length; i+=2) { params.put(paramsKeyValuePair[i].toString(), paramsKeyValuePair[i+1]); } return new PactDslWithState(consumerPactBuilder, consumerPactBuilder.getConsumerName(), providerName, new ProviderState(state, params), defaultRequestValues, defaultResponseValues); }
/** * Adds a provider state to this interaction * @param state Description of the state * @param params Data parameters for this state */ public PactDslWithState given(String state, Map<String, Object> params) { addInteraction(); return new PactDslWithState(consumerPactBuilder, request.consumer.getName(), request.provider.getName(), new ProviderState(state, params), defaultRequestValues, defaultResponseValues); } }