rest-client 2.0.2 → 2.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,9 +2,9 @@ require_relative '_lib'
2
2
 
3
3
  describe RestClient::RawResponse do
4
4
  before do
5
- @tf = double("Tempfile", :read => "the answer is 42", :open => true)
5
+ @tf = double("Tempfile", :read => "the answer is 42", :open => true, :rewind => true)
6
6
  @net_http_res = double('net http response')
7
- @request = double('http request')
7
+ @request = double('restclient request', :redirection_history => nil)
8
8
  @response = RestClient::RawResponse.new(@tf, @net_http_res, @request)
9
9
  end
10
10
 
@@ -15,4 +15,8 @@ describe RestClient::RawResponse do
15
15
  it "exposes a Tempfile" do
16
16
  expect(@response.file).to eq @tf
17
17
  end
18
+
19
+ it "includes AbstractResponse" do
20
+ expect(RestClient::RawResponse.ancestors).to include(RestClient::AbstractResponse)
21
+ end
18
22
  end
@@ -1,23 +1,23 @@
1
1
  require_relative '_lib'
2
2
 
3
- describe RestClient::Request do
3
+ describe RestClient::Request, :include_helpers do
4
4
 
5
5
  context 'params for GET requests' do
6
6
  it "manage params for get requests" do
7
- stub_request(:get, 'http://some/resource?a=b&c=d').with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip, deflate', 'Foo'=>'bar'}).to_return(:body => 'foo', :status => 200)
7
+ stub_request(:get, 'http://some/resource?a=b&c=d').with(:headers => {'Accept'=>'*/*', 'Foo'=>'bar'}).to_return(:body => 'foo', :status => 200)
8
8
  expect(RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :headers => {:foo => :bar, :params => {:a => :b, 'c' => 'd'}}).body).to eq 'foo'
9
9
 
10
- stub_request(:get, 'http://some/resource').with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip, deflate', 'Foo'=>'bar'}).to_return(:body => 'foo', :status => 200)
10
+ stub_request(:get, 'http://some/resource').with(:headers => {'Accept'=>'*/*', 'Foo'=>'bar'}).to_return(:body => 'foo', :status => 200)
11
11
  expect(RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :headers => {:foo => :bar, :params => :a}).body).to eq 'foo'
12
12
  end
13
13
 
14
14
  it 'adds GET params when params are present in URL' do
15
- stub_request(:get, 'http://some/resource?a=b&c=d').with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip, deflate', 'Foo'=>'bar'}).to_return(:body => 'foo', :status => 200)
15
+ stub_request(:get, 'http://some/resource?a=b&c=d').with(:headers => {'Accept'=>'*/*', 'Foo'=>'bar'}).to_return(:body => 'foo', :status => 200)
16
16
  expect(RestClient::Request.execute(:url => 'http://some/resource?a=b', :method => :get, :headers => {:foo => :bar, :params => {:c => 'd'}}).body).to eq 'foo'
17
17
  end
18
18
 
19
19
  it 'encodes nested GET params' do
20
- stub_request(:get, 'http://some/resource?a[foo][]=1&a[foo][]=2&a[bar]&b=foo+bar&math=2+%2B+2+%3D%3D+4').with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip, deflate'}).to_return(:body => 'foo', :status => 200)
20
+ stub_request(:get, 'http://some/resource?a[foo][]=1&a[foo][]=2&a[bar]&b=foo+bar&math=2+%2B+2+%3D%3D+4').with(:headers => {'Accept'=>'*/*',}).to_return(:body => 'foo', :status => 200)
21
21
  expect(RestClient::Request.execute(url: 'http://some/resource', method: :get, headers: {
22
22
  params: {
23
23
  a: {
@@ -37,15 +37,15 @@ describe RestClient::Request do
37
37
  block = proc do |http_response|
38
38
  response_value = http_response.body
39
39
  end
40
- stub_request(:get, 'http://some/resource?a=b&c=d').with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip, deflate', 'Foo'=>'bar'}).to_return(:body => 'foo', :status => 200)
40
+ stub_request(:get, 'http://some/resource?a=b&c=d').with(:headers => {'Accept'=>'*/*', 'Foo'=>'bar'}).to_return(:body => 'foo', :status => 200)
41
41
  RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :headers => {:foo => :bar, :params => {:a => :b, 'c' => 'd'}}, :block_response => block)
42
42
  expect(response_value).to eq "foo"
43
43
  end
44
44
 
45
45
  it 'closes payload if not nil' do
46
- test_file = File.new(File.join( File.dirname(File.expand_path(__FILE__)), 'master_shake.jpg'))
46
+ test_file = File.new(test_image_path)
47
47
 
48
- stub_request(:post, 'http://some/resource').with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip, deflate'}).to_return(:body => 'foo', :status => 200)
48
+ stub_request(:post, 'http://some/resource').with(:headers => {'Accept'=>'*/*'}).to_return(:body => 'foo', :status => 200)
49
49
  RestClient::Request.execute(:url => 'http://some/resource', :method => :post, :payload => {:file => test_file})
50
50
 
51
51
  expect(test_file.closed?).to be true
@@ -27,46 +27,22 @@ describe RestClient::Request, :include_helpers do
27
27
  expect(@request.default_headers[:accept]).to eq '*/*'
28
28
  end
29
29
 
30
- describe "compression" do
31
-
32
- it "decodes an uncompressed result body by passing it straight through" do
33
- expect(RestClient::Request.decode(nil, 'xyz')).to eq 'xyz'
34
- end
35
-
36
- it "doesn't fail for nil bodies" do
37
- expect(RestClient::Request.decode('gzip', nil)).to be_nil
38
- end
39
-
40
-
41
- it "decodes a gzip body" do
42
- expect(RestClient::Request.decode('gzip', "\037\213\b\b\006'\252H\000\003t\000\313T\317UH\257\312,HM\341\002\000G\242(\r\v\000\000\000")).to eq "i'm gziped\n"
43
- end
44
-
45
- it "ingores gzip for empty bodies" do
46
- expect(RestClient::Request.decode('gzip', '')).to be_empty
47
- end
48
-
49
- it "decodes a deflated body" do
50
- expect(RestClient::Request.decode('deflate', "x\234+\316\317MUHIM\313I,IMQ(I\255(\001\000A\223\006\363")).to eq "some deflated text"
51
- end
52
- end
53
-
54
30
  it "processes a successful result" do
55
- res = response_double
31
+ res = res_double
56
32
  allow(res).to receive(:code).and_return("200")
57
33
  allow(res).to receive(:body).and_return('body')
58
34
  allow(res).to receive(:[]).with('content-encoding').and_return(nil)
59
- expect(@request.send(:process_result, res).body).to eq 'body'
60
- expect(@request.send(:process_result, res).to_s).to eq 'body'
35
+ expect(@request.send(:process_result, res, Time.now).body).to eq 'body'
36
+ expect(@request.send(:process_result, res, Time.now).to_s).to eq 'body'
61
37
  end
62
38
 
63
39
  it "doesn't classify successful requests as failed" do
64
40
  203.upto(207) do |code|
65
- res = response_double
41
+ res = res_double
66
42
  allow(res).to receive(:code).and_return(code.to_s)
67
43
  allow(res).to receive(:body).and_return("")
68
44
  allow(res).to receive(:[]).with('content-encoding').and_return(nil)
69
- expect(@request.send(:process_result, res)).to be_empty
45
+ expect(@request.send(:process_result, res, Time.now)).to be_empty
70
46
  end
71
47
  end
72
48
 
@@ -315,7 +291,7 @@ describe RestClient::Request, :include_helpers do
315
291
 
316
292
  describe "user headers" do
317
293
  it "merges user headers with the default headers" do
318
- expect(@request).to receive(:default_headers).and_return({ :accept => '*/*', :accept_encoding => 'gzip, deflate' })
294
+ expect(@request).to receive(:default_headers).and_return({:accept => '*/*'})
319
295
  headers = @request.make_headers("Accept" => "application/json", :accept_encoding => 'gzip')
320
296
  expect(headers).to have_key "Accept-Encoding"
321
297
  expect(headers["Accept-Encoding"]).to eq "gzip"
@@ -472,12 +448,13 @@ describe RestClient::Request, :include_helpers do
472
448
  end
473
449
 
474
450
  it "does not attempt to send credentials if Authorization header is set" do
475
- @request.headers['Authorization'] = 'Token abc123'
476
- allow(@request).to receive(:user).and_return('joe')
477
- allow(@request).to receive(:password).and_return('mypass')
478
- req = double("request")
479
- expect(req).not_to receive(:basic_auth)
480
- @request.send(:setup_credentials, req)
451
+ ['Authorization', 'authorization', 'auTHORization', :authorization].each do |authorization|
452
+ headers = {authorization => 'Token abc123'}
453
+ request = RestClient::Request.new(method: :get, url: 'http://some/resource', headers: headers, user: 'joe', password: 'mypass')
454
+ req = double("net::http request")
455
+ expect(req).not_to receive(:basic_auth)
456
+ request.send(:setup_credentials, req)
457
+ end
481
458
  end
482
459
  end
483
460
 
@@ -535,25 +512,25 @@ describe RestClient::Request, :include_helpers do
535
512
 
536
513
  describe "exception" do
537
514
  it "raises Unauthorized when the response is 401" do
538
- res = response_double(:code => '401', :[] => ['content-encoding' => ''], :body => '' )
539
- expect { @request.send(:process_result, res) }.to raise_error(RestClient::Unauthorized)
515
+ res = res_double(:code => '401', :[] => ['content-encoding' => ''], :body => '' )
516
+ expect { @request.send(:process_result, res, Time.now) }.to raise_error(RestClient::Unauthorized)
540
517
  end
541
518
 
542
519
  it "raises ResourceNotFound when the response is 404" do
543
- res = response_double(:code => '404', :[] => ['content-encoding' => ''], :body => '' )
544
- expect { @request.send(:process_result, res) }.to raise_error(RestClient::ResourceNotFound)
520
+ res = res_double(:code => '404', :[] => ['content-encoding' => ''], :body => '' )
521
+ expect { @request.send(:process_result, res, Time.now) }.to raise_error(RestClient::ResourceNotFound)
545
522
  end
546
523
 
547
524
  it "raises RequestFailed otherwise" do
548
- res = response_double(:code => '500', :[] => ['content-encoding' => ''], :body => '' )
549
- expect { @request.send(:process_result, res) }.to raise_error(RestClient::InternalServerError)
525
+ res = res_double(:code => '500', :[] => ['content-encoding' => ''], :body => '' )
526
+ expect { @request.send(:process_result, res, Time.now) }.to raise_error(RestClient::InternalServerError)
550
527
  end
551
528
  end
552
529
 
553
530
  describe "block usage" do
554
531
  it "returns what asked to" do
555
- res = response_double(:code => '401', :[] => ['content-encoding' => ''], :body => '' )
556
- expect(@request.send(:process_result, res){|response, request| "foo"}).to eq "foo"
532
+ res = res_double(:code => '401', :[] => ['content-encoding' => ''], :body => '' )
533
+ expect(@request.send(:process_result, res, Time.now){|response, request| "foo"}).to eq "foo"
557
534
  end
558
535
  end
559
536
 
@@ -644,64 +621,74 @@ describe RestClient::Request, :include_helpers do
644
621
  it "logs a get request" do
645
622
  log = RestClient.log = []
646
623
  RestClient::Request.new(:method => :get, :url => 'http://url', :headers => {:user_agent => 'rest-client'}).log_request
647
- expect(log[0]).to eq %Q{RestClient.get "http://url", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate", "User-Agent"=>"rest-client"\n}
624
+ expect(log[0]).to eq %Q{RestClient.get "http://url", "Accept"=>"*/*", "User-Agent"=>"rest-client"\n}
648
625
  end
649
626
 
650
627
  it "logs a post request with a small payload" do
651
628
  log = RestClient.log = []
652
629
  RestClient::Request.new(:method => :post, :url => 'http://url', :payload => 'foo', :headers => {:user_agent => 'rest-client'}).log_request
653
- expect(log[0]).to eq %Q{RestClient.post "http://url", "foo", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate", "Content-Length"=>"3", "User-Agent"=>"rest-client"\n}
630
+ expect(log[0]).to eq %Q{RestClient.post "http://url", "foo", "Accept"=>"*/*", "Content-Length"=>"3", "User-Agent"=>"rest-client"\n}
654
631
  end
655
632
 
656
633
  it "logs a post request with a large payload" do
657
634
  log = RestClient.log = []
658
635
  RestClient::Request.new(:method => :post, :url => 'http://url', :payload => ('x' * 1000), :headers => {:user_agent => 'rest-client'}).log_request
659
- expect(log[0]).to eq %Q{RestClient.post "http://url", 1000 byte(s) length, "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate", "Content-Length"=>"1000", "User-Agent"=>"rest-client"\n}
636
+ expect(log[0]).to eq %Q{RestClient.post "http://url", 1000 byte(s) length, "Accept"=>"*/*", "Content-Length"=>"1000", "User-Agent"=>"rest-client"\n}
660
637
  end
661
638
 
662
639
  it "logs input headers as a hash" do
663
640
  log = RestClient.log = []
664
641
  RestClient::Request.new(:method => :get, :url => 'http://url', :headers => { :accept => 'text/plain', :user_agent => 'rest-client' }).log_request
665
- expect(log[0]).to eq %Q{RestClient.get "http://url", "Accept"=>"text/plain", "Accept-Encoding"=>"gzip, deflate", "User-Agent"=>"rest-client"\n}
642
+ expect(log[0]).to eq %Q{RestClient.get "http://url", "Accept"=>"text/plain", "User-Agent"=>"rest-client"\n}
666
643
  end
667
644
 
668
645
  it "logs a response including the status code, content type, and result body size in bytes" do
669
646
  log = RestClient.log = []
670
- res = double('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
647
+ res = res_double(code: '200', class: Net::HTTPOK, body: 'abcd')
671
648
  allow(res).to receive(:[]).with('Content-type').and_return('text/html')
672
- @request.log_response res
673
- expect(log[0]).to eq "# => 200 OK | text/html 4 bytes\n"
649
+ response = response_from_res_double(res, @request)
650
+ response.log_response
651
+ expect(log).to eq ["# => 200 OK | text/html 4 bytes, 1.00s\n"]
674
652
  end
675
653
 
676
654
  it "logs a response with a nil Content-type" do
677
655
  log = RestClient.log = []
678
- res = double('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
656
+ res = res_double(code: '200', class: Net::HTTPOK, body: 'abcd')
679
657
  allow(res).to receive(:[]).with('Content-type').and_return(nil)
680
- @request.log_response res
681
- expect(log[0]).to eq "# => 200 OK | 4 bytes\n"
658
+ response = response_from_res_double(res, @request)
659
+ response.log_response
660
+ expect(log).to eq ["# => 200 OK | 4 bytes, 1.00s\n"]
682
661
  end
683
662
 
684
663
  it "logs a response with a nil body" do
685
664
  log = RestClient.log = []
686
- res = double('result', :code => '200', :class => Net::HTTPOK, :body => nil)
665
+ res = res_double(code: '200', class: Net::HTTPOK, body: nil)
687
666
  allow(res).to receive(:[]).with('Content-type').and_return('text/html; charset=utf-8')
688
- @request.log_response res
689
- expect(log[0]).to eq "# => 200 OK | text/html 0 bytes\n"
667
+ response = response_from_res_double(res, @request)
668
+ response.log_response
669
+ expect(log).to eq ["# => 200 OK | text/html 0 bytes, 1.00s\n"]
690
670
  end
691
671
 
692
672
  it 'does not log request password' do
693
673
  log = RestClient.log = []
694
674
  RestClient::Request.new(:method => :get, :url => 'http://user:password@url', :headers => {:user_agent => 'rest-client'}).log_request
695
- expect(log[0]).to eq %Q{RestClient.get "http://user:REDACTED@url", "Accept"=>"*/*", "Accept-Encoding"=>"gzip, deflate", "User-Agent"=>"rest-client"\n}
675
+ expect(log[0]).to eq %Q{RestClient.get "http://user:REDACTED@url", "Accept"=>"*/*", "User-Agent"=>"rest-client"\n}
676
+ end
677
+
678
+ it 'logs to a passed logger, if provided' do
679
+ logger = double('logger', '<<' => true)
680
+ expect(logger).to receive(:<<)
681
+ RestClient::Request.new(:method => :get, :url => 'http://user:password@url', log: logger).log_request
696
682
  end
697
683
  end
698
684
 
699
685
  it "strips the charset from the response content type" do
700
686
  log = RestClient.log = []
701
- res = double('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
687
+ res = res_double(code: '200', class: Net::HTTPOK, body: 'abcd')
702
688
  allow(res).to receive(:[]).with('Content-type').and_return('text/html; charset=utf-8')
703
- @request.log_response res
704
- expect(log[0]).to eq "# => 200 OK | text/html 4 bytes\n"
689
+ response = response_from_res_double(res, @request)
690
+ response.log_response
691
+ expect(log).to eq ["# => 200 OK | text/html 4 bytes, 1.00s\n"]
705
692
  end
706
693
 
707
694
  describe "timeout" do
@@ -1149,7 +1136,7 @@ describe RestClient::Request, :include_helpers do
1149
1136
  )
1150
1137
  net_http_res = Net::HTTPNoContent.new("", "204", "No Content")
1151
1138
  allow(net_http_res).to receive(:read_body).and_return(nil)
1152
- expect(@http).to receive(:request).and_return(@request.send(:fetch_body, net_http_res))
1139
+ expect(@http).to receive(:request).and_return(net_http_res)
1153
1140
  response = @request.send(:transmit, @uri, 'req', 'payload')
1154
1141
  expect(response).not_to be_nil
1155
1142
  expect(response.code).to eq 204
@@ -1167,7 +1154,8 @@ describe RestClient::Request, :include_helpers do
1167
1154
 
1168
1155
  net_http_res = Net::HTTPOK.new(nil, "200", "body")
1169
1156
  allow(net_http_res).to receive(:read_body).and_return("body")
1170
- @request.send(:fetch_body, net_http_res)
1157
+ received_tempfile = @request.send(:fetch_body_to_tempfile, net_http_res)
1158
+ expect(received_tempfile).to eq tempfile
1171
1159
  end
1172
1160
  end
1173
1161
 
@@ -7,37 +7,37 @@ describe RestClient::Resource do
7
7
 
8
8
  context "Resource delegation" do
9
9
  it "GET" do
10
- expect(RestClient::Request).to receive(:execute).with(:method => :get, :url => 'http://some/resource', :headers => {'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
10
+ expect(RestClient::Request).to receive(:execute).with(:method => :get, :url => 'http://some/resource', :headers => {'X-Something' => '1'}, :user => 'jane', :password => 'mypass', :log => nil)
11
11
  @resource.get
12
12
  end
13
13
 
14
14
  it "HEAD" do
15
- expect(RestClient::Request).to receive(:execute).with(:method => :head, :url => 'http://some/resource', :headers => {'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
15
+ expect(RestClient::Request).to receive(:execute).with(:method => :head, :url => 'http://some/resource', :headers => {'X-Something' => '1'}, :user => 'jane', :password => 'mypass', :log => nil)
16
16
  @resource.head
17
17
  end
18
18
 
19
19
  it "POST" do
20
- expect(RestClient::Request).to receive(:execute).with(:method => :post, :url => 'http://some/resource', :payload => 'abc', :headers => {:content_type => 'image/jpg', 'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
20
+ expect(RestClient::Request).to receive(:execute).with(:method => :post, :url => 'http://some/resource', :payload => 'abc', :headers => {:content_type => 'image/jpg', 'X-Something' => '1'}, :user => 'jane', :password => 'mypass', :log => nil)
21
21
  @resource.post 'abc', :content_type => 'image/jpg'
22
22
  end
23
23
 
24
24
  it "PUT" do
25
- expect(RestClient::Request).to receive(:execute).with(:method => :put, :url => 'http://some/resource', :payload => 'abc', :headers => {:content_type => 'image/jpg', 'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
25
+ expect(RestClient::Request).to receive(:execute).with(:method => :put, :url => 'http://some/resource', :payload => 'abc', :headers => {:content_type => 'image/jpg', 'X-Something' => '1'}, :user => 'jane', :password => 'mypass', :log => nil)
26
26
  @resource.put 'abc', :content_type => 'image/jpg'
27
27
  end
28
28
 
29
29
  it "PATCH" do
30
- expect(RestClient::Request).to receive(:execute).with(:method => :patch, :url => 'http://some/resource', :payload => 'abc', :headers => {:content_type => 'image/jpg', 'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
30
+ expect(RestClient::Request).to receive(:execute).with(:method => :patch, :url => 'http://some/resource', :payload => 'abc', :headers => {:content_type => 'image/jpg', 'X-Something' => '1'}, :user => 'jane', :password => 'mypass', :log => nil)
31
31
  @resource.patch 'abc', :content_type => 'image/jpg'
32
32
  end
33
33
 
34
34
  it "DELETE" do
35
- expect(RestClient::Request).to receive(:execute).with(:method => :delete, :url => 'http://some/resource', :headers => {'X-Something' => '1'}, :user => 'jane', :password => 'mypass')
35
+ expect(RestClient::Request).to receive(:execute).with(:method => :delete, :url => 'http://some/resource', :headers => {'X-Something' => '1'}, :user => 'jane', :password => 'mypass', :log => nil)
36
36
  @resource.delete
37
37
  end
38
38
 
39
39
  it "overrides resource headers" do
40
- expect(RestClient::Request).to receive(:execute).with(:method => :get, :url => 'http://some/resource', :headers => {'X-Something' => '2'}, :user => 'jane', :password => 'mypass')
40
+ expect(RestClient::Request).to receive(:execute).with(:method => :get, :url => 'http://some/resource', :headers => {'X-Something' => '2'}, :user => 'jane', :password => 'mypass', :log => nil)
41
41
  @resource.get 'X-Something' => '2'
42
42
  end
43
43
  end
@@ -2,10 +2,10 @@ require_relative '_lib'
2
2
 
3
3
  describe RestClient::Response, :include_helpers do
4
4
  before do
5
- @net_http_res = double('net http response', :to_hash => {"Status" => ["200 OK"]}, :code => 200)
5
+ @net_http_res = res_double(to_hash: {'Status' => ['200 OK']}, code: '200', body: 'abc')
6
6
  @example_url = 'http://example.com'
7
7
  @request = request_double(url: @example_url, method: 'get')
8
- @response = RestClient::Response.create('abc', @net_http_res, @request)
8
+ @response = response_from_res_double(@net_http_res, @request, duration: 1)
9
9
  end
10
10
 
11
11
  it "behaves like string" do
@@ -17,6 +17,7 @@ describe RestClient::Response, :include_helpers do
17
17
  end
18
18
 
19
19
  it "accepts nil strings and sets it to empty for the case of HEAD" do
20
+ # TODO
20
21
  expect(RestClient::Response.create(nil, @net_http_res, @request).to_s).to eq ""
21
22
  end
22
23
 
@@ -27,13 +28,13 @@ describe RestClient::Response, :include_helpers do
27
28
  end
28
29
 
29
30
  it 'handles multiple headers by joining with comma' do
30
- @net_http_res = double('net http response', :to_hash => {'My-Header' => ['foo', 'bar']}, :code => 200)
31
- @example_url = 'http://example.com'
32
- @request = request_double(url: @example_url, method: 'get')
33
- @response = RestClient::Response.create('abc', @net_http_res, @request)
31
+ net_http_res = res_double(to_hash: {'My-Header' => ['foo', 'bar']}, code: '200', body: nil)
32
+ example_url = 'http://example.com'
33
+ request = request_double(url: example_url, method: 'get')
34
+ response = response_from_res_double(net_http_res, request)
34
35
 
35
- expect(@response.raw_headers['My-Header']).to eq ['foo', 'bar']
36
- expect(@response.headers[:my_header]).to eq 'foo, bar'
36
+ expect(response.raw_headers['My-Header']).to eq ['foo', 'bar']
37
+ expect(response.headers[:my_header]).to eq 'foo, bar'
37
38
  end
38
39
  end
39
40
 
@@ -72,7 +73,7 @@ describe RestClient::Response, :include_helpers do
72
73
  describe "exceptions processing" do
73
74
  it "should return itself for normal codes" do
74
75
  (200..206).each do |code|
75
- net_http_res = response_double(:code => '200')
76
+ net_http_res = res_double(:code => '200')
76
77
  resp = RestClient::Response.create('abc', net_http_res, @request)
77
78
  resp.return!
78
79
  end
@@ -81,7 +82,7 @@ describe RestClient::Response, :include_helpers do
81
82
  it "should throw an exception for other codes" do
82
83
  RestClient::Exceptions::EXCEPTIONS_MAP.each_pair do |code, exc|
83
84
  unless (200..207).include? code
84
- net_http_res = response_double(:code => code.to_i)
85
+ net_http_res = res_double(:code => code.to_i)
85
86
  resp = RestClient::Response.create('abc', net_http_res, @request)
86
87
  allow(@request).to receive(:max_redirects).and_return(5)
87
88
  expect { resp.return! }.to raise_error(exc)
@@ -131,28 +132,27 @@ describe RestClient::Response, :include_helpers do
131
132
  end
132
133
 
133
134
  it "doesn't follow a 301 when the request is a post" do
134
- net_http_res = response_double(:code => 301)
135
+ net_http_res = res_double(:code => 301)
136
+ response = response_from_res_double(net_http_res, request_double(method: 'post'))
135
137
 
136
- response = RestClient::Response.create('abc', net_http_res,
137
- request_double(method: 'post'))
138
138
  expect {
139
139
  response.return!
140
140
  }.to raise_error(RestClient::MovedPermanently)
141
141
  end
142
142
 
143
143
  it "doesn't follow a 302 when the request is a post" do
144
- net_http_res = response_double(:code => 302)
145
- response = RestClient::Response.create('abc', net_http_res,
146
- request_double(method: 'post'))
144
+ net_http_res = res_double(:code => 302)
145
+ response = response_from_res_double(net_http_res, request_double(method: 'post'))
146
+
147
147
  expect {
148
148
  response.return!
149
149
  }.to raise_error(RestClient::Found)
150
150
  end
151
151
 
152
152
  it "doesn't follow a 307 when the request is a post" do
153
- net_http_res = response_double(:code => 307)
154
- response = RestClient::Response.create('abc', net_http_res,
155
- request_double(method: 'post'))
153
+ net_http_res = res_double(:code => 307)
154
+ response = response_from_res_double(net_http_res, request_double(method: 'post'))
155
+
156
156
  expect(response).not_to receive(:follow_redirection)
157
157
  expect {
158
158
  response.return!
@@ -160,9 +160,8 @@ describe RestClient::Response, :include_helpers do
160
160
  end
161
161
 
162
162
  it "doesn't follow a redirection when the request is a put" do
163
- net_http_res = response_double(:code => 301)
164
- response = RestClient::Response.create('abc', net_http_res,
165
- request_double(method: 'put'))
163
+ net_http_res = res_double(:code => 301)
164
+ response = response_from_res_double(net_http_res, request_double(method: 'put'))
166
165
  expect {
167
166
  response.return!
168
167
  }.to raise_error(RestClient::MovedPermanently)
@@ -238,4 +237,16 @@ describe RestClient::Response, :include_helpers do
238
237
  end
239
238
  end
240
239
 
240
+ describe "logging" do
241
+ it "uses the request's logger" do
242
+ stub_request(:get, 'http://some/resource').to_return(body: 'potato', status: 200)
243
+
244
+ logger = double('logger', '<<' => true)
245
+ request = RestClient::Request.new(url: 'http://some/resource', method: :get, log: logger)
246
+
247
+ expect(logger).to receive(:<<)
248
+
249
+ request.execute
250
+ end
251
+ end
241
252
  end