http_stub 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/http_stub.rb +6 -2
- data/lib/http_stub/configurer.rb +2 -2
- data/lib/http_stub/configurer/request/hash_with_regexpable_values.rb +22 -0
- data/lib/http_stub/configurer/request/regexpable_value.rb +18 -0
- data/lib/http_stub/configurer/request/stub.rb +26 -0
- data/lib/http_stub/configurer/request/stub_activator.rb +18 -0
- data/lib/http_stub/models/hash_with_regexpable_values.rb +20 -0
- data/lib/http_stub/models/regexpable_value.rb +22 -0
- data/lib/http_stub/models/stub_headers.rb +3 -3
- data/lib/http_stub/models/stub_parameters.rb +3 -3
- data/lib/http_stub/models/stub_uri.rb +3 -4
- data/lib/http_stub/version.rb +1 -1
- data/spec/lib/http_stub/configurer/request/hash_with_regexpable_values_spec.rb +35 -0
- data/spec/lib/http_stub/configurer/request/regexpable_value_spec.rb +55 -0
- data/spec/lib/http_stub/configurer/{stub_activator_request_spec.rb → request/stub_activator_spec.rb} +4 -4
- data/spec/lib/http_stub/configurer/request/stub_spec.rb +152 -0
- data/spec/lib/http_stub/configurer_integration_spec.rb +102 -26
- data/spec/lib/http_stub/models/hash_with_regexpable_values_spec.rb +149 -0
- data/spec/lib/http_stub/models/regexpable_value_spec.rb +69 -0
- data/spec/lib/http_stub/models/stub_headers_spec.rb +34 -86
- data/spec/lib/http_stub/models/stub_parameters_spec.rb +22 -11
- data/spec/lib/http_stub/models/stub_uri_spec.rb +16 -47
- data/spec/spec_helper.rb +1 -1
- metadata +21 -9
- data/lib/http_stub/configurer/stub_activator_request.rb +0 -16
- data/lib/http_stub/configurer/stub_request.rb +0 -24
- data/spec/lib/http_stub/configurer/stub_request_spec.rb +0 -129
| @@ -224,28 +224,68 @@ describe HttpStub::Configurer, "when the server is running" do | |
| 224 224 |  | 
| 225 225 | 
             
                  describe "that contains headers" do
         | 
| 226 226 |  | 
| 227 | 
            -
                     | 
| 228 | 
            -
             | 
| 229 | 
            -
             | 
| 230 | 
            -
             | 
| 227 | 
            +
                    describe "whose values are strings" do
         | 
| 228 | 
            +
             | 
| 229 | 
            +
                      before(:each) do
         | 
| 230 | 
            +
                        configurer.stub_response!("/stub_with_headers", method: :get, headers: { key: "value" },
         | 
| 231 | 
            +
                                                  response: { status: 202, body: "Another stub body" })
         | 
| 232 | 
            +
                      end
         | 
| 233 | 
            +
             | 
| 234 | 
            +
                      describe "and that request is made" do
         | 
| 231 235 |  | 
| 232 | 
            -
             | 
| 236 | 
            +
                        let(:response) { HTTParty.get("http://localhost:8001/stub_with_headers", headers: { "key" => "value" }) }
         | 
| 233 237 |  | 
| 234 | 
            -
             | 
| 238 | 
            +
                        it "should replay the stubbed response" do
         | 
| 239 | 
            +
                          response.code.should eql(202)
         | 
| 240 | 
            +
                          response.body.should eql("Another stub body")
         | 
| 241 | 
            +
                        end
         | 
| 242 | 
            +
             | 
| 243 | 
            +
                      end
         | 
| 244 | 
            +
             | 
| 245 | 
            +
                      describe "and a request with different headers is made" do
         | 
| 246 | 
            +
             | 
| 247 | 
            +
                        let(:response) do
         | 
| 248 | 
            +
                          HTTParty.get("http://localhost:8001/stub_with_headers", headers: { "key" => "other_value" })
         | 
| 249 | 
            +
                        end
         | 
| 250 | 
            +
             | 
| 251 | 
            +
                        it "should respond with a 404 status code" do
         | 
| 252 | 
            +
                          response.code.should eql(404)
         | 
| 253 | 
            +
                        end
         | 
| 235 254 |  | 
| 236 | 
            -
                      it "should replay the stubbed response" do
         | 
| 237 | 
            -
                        response.code.should eql(202)
         | 
| 238 | 
            -
                        response.body.should eql("Another stub body")
         | 
| 239 255 | 
             
                      end
         | 
| 240 256 |  | 
| 241 257 | 
             
                    end
         | 
| 242 258 |  | 
| 243 | 
            -
                    describe " | 
| 259 | 
            +
                    describe "whose values are regular expressions" do
         | 
| 244 260 |  | 
| 245 | 
            -
                       | 
| 261 | 
            +
                      before(:each) do
         | 
| 262 | 
            +
                        configurer.stub_response!("/stub_with_headers", method: :get, headers: { key: /^match.*/ },
         | 
| 263 | 
            +
                                                  response: { status: 202, body: "Another stub body" })
         | 
| 264 | 
            +
                      end
         | 
| 265 | 
            +
             | 
| 266 | 
            +
                      describe "and a request that matches is made" do
         | 
| 267 | 
            +
             | 
| 268 | 
            +
                        let(:response) do
         | 
| 269 | 
            +
                          HTTParty.get("http://localhost:8001/stub_with_headers", headers: { "key" => "matching_value" })
         | 
| 270 | 
            +
                        end
         | 
| 271 | 
            +
             | 
| 272 | 
            +
                        it "should replay the stubbed response" do
         | 
| 273 | 
            +
                          response.code.should eql(202)
         | 
| 274 | 
            +
                          response.body.should eql("Another stub body")
         | 
| 275 | 
            +
                        end
         | 
| 276 | 
            +
             | 
| 277 | 
            +
                      end
         | 
| 278 | 
            +
             | 
| 279 | 
            +
                      describe "and a request that does not match is made" do
         | 
| 280 | 
            +
             | 
| 281 | 
            +
                        let(:response) do
         | 
| 282 | 
            +
                          HTTParty.get("http://localhost:8001/stub_with_headers", headers: { "key" => "does_not_match_value" })
         | 
| 283 | 
            +
                        end
         | 
| 284 | 
            +
             | 
| 285 | 
            +
                        it "should respond with a 404 status code" do
         | 
| 286 | 
            +
                          response.code.should eql(404)
         | 
| 287 | 
            +
                        end
         | 
| 246 288 |  | 
| 247 | 
            -
                      it "should respond with a 404 status code" do
         | 
| 248 | 
            -
                        response.code.should eql(404)
         | 
| 249 289 | 
             
                      end
         | 
| 250 290 |  | 
| 251 291 | 
             
                    end
         | 
| @@ -254,28 +294,64 @@ describe HttpStub::Configurer, "when the server is running" do | |
| 254 294 |  | 
| 255 295 | 
             
                  describe "that contains parameters" do
         | 
| 256 296 |  | 
| 257 | 
            -
                     | 
| 258 | 
            -
             | 
| 259 | 
            -
             | 
| 260 | 
            -
             | 
| 297 | 
            +
                    describe "whose values are strings" do
         | 
| 298 | 
            +
             | 
| 299 | 
            +
                      before(:each) do
         | 
| 300 | 
            +
                        configurer.stub_response!("/stub_with_parameters", method: :get, parameters: { key: "value" },
         | 
| 301 | 
            +
                                                  response: { status: 202, body: "Another stub body" })
         | 
| 302 | 
            +
                      end
         | 
| 303 | 
            +
             | 
| 304 | 
            +
                      describe "and that request is made" do
         | 
| 261 305 |  | 
| 262 | 
            -
             | 
| 306 | 
            +
                        let(:response) { Net::HTTP.get_response("localhost", "/stub_with_parameters?key=value", 8001) }
         | 
| 263 307 |  | 
| 264 | 
            -
             | 
| 308 | 
            +
                        it "should replay the stubbed response" do
         | 
| 309 | 
            +
                          response.code.should eql("202")
         | 
| 310 | 
            +
                          response.body.should eql("Another stub body")
         | 
| 311 | 
            +
                        end
         | 
| 312 | 
            +
             | 
| 313 | 
            +
                      end
         | 
| 314 | 
            +
             | 
| 315 | 
            +
                      describe "and a request with different parameters is made" do
         | 
| 316 | 
            +
             | 
| 317 | 
            +
                        let(:response) { Net::HTTP.get_response("localhost", "/stub_with_parameters?key=another_value", 8001) }
         | 
| 318 | 
            +
             | 
| 319 | 
            +
                        it "should respond with a 404 status code" do
         | 
| 320 | 
            +
                          response.code.should eql("404")
         | 
| 321 | 
            +
                        end
         | 
| 265 322 |  | 
| 266 | 
            -
                      it "should replay the stubbed response" do
         | 
| 267 | 
            -
                        response.code.should eql("202")
         | 
| 268 | 
            -
                        response.body.should eql("Another stub body")
         | 
| 269 323 | 
             
                      end
         | 
| 270 324 |  | 
| 271 325 | 
             
                    end
         | 
| 272 326 |  | 
| 273 | 
            -
                    describe " | 
| 327 | 
            +
                    describe "whose values are regular expressions" do
         | 
| 274 328 |  | 
| 275 | 
            -
                       | 
| 329 | 
            +
                      before(:each) do
         | 
| 330 | 
            +
                        configurer.stub_response!("/stub_with_parameters", method: :get, parameters: { key: /^match.*/ },
         | 
| 331 | 
            +
                                                  response: { status: 202, body: "Another stub body" })
         | 
| 332 | 
            +
                      end
         | 
| 333 | 
            +
             | 
| 334 | 
            +
                      describe "and a request that matches is made" do
         | 
| 335 | 
            +
             | 
| 336 | 
            +
                        let(:response) { Net::HTTP.get_response("localhost", "/stub_with_parameters?key=matching_value", 8001) }
         | 
| 337 | 
            +
             | 
| 338 | 
            +
                        it "should replay the stubbed response" do
         | 
| 339 | 
            +
                          response.code.should eql("202")
         | 
| 340 | 
            +
                          response.body.should eql("Another stub body")
         | 
| 341 | 
            +
                        end
         | 
| 342 | 
            +
             | 
| 343 | 
            +
                      end
         | 
| 344 | 
            +
             | 
| 345 | 
            +
                      describe "and a request that does not match is made" do
         | 
| 346 | 
            +
             | 
| 347 | 
            +
                        let(:response) do
         | 
| 348 | 
            +
                          Net::HTTP.get_response("localhost", "/stub_with_parameters?key=does_not_match_value", 8001)
         | 
| 349 | 
            +
                        end
         | 
| 350 | 
            +
             | 
| 351 | 
            +
                        it "should respond with a 404 status code" do
         | 
| 352 | 
            +
                          response.code.should eql("404")
         | 
| 353 | 
            +
                        end
         | 
| 276 354 |  | 
| 277 | 
            -
                      it "should respond with a 404 status code" do
         | 
| 278 | 
            -
                        response.code.should eql("404")
         | 
| 279 355 | 
             
                      end
         | 
| 280 356 |  | 
| 281 357 | 
             
                    end
         | 
| @@ -0,0 +1,149 @@ | |
| 1 | 
            +
            describe HttpStub::Models::HashWithRegexpableValues do
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              let(:stubbed_hash) do
         | 
| 4 | 
            +
                (1..3).reduce({}) do |result, i|
         | 
| 5 | 
            +
                  result["key#{i}"] = "value#{i}"
         | 
| 6 | 
            +
                  result
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              let(:regexpable_values) do
         | 
| 11 | 
            +
                stubbed_hash.values.map { |value| double(HttpStub::Models::RegexpableValue, to_s: value).as_null_object }
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              let(:regexpable_hash) { HttpStub::Models::HashWithRegexpableValues.new(stubbed_hash) }
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              before(:each) do
         | 
| 17 | 
            +
                regexpable_values.each { |value| HttpStub::Models::RegexpableValue.stub!(:new).with(value.to_s).and_return(value) }
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              it "should be hash" do
         | 
| 21 | 
            +
                regexpable_hash.should be_a(Hash)
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              describe "constructor" do
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                it "should create a regexpable representation of each value in the hash" do
         | 
| 27 | 
            +
                  regexpable_values.each do |value|
         | 
| 28 | 
            +
                    HttpStub::Models::RegexpableValue.should_receive(:new).with(value.to_s).and_return(value)
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  regexpable_hash.values.should eql(regexpable_values)
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
                
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
              
         | 
| 36 | 
            +
              describe "#match?" do
         | 
| 37 | 
            +
                
         | 
| 38 | 
            +
                describe "when the stubbed hash contains multiple entries" do
         | 
| 39 | 
            +
                  
         | 
| 40 | 
            +
                  describe "and the provided hash has the same number of entries" do
         | 
| 41 | 
            +
                    
         | 
| 42 | 
            +
                    describe "and the keys match" do
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                      let(:provided_hash) do
         | 
| 45 | 
            +
                        stubbed_hash.reduce({}) do |result, entry|
         | 
| 46 | 
            +
                          result[entry[0]] = "another #{entry[1]}"
         | 
| 47 | 
            +
                          result
         | 
| 48 | 
            +
                        end
         | 
| 49 | 
            +
                      end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                      describe "and the values match" do
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                        before(:each) do
         | 
| 54 | 
            +
                          regexpable_values.each { |value| value.stub!(:match?).with("another #{value}").and_return(true) }
         | 
| 55 | 
            +
                        end
         | 
| 56 | 
            +
                        
         | 
| 57 | 
            +
                        it "should return true" do
         | 
| 58 | 
            +
                          regexpable_hash.match?(provided_hash).should be_true
         | 
| 59 | 
            +
                        end
         | 
| 60 | 
            +
                        
         | 
| 61 | 
            +
                      end
         | 
| 62 | 
            +
                      
         | 
| 63 | 
            +
                      describe "and a value does not match" do
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                        before(:each) do
         | 
| 66 | 
            +
                          regexpable_values.each { |value| value.stub!(:match?).with("another #{value}").and_return(true) }
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                          non_matching_value = regexpable_values[1]
         | 
| 69 | 
            +
                          non_matching_value.stub!(:match?).with("another #{non_matching_value}").and_return(false)
         | 
| 70 | 
            +
                        end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                        it "should return false" do
         | 
| 73 | 
            +
                          regexpable_hash.match?(provided_hash).should be_false
         | 
| 74 | 
            +
                        end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                      end
         | 
| 77 | 
            +
                      
         | 
| 78 | 
            +
                    end
         | 
| 79 | 
            +
                    
         | 
| 80 | 
            +
                    describe "and a key does not match" do
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                      let(:provided_hash) { { "key1" => "value1", "differentkey2" => "another value2", "key3" => "value3" } }
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                      before(:each) do
         | 
| 85 | 
            +
                        regexpable_values.each { |value| value.stub!(:match?).with(value.to_s).and_return(true) }
         | 
| 86 | 
            +
                      end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                      it "should return false" do
         | 
| 89 | 
            +
                        regexpable_hash.match?(provided_hash).should be_false
         | 
| 90 | 
            +
                      end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                    end
         | 
| 93 | 
            +
                    
         | 
| 94 | 
            +
                  end
         | 
| 95 | 
            +
                  
         | 
| 96 | 
            +
                  describe "and the provided hash contains more entries" do
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                    let(:provided_hash) do
         | 
| 99 | 
            +
                      (1..5).reduce({}) do |result, i|
         | 
| 100 | 
            +
                        result["key#{i}"] = "another value#{i}"
         | 
| 101 | 
            +
                        result
         | 
| 102 | 
            +
                      end
         | 
| 103 | 
            +
                    end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                    describe "and it has matching keys and values" do
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                      before(:each) do
         | 
| 108 | 
            +
                        regexpable_values.each { |value| value.stub!(:match?).with("another #{value}").and_return(true) }
         | 
| 109 | 
            +
                      end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                      it "should return true" do
         | 
| 112 | 
            +
                        regexpable_hash.match?(provided_hash).should be_true
         | 
| 113 | 
            +
                      end
         | 
| 114 | 
            +
                      
         | 
| 115 | 
            +
                    end
         | 
| 116 | 
            +
                    
         | 
| 117 | 
            +
                  end
         | 
| 118 | 
            +
                  
         | 
| 119 | 
            +
                end
         | 
| 120 | 
            +
                
         | 
| 121 | 
            +
                describe "when the stubbed hash is empty" do
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                  let(:stubbed_hash) { {} }
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                  describe "and the provided hash is not empty" do
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                    let(:provided_hash) { { "key" => "value" } }
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                    it "should return true" do
         | 
| 130 | 
            +
                      regexpable_hash.match?(provided_hash).should be_true
         | 
| 131 | 
            +
                    end
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                  end
         | 
| 134 | 
            +
                  
         | 
| 135 | 
            +
                  describe "and the provided hash is empty" do
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                    let(:provided_hash) { {} }
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                    it "should return true" do
         | 
| 140 | 
            +
                      regexpable_hash.match?(provided_hash).should be_true
         | 
| 141 | 
            +
                    end
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                  end
         | 
| 144 | 
            +
                  
         | 
| 145 | 
            +
                end
         | 
| 146 | 
            +
                
         | 
| 147 | 
            +
              end
         | 
| 148 | 
            +
              
         | 
| 149 | 
            +
            end
         | 
| @@ -0,0 +1,69 @@ | |
| 1 | 
            +
            describe HttpStub::Models::RegexpableValue do
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              let(:value) { "a simple string" }
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              let(:regexpable_value) { HttpStub::Models::RegexpableValue.new(value) }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              describe "#match?" do
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                describe "when the value is a string prefixed with 'regexp:'" do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  let(:value) { "regexp:^a[0-9]*z$" }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  describe "and the provided value matches the regular expression" do
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    let(:other_value) { "a789z" }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    it "should return true" do
         | 
| 18 | 
            +
                      regexpable_value.match?(other_value).should be_true
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  describe "and the provided value does not match the regular expression" do
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    let(:other_value) { "a789" }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    it "should return false" do
         | 
| 28 | 
            +
                      regexpable_value.match?(other_value).should be_false
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                describe "when the value is a simple string" do
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  describe "and the provided value is equal to the string" do
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    let(:other_value) { value }
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    it "should return true" do
         | 
| 42 | 
            +
                      regexpable_value.match?(other_value).should be_true
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  describe "and the provided value is not equal to the string" do
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                    let(:other_value) { "a not equal string" }
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    it "should return false" do
         | 
| 52 | 
            +
                      regexpable_value.match?(other_value).should be_false
         | 
| 53 | 
            +
                    end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              describe "#to_s" do
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                it "should return the value provided" do
         | 
| 64 | 
            +
                  regexpable_value.to_s.should eql(value)
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            end
         | 
| @@ -1,114 +1,62 @@ | |
| 1 1 | 
             
            describe HttpStub::Models::StubHeaders do
         | 
| 2 2 |  | 
| 3 3 | 
             
              let(:request) { double("HttpRequest") }
         | 
| 4 | 
            +
              let(:stubbed_headers) { { "stub_key" => "value" } }
         | 
| 4 5 |  | 
| 5 6 | 
             
              let(:stub_headers) { HttpStub::Models::StubHeaders.new(stubbed_headers) }
         | 
| 6 7 |  | 
| 7 | 
            -
              describe " | 
| 8 | 
            -
             | 
| 9 | 
            -
                before(:each) { HttpStub::Models::RequestHeaderParser.stub!(:parse).with(request).and_return(request_headers) }
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                describe "when multiple headers are mandatory" do
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                  let(:stubbed_headers) { { "KEY1" => "value1", "KEY2" => "value2", "KEY3" => "value3" } }
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                  describe "and the mandatory headers are provided" do
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                    let(:request_headers) { stubbed_headers }
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                    describe "and the casing of the header names is identical" do
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                      it "should return true" do
         | 
| 22 | 
            -
                        stub_headers.match?(request).should be_true
         | 
| 23 | 
            -
                      end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                    end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                    describe "and the casing of the header names is different" do
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                      let(:stubbed_headers) { { "key1" => "value1", "KEY2" => "value2", "key3" => "value3" } }
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                      it "should return true" do
         | 
| 32 | 
            -
                        stub_headers.match?(request).should be_true
         | 
| 33 | 
            -
                      end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                    end
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                    describe "and the mandatory request header names have hyphens in place of underscores" do
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                      let(:stubbed_headers) { { "KEY_1" => "value1", "KEY-2" => "value2", "KEY_3" => "value3" } }
         | 
| 40 | 
            -
                      let(:request_headers) { { "KEY-1" => "value1", "KEY_2" => "value2", "KEY-3" => "value3" } }
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                      it "should return true" do
         | 
| 43 | 
            -
                        stub_headers.match?(request).should be_true
         | 
| 44 | 
            -
                      end
         | 
| 45 | 
            -
             | 
| 46 | 
            -
                    end
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                  end
         | 
| 49 | 
            -
             | 
| 50 | 
            -
                  describe "and the request headers have different values" do
         | 
| 51 | 
            -
             | 
| 52 | 
            -
                    let(:request_headers) { { "KEY1" => "value1", "KEY2" => "doesNotMatch", "KEY3" => "value3" } }
         | 
| 8 | 
            +
              describe "when stubbed headers are provided" do
         | 
| 53 9 |  | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 10 | 
            +
                it "should create a regexpable representation of the stubbed headers whose keys are downcased and underscored" do
         | 
| 11 | 
            +
                  downcased_and_underscored_hash = { "another_stub_key" => "value" }
         | 
| 12 | 
            +
                  stubbed_headers.should_receive(:downcase_and_underscore_keys).and_return(downcased_and_underscored_hash)
         | 
| 13 | 
            +
                  HttpStub::Models::HashWithRegexpableValues.should_receive(:new).with(downcased_and_underscored_hash)
         | 
| 57 14 |  | 
| 58 | 
            -
                   | 
| 59 | 
            -
             | 
| 60 | 
            -
                  describe "and some mandatory headers are omitted" do
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                    let(:request_headers) { { "KEY1" => "value1", "KEY3" => "value3" } }
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                    it "should return false" do
         | 
| 65 | 
            -
                      stub_headers.match?(request).should be_false
         | 
| 66 | 
            -
                    end
         | 
| 67 | 
            -
             | 
| 68 | 
            -
                  end
         | 
| 15 | 
            +
                  stub_headers
         | 
| 16 | 
            +
                end
         | 
| 69 17 |  | 
| 70 | 
            -
             | 
| 18 | 
            +
              end
         | 
| 71 19 |  | 
| 72 | 
            -
             | 
| 20 | 
            +
              describe "when the stubbed headers are nil" do
         | 
| 73 21 |  | 
| 74 | 
            -
             | 
| 75 | 
            -
                      stub_headers.match?(request).should be_false
         | 
| 76 | 
            -
                    end
         | 
| 22 | 
            +
                let(:stubbed_headers) { nil }
         | 
| 77 23 |  | 
| 78 | 
            -
             | 
| 24 | 
            +
                it "should create a regexpable representation of an empty hash" do
         | 
| 25 | 
            +
                  HttpStub::Models::HashWithRegexpableValues.should_receive(:new).with({})
         | 
| 79 26 |  | 
| 27 | 
            +
                  stub_headers
         | 
| 80 28 | 
             
                end
         | 
| 81 29 |  | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
                  let(:stubbed_headers) { {} }
         | 
| 85 | 
            -
             | 
| 86 | 
            -
                  describe "and headers are provided" do
         | 
| 87 | 
            -
             | 
| 88 | 
            -
                    let(:request_headers) { { "KEY" => "value" } }
         | 
| 30 | 
            +
              end
         | 
| 89 31 |  | 
| 90 | 
            -
             | 
| 91 | 
            -
                      stub_headers.match?(request).should be_true
         | 
| 92 | 
            -
                    end
         | 
| 32 | 
            +
              describe "#match?" do
         | 
| 93 33 |  | 
| 94 | 
            -
             | 
| 34 | 
            +
                let(:request_headers) { { "request_key" => "value" } }
         | 
| 35 | 
            +
                let(:regexpable_stubbed_headers) { double(HttpStub::Models::HashWithRegexpableValues).as_null_object }
         | 
| 95 36 |  | 
| 37 | 
            +
                before(:each) do
         | 
| 38 | 
            +
                  HttpStub::Models::HashWithRegexpableValues.stub!(:new).and_return(regexpable_stubbed_headers)
         | 
| 39 | 
            +
                  HttpStub::Models::RequestHeaderParser.stub!(:parse).with(request).and_return(request_headers)
         | 
| 96 40 | 
             
                end
         | 
| 97 41 |  | 
| 98 | 
            -
                 | 
| 42 | 
            +
                it "should parse the requests headers into a hash" do
         | 
| 43 | 
            +
                  HttpStub::Models::RequestHeaderParser.should_receive(:parse).with(request).and_return(request_headers)
         | 
| 99 44 |  | 
| 100 | 
            -
                   | 
| 101 | 
            -
             | 
| 102 | 
            -
                  describe "and headers are provided" do
         | 
| 45 | 
            +
                  stub_headers.match?(request)
         | 
| 46 | 
            +
                end
         | 
| 103 47 |  | 
| 104 | 
            -
             | 
| 48 | 
            +
                it "should downcase and underscore the keys in the request header hash" do
         | 
| 49 | 
            +
                  request_headers.should_receive(:downcase_and_underscore_keys)
         | 
| 105 50 |  | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
                    end
         | 
| 51 | 
            +
                  stub_headers.match?(request)
         | 
| 52 | 
            +
                end
         | 
| 109 53 |  | 
| 110 | 
            -
             | 
| 54 | 
            +
                it "should delegate to the regexpable representation of the stubbed headers to determine a match" do
         | 
| 55 | 
            +
                  downcased_and_underscored_hash = { "another_request_key" => "value" }
         | 
| 56 | 
            +
                  request_headers.stub!(:downcase_and_underscore_keys).and_return(downcased_and_underscored_hash)
         | 
| 57 | 
            +
                  regexpable_stubbed_headers.should_receive(:match?).with(downcased_and_underscored_hash).and_return(true)
         | 
| 111 58 |  | 
| 59 | 
            +
                  stub_headers.match?(request).should be_true
         | 
| 112 60 | 
             
                end
         | 
| 113 61 |  | 
| 114 62 | 
             
              end
         |