1
1
require 'pact/consumer_contract/request'
2
2
require 'pact/consumer_contract/response'
3
+ require 'pact/consumer_contract/provider_state'
3
4
require 'pact/symbolize_keys'
4
5
require 'pact/matching_rules'
5
6
require 'pact/errors'
@@ -13,7 +14,12 @@ class InteractionV3Parser
13
14
def self . call hash , options
14
15
request = parse_request ( hash [ 'request' ] , options )
15
16
response = parse_response ( hash [ 'response' ] , options )
16
- Interaction . new ( symbolize_keys ( hash ) . merge ( request : request , response : response ) )
17
+ provider_states = parse_provider_states ( hash [ 'providerStates' ] )
18
+ provider_state = provider_states . any? ? provider_states . first . name : nil
19
+ if provider_states && provider_states . size > 1
20
+ Pact . configuration . error_stream . puts ( "WARN: Currently only 1 provider state is supported. Ignoring " )
21
+ end
22
+ Interaction . new ( symbolize_keys ( hash ) . merge ( request : request , response : response , provider_states : provider_states , provider_state : provider_state ) )
17
23
end
18
24
19
25
def self . parse_request request_hash , options
@@ -57,5 +63,11 @@ def self.parse_response_with_string_body response_hash, response_matching_rules,
57
63
string_with_matching_rules = StringWithMatchingRules . new ( response_hash [ 'body' ] , options [ :pact_specification_version ] , response_matching_rules )
58
64
Pact ::Response . from_hash ( response_hash . merge ( 'body' => string_with_matching_rules ) )
59
65
end
66
+
67
+ def self . parse_provider_states provider_states
68
+ ( provider_states || [ ] ) . collect do | provider_state_hash |
69
+ Pact ::ProviderState . new ( provider_state_hash [ 'name' ] , provider_state_hash [ 'params' ] )
70
+ end
71
+ end
60
72
end
61
73
end
0 commit comments