diff --git a/lib/webmock/request_pattern.rb b/lib/webmock/request_pattern.rb index 0555200c8..4dd0e46e3 100644 --- a/lib/webmock/request_pattern.rb +++ b/lib/webmock/request_pattern.rb @@ -181,9 +181,13 @@ def to_s private def matches_with_variations?(uri) - normalized_template = Addressable::Template.new(WebMock::Util::URI.heuristic_parse(@pattern.pattern)) - - WebMock::Util::URI.variations_of_uri_as_strings(uri).any? { |u| normalized_template.match(u) } + template = + begin + Addressable::Template.new(WebMock::Util::URI.heuristic_parse(@pattern.pattern)) + rescue Addressable::URI::InvalidURIError + Addressable::Template.new(@pattern.pattern) + end + WebMock::Util::URI.variations_of_uri_as_strings(uri).any? { |u| template.match(u) } end end diff --git a/spec/unit/request_pattern_spec.rb b/spec/unit/request_pattern_spec.rb index b3b5edd3c..0e59664ef 100644 --- a/spec/unit/request_pattern_spec.rb +++ b/spec/unit/request_pattern_spec.rb @@ -132,6 +132,18 @@ def match(request_signature) expect(WebMock::RequestPattern.new(:get, uri)).to match(signature) end + it "should match if Addressable::Template pattern host matches request uri" do + signature = WebMock::RequestSignature.new(:get, "www.example.com") + uri = Addressable::Template.new("{subdomain}.example.com") + expect(WebMock::RequestPattern.new(:get, uri)).to match(signature) + end + + it "should not match if Addressable::Template pattern host does not match request uri" do + signature = WebMock::RequestSignature.new(:get, "www.bad-example.com") + uri = Addressable::Template.new("{subdomain}.example.com") + expect(WebMock::RequestPattern.new(:get, uri)).not_to match(signature) + end + it "should match for uris with same parameters as pattern" do expect(WebMock::RequestPattern.new(:get, "www.example.com?a=1&b=2")). to match(WebMock::RequestSignature.new(:get, "www.example.com?a=1&b=2"))