diff --git a/lib/pacto/actors/from_examples.rb b/lib/pacto/actors/from_examples.rb index 8f915ab..ca710f1 100644 --- a/lib/pacto/actors/from_examples.rb +++ b/lib/pacto/actors/from_examples.rb @@ -30,7 +30,7 @@ def build_request(contract, values = {}) if contract.examples? example = @selector.select(contract.examples, values) data = contract.request.to_hash - data['uri'] = contract.request.uri + data['uri'] = build_uri(contract, values) data['body'] = example.request.body data['method'] = contract.request.http_method Pacto::PactoRequest.new(data) @@ -49,6 +49,19 @@ def build_response(contract, values = {}) @fallback_actor.build_response contract, values end end + + def build_uri(contract, values) + values ||= {} + uri_template = Addressable::Template.new(contract.request.uri) + if contract.examples && contract.examples.values.first[:request][:uri] + example_uri = contract.examples.values.first[:request][:uri] + example_values = uri_template.extract example_uri + values = example_values.merge values + end + missing_keys = uri_template.keys - values.keys + logger.warn "Missing keys for building a complete URL: #{missing_keys.inspect}" unless missing_keys.empty? + uri_template.expand values + end end end end