forked from vcr/vcr
-
Notifications
You must be signed in to change notification settings - Fork 15
/
net_http_spec.rb
80 lines (67 loc) · 3.55 KB
/
net_http_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
require 'spec_helper'
describe "Net::HTTP Extensions", :with_monkey_patches => :vcr do
before(:all) { VCR::SinatraApp.port } # ensure the server is started before instantiating any Net::HTTP instances
let(:uri) { URI.parse("http://localhost:#{VCR::SinatraApp.port}/") }
before(:each) { VCR.stub(:http_stubbing_adapter).and_return(VCR::HttpStubbingAdapters::FakeWeb) }
it 'checks if the request is stubbed using a VCR::Request' do
VCR.http_stubbing_adapter.should_receive(:request_stubbed?) do |request, _|
request.uri.should eq("http://localhost:#{VCR::SinatraApp.port}/")
request.method.should eq(:get)
true
end
Net::HTTP.get(uri)
end
it "checks if the request is stubbed using the current VCR cassette's match_request_on option" do
VCR.should_receive(:current_cassette).and_return(stub(:match_requests_on => [:body, :header]))
VCR.http_stubbing_adapter.should_receive(:request_stubbed?).with(anything, [:body, :header]).and_return(true)
Net::HTTP.get(uri)
end
it "checks if the request is stubbed using the default match attributes when there is no current cassette" do
VCR.should_receive(:current_cassette).and_return(nil)
VCR.http_stubbing_adapter.should_receive(:request_stubbed?).with(anything, VCR::RequestMatcher::DEFAULT_MATCH_ATTRIBUTES).and_return(true)
Net::HTTP.get(uri)
end
describe 'a request that is not registered with the http stubbing adapter' do
before(:each) do
VCR.http_stubbing_adapter.stub(:request_stubbed?).and_return(false)
end
def perform_get_with_returning_block
Net::HTTP.new('localhost', VCR::SinatraApp.port).request(Net::HTTP::Get.new('/', {})) do |response|
return response
end
end
it "does not record headers for which Net::HTTP sets defaults near the end of the real request" do
VCR.should_receive(:record_http_interaction) do |interaction|
interaction.request.headers.should_not have_key('content-type')
interaction.request.headers.should_not have_key('host')
end
Net::HTTP.new('localhost', VCR::SinatraApp.port).send_request('POST', '/', '', { 'x-http-user' => 'me' })
end
it "records headers for which Net::HTTP usually sets defaults when the user manually sets their values" do
VCR.should_receive(:record_http_interaction) do |interaction|
interaction.request.headers['content-type'].should eq(['foo/bar'])
interaction.request.headers['host'].should eq(['my-example.com'])
end
Net::HTTP.new('localhost', VCR::SinatraApp.port).send_request('POST', '/', '', { 'Content-Type' => 'foo/bar', 'Host' => 'my-example.com' })
end
it 'calls VCR.record_http_interaction' do
VCR.should_receive(:record_http_interaction).with(instance_of(VCR::HTTPInteraction))
Net::HTTP.get(uri)
end
it 'calls #record_http_interaction only once, even when Net::HTTP internally recursively calls #request' do
VCR.should_receive(:record_http_interaction).once
Net::HTTP.new('localhost', VCR::SinatraApp.port).post('/', nil)
end
it 'calls #record_http_interaction when Net::HTTP#request is called with a block with a return statement' do
VCR.should_receive(:record_http_interaction).once
perform_get_with_returning_block
end
end
describe 'a request that is registered with the http stubbing adapter' do
it 'does not call #record_http_interaction on the current cassette' do
VCR.http_stubbing_adapter.stub(:request_stubbed?).and_return(true)
VCR.should_receive(:record_http_interaction).never
Net::HTTP.get(uri)
end
end
end