rest-client 1.6.7 → 1.8.0

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.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +14 -0
  5. data/AUTHORS +81 -0
  6. data/Gemfile +11 -0
  7. data/LICENSE +21 -0
  8. data/README.rdoc +63 -24
  9. data/Rakefile +85 -35
  10. data/bin/restclient +9 -8
  11. data/history.md +63 -1
  12. data/lib/restclient/abstract_response.rb +44 -15
  13. data/lib/restclient/exceptions.rb +20 -10
  14. data/lib/restclient/payload.rb +21 -18
  15. data/lib/restclient/platform.rb +30 -0
  16. data/lib/restclient/raw_response.rb +3 -2
  17. data/lib/restclient/request.rb +368 -63
  18. data/lib/restclient/resource.rb +3 -4
  19. data/lib/restclient/response.rb +2 -5
  20. data/lib/restclient/version.rb +7 -0
  21. data/lib/restclient/windows/root_certs.rb +105 -0
  22. data/lib/restclient/windows.rb +8 -0
  23. data/lib/restclient.rb +6 -15
  24. data/rest-client.gemspec +30 -0
  25. data/rest-client.windows.gemspec +19 -0
  26. data/spec/integration/capath_digicert/244b5494.0 +19 -0
  27. data/spec/integration/capath_digicert/81b9768f.0 +19 -0
  28. data/spec/integration/capath_digicert/README +8 -0
  29. data/spec/integration/capath_digicert/digicert.crt +19 -0
  30. data/spec/integration/capath_verisign/415660c1.0 +14 -0
  31. data/spec/integration/capath_verisign/7651b327.0 +14 -0
  32. data/spec/integration/capath_verisign/README +8 -0
  33. data/spec/integration/capath_verisign/verisign.crt +14 -0
  34. data/spec/integration/certs/digicert.crt +19 -0
  35. data/spec/{integration_spec.rb → integration/integration_spec.rb} +10 -13
  36. data/spec/integration/request_spec.rb +86 -7
  37. data/spec/spec_helper.rb +2 -0
  38. data/spec/{abstract_response_spec.rb → unit/abstract_response_spec.rb} +18 -15
  39. data/spec/{exceptions_spec.rb → unit/exceptions_spec.rb} +17 -20
  40. data/spec/unit/master_shake.jpg +0 -0
  41. data/spec/{payload_spec.rb → unit/payload_spec.rb} +42 -31
  42. data/spec/unit/raw_response_spec.rb +18 -0
  43. data/spec/{request2_spec.rb → unit/request2_spec.rb} +6 -14
  44. data/spec/unit/request_spec.rb +917 -0
  45. data/spec/{resource_spec.rb → unit/resource_spec.rb} +27 -31
  46. data/spec/{response_spec.rb → unit/response_spec.rb} +63 -57
  47. data/spec/{restclient_spec.rb → unit/restclient_spec.rb} +8 -2
  48. data/spec/unit/windows/root_certs_spec.rb +22 -0
  49. metadata +210 -112
  50. data/VERSION +0 -1
  51. data/lib/restclient/net_http_ext.rb +0 -55
  52. data/spec/base.rb +0 -16
  53. data/spec/integration/certs/equifax.crt +0 -19
  54. data/spec/master_shake.jpg +0 -0
  55. data/spec/raw_response_spec.rb +0 -17
  56. data/spec/request_spec.rb +0 -529
@@ -1,7 +1,4 @@
1
- require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
2
-
3
- require 'webmock/rspec'
4
- include WebMock
1
+ require 'spec_helper'
5
2
 
6
3
  describe RestClient::Resource do
7
4
  before do
@@ -51,83 +48,82 @@ describe RestClient::Resource do
51
48
 
52
49
  it "is backwards compatible with previous constructor" do
53
50
  @resource = RestClient::Resource.new('http://some/resource', 'user', 'pass')
54
- @resource.user.should == 'user'
55
- @resource.password.should == 'pass'
51
+ @resource.user.should eq 'user'
52
+ @resource.password.should eq 'pass'
56
53
  end
57
54
 
58
55
  it "concatenates urls, inserting a slash when it needs one" do
59
- @resource.concat_urls('http://example.com', 'resource').should == 'http://example.com/resource'
56
+ @resource.concat_urls('http://example.com', 'resource').should eq 'http://example.com/resource'
60
57
  end
61
58
 
62
59
  it "concatenates urls, using no slash if the first url ends with a slash" do
63
- @resource.concat_urls('http://example.com/', 'resource').should == 'http://example.com/resource'
60
+ @resource.concat_urls('http://example.com/', 'resource').should eq 'http://example.com/resource'
64
61
  end
65
62
 
66
63
  it "concatenates urls, using no slash if the second url starts with a slash" do
67
- @resource.concat_urls('http://example.com', '/resource').should == 'http://example.com/resource'
64
+ @resource.concat_urls('http://example.com', '/resource').should eq 'http://example.com/resource'
68
65
  end
69
66
 
70
67
  it "concatenates even non-string urls, :posts + 1 => 'posts/1'" do
71
- @resource.concat_urls(:posts, 1).should == 'posts/1'
68
+ @resource.concat_urls(:posts, 1).should eq 'posts/1'
72
69
  end
73
70
 
74
71
  it "offers subresources via []" do
75
72
  parent = RestClient::Resource.new('http://example.com')
76
- parent['posts'].url.should == 'http://example.com/posts'
73
+ parent['posts'].url.should eq 'http://example.com/posts'
77
74
  end
78
75
 
79
76
  it "transports options to subresources" do
80
77
  parent = RestClient::Resource.new('http://example.com', :user => 'user', :password => 'password')
81
- parent['posts'].user.should == 'user'
82
- parent['posts'].password.should == 'password'
78
+ parent['posts'].user.should eq 'user'
79
+ parent['posts'].password.should eq 'password'
83
80
  end
84
81
 
85
82
  it "passes a given block to subresources" do
86
- block = Proc.new{|r| r}
83
+ block = proc {|r| r}
87
84
  parent = RestClient::Resource.new('http://example.com', &block)
88
- parent['posts'].block.should == block
85
+ parent['posts'].block.should eq block
89
86
  end
90
87
 
91
88
  it "the block should be overrideable" do
92
- block1 = Proc.new{|r| r}
93
- block2 = Proc.new{|r| r}
89
+ block1 = proc {|r| r}
90
+ block2 = proc {|r| }
94
91
  parent = RestClient::Resource.new('http://example.com', &block1)
95
- # parent['posts', &block2].block.should == block2 # ruby 1.9 syntax
96
- parent.send(:[], 'posts', &block2).block.should == block2
92
+ # parent['posts', &block2].block.should eq block2 # ruby 1.9 syntax
93
+ parent.send(:[], 'posts', &block2).block.should eq block2
94
+ parent.send(:[], 'posts', &block2).block.should_not eq block1
97
95
  end
98
96
 
99
97
  it "the block should be overrideable in ruby 1.9 syntax" do
100
- block = Proc.new{|r| r}
101
- parent = RestClient::Resource.new('http://example.com', &block)
102
- r19_syntax = %q{
103
- parent['posts', &->(r){r}].block.should_not == block
104
- }
105
- if is_ruby_19?
106
- eval(r19_syntax)
107
- end
98
+ block1 = proc {|r| r}
99
+ block2 = ->(r) {}
100
+
101
+ parent = RestClient::Resource.new('http://example.com', &block1)
102
+ parent['posts', &block2].block.should eq block2
103
+ parent['posts', &block2].block.should_not eq block1
108
104
  end
109
105
 
110
106
  it "prints its url with to_s" do
111
- RestClient::Resource.new('x').to_s.should == 'x'
107
+ RestClient::Resource.new('x').to_s.should eq 'x'
112
108
  end
113
109
 
114
110
  describe 'block' do
115
111
  it 'can use block when creating the resource' do
116
112
  stub_request(:get, 'www.example.com').to_return(:body => '', :status => 404)
117
113
  resource = RestClient::Resource.new('www.example.com') { |response, request| 'foo' }
118
- resource.get.should == 'foo'
114
+ resource.get.should eq 'foo'
119
115
  end
120
116
 
121
117
  it 'can use block when executing the resource' do
122
118
  stub_request(:get, 'www.example.com').to_return(:body => '', :status => 404)
123
119
  resource = RestClient::Resource.new('www.example.com')
124
- resource.get { |response, request| 'foo' }.should == 'foo'
120
+ resource.get { |response, request| 'foo' }.should eq 'foo'
125
121
  end
126
122
 
127
123
  it 'execution block override resource block' do
128
124
  stub_request(:get, 'www.example.com').to_return(:body => '', :status => 404)
129
125
  resource = RestClient::Resource.new('www.example.com') { |response, request| 'foo' }
130
- resource.get { |response, request| 'bar' }.should == 'bar'
126
+ resource.get { |response, request| 'bar' }.should eq 'bar'
131
127
  end
132
128
 
133
129
  end
@@ -1,65 +1,65 @@
1
- require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
2
-
3
- require 'webmock/rspec'
4
- include WebMock
1
+ require 'spec_helper'
5
2
 
6
3
  describe RestClient::Response do
7
4
  before do
8
- @net_http_res = mock('net http response', :to_hash => {"Status" => ["200 OK"]}, :code => 200)
9
- @request = mock('http request', :user => nil, :password => nil)
10
- @response = RestClient::Response.create('abc', @net_http_res, {})
5
+ @net_http_res = double('net http response', :to_hash => {"Status" => ["200 OK"]}, :code => 200)
6
+ @example_url = 'http://example.com'
7
+ @request = double('http request', :user => nil, :password => nil, :url => @example_url)
8
+ @response = RestClient::Response.create('abc', @net_http_res, {}, @request)
11
9
  end
12
10
 
13
11
  it "behaves like string" do
14
- @response.should.to_s == 'abc'
15
- @response.to_str.should == 'abc'
16
- @response.to_i.should == 200
12
+ @response.to_s.should eq 'abc'
13
+ @response.to_str.should eq 'abc'
14
+ @response.to_i.should eq 200
17
15
  end
18
16
 
19
17
  it "accepts nil strings and sets it to empty for the case of HEAD" do
20
- RestClient::Response.create(nil, @net_http_res, {}).should.to_s == ""
18
+ RestClient::Response.create(nil, @net_http_res, {}, @request).to_s.should eq ""
21
19
  end
22
20
 
23
21
  it "test headers and raw headers" do
24
- @response.raw_headers["Status"][0].should == "200 OK"
25
- @response.headers[:status].should == "200 OK"
22
+ @response.raw_headers["Status"][0].should eq "200 OK"
23
+ @response.headers[:status].should eq "200 OK"
26
24
  end
27
25
 
28
26
  describe "cookie processing" do
29
27
  it "should correctly deal with one Set-Cookie header with one cookie inside" do
30
- net_http_res = mock('net http response', :to_hash => {"etag" => ["\"e1ac1a2df945942ef4cac8116366baad\""], "set-cookie" => ["main_page=main_page_no_rewrite; path=/; expires=Tue, 20-Jan-2015 15:03:14 GMT"]})
31
- response = RestClient::Response.create('abc', net_http_res, {})
32
- response.headers[:set_cookie].should == ["main_page=main_page_no_rewrite; path=/; expires=Tue, 20-Jan-2015 15:03:14 GMT"]
33
- response.cookies.should == { "main_page" => "main_page_no_rewrite" }
28
+ header_val = "main_page=main_page_no_rewrite; path=/; expires=Sat, 10-Jan-2037 15:03:14 GMT".freeze
29
+
30
+ net_http_res = double('net http response', :to_hash => {"etag" => ["\"e1ac1a2df945942ef4cac8116366baad\""], "set-cookie" => [header_val]})
31
+ response = RestClient::Response.create('abc', net_http_res, {}, @request)
32
+ response.headers[:set_cookie].should eq [header_val]
33
+ response.cookies.should eq({ "main_page" => "main_page_no_rewrite" })
34
34
  end
35
35
 
36
36
  it "should correctly deal with multiple cookies [multiple Set-Cookie headers]" do
37
- net_http_res = mock('net http response', :to_hash => {"etag" => ["\"e1ac1a2df945942ef4cac8116366baad\""], "set-cookie" => ["main_page=main_page_no_rewrite; path=/; expires=Tue, 20-Jan-2015 15:03:14 GMT", "remember_me=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT", "user=somebody; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT"]})
38
- response = RestClient::Response.create('abc', net_http_res, {})
39
- response.headers[:set_cookie].should == ["main_page=main_page_no_rewrite; path=/; expires=Tue, 20-Jan-2015 15:03:14 GMT", "remember_me=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT", "user=somebody; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT"]
40
- response.cookies.should == {
41
- "main_page" => "main_page_no_rewrite",
42
- "remember_me" => "",
43
- "user" => "somebody"
44
- }
37
+ net_http_res = double('net http response', :to_hash => {"etag" => ["\"e1ac1a2df945942ef4cac8116366baad\""], "set-cookie" => ["main_page=main_page_no_rewrite; path=/; expires=Sat, 10-Jan-2037 15:03:14 GMT", "remember_me=; path=/; expires=Sat, 10-Jan-2037 00:00:00 GMT", "user=somebody; path=/; expires=Sat, 10-Jan-2037 00:00:00 GMT"]})
38
+ response = RestClient::Response.create('abc', net_http_res, {}, @request)
39
+ response.headers[:set_cookie].should eq ["main_page=main_page_no_rewrite; path=/; expires=Sat, 10-Jan-2037 15:03:14 GMT", "remember_me=; path=/; expires=Sat, 10-Jan-2037 00:00:00 GMT", "user=somebody; path=/; expires=Sat, 10-Jan-2037 00:00:00 GMT"]
40
+ response.cookies.should eq({
41
+ "main_page" => "main_page_no_rewrite",
42
+ "remember_me" => "",
43
+ "user" => "somebody"
44
+ })
45
45
  end
46
46
 
47
47
  it "should correctly deal with multiple cookies [one Set-Cookie header with multiple cookies]" do
48
- net_http_res = mock('net http response', :to_hash => {"etag" => ["\"e1ac1a2df945942ef4cac8116366baad\""], "set-cookie" => ["main_page=main_page_no_rewrite; path=/; expires=Tue, 20-Jan-2015 15:03:14 GMT, remember_me=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT, user=somebody; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT"]})
49
- response = RestClient::Response.create('abc', net_http_res, {})
50
- response.cookies.should == {
51
- "main_page" => "main_page_no_rewrite",
52
- "remember_me" => "",
53
- "user" => "somebody"
54
- }
48
+ net_http_res = double('net http response', :to_hash => {"etag" => ["\"e1ac1a2df945942ef4cac8116366baad\""], "set-cookie" => ["main_page=main_page_no_rewrite; path=/; expires=Sat, 10-Jan-2037 15:03:14 GMT, remember_me=; path=/; expires=Sat, 10-Jan-2037 00:00:00 GMT, user=somebody; path=/; expires=Sat, 10-Jan-2037 00:00:00 GMT"]})
49
+ response = RestClient::Response.create('abc', net_http_res, {}, @request)
50
+ response.cookies.should eq({
51
+ "main_page" => "main_page_no_rewrite",
52
+ "remember_me" => "",
53
+ "user" => "somebody"
54
+ })
55
55
  end
56
56
  end
57
57
 
58
58
  describe "exceptions processing" do
59
59
  it "should return itself for normal codes" do
60
60
  (200..206).each do |code|
61
- net_http_res = mock('net http response', :code => '200')
62
- response = RestClient::Response.create('abc', net_http_res, {})
61
+ net_http_res = double('net http response', :code => '200')
62
+ response = RestClient::Response.create('abc', net_http_res, {}, @request)
63
63
  response.return! @request
64
64
  end
65
65
  end
@@ -67,8 +67,8 @@ describe RestClient::Response do
67
67
  it "should throw an exception for other codes" do
68
68
  RestClient::Exceptions::EXCEPTIONS_MAP.each_key do |code|
69
69
  unless (200..207).include? code
70
- net_http_res = mock('net http response', :code => code.to_i)
71
- response = RestClient::Response.create('abc', net_http_res, {})
70
+ net_http_res = double('net http response', :code => code.to_i)
71
+ response = RestClient::Response.create('abc', net_http_res, {}, @request)
72
72
  lambda { response.return!}.should raise_error
73
73
  end
74
74
  end
@@ -77,86 +77,92 @@ describe RestClient::Response do
77
77
  end
78
78
 
79
79
  describe "redirection" do
80
-
80
+
81
81
  it "follows a redirection when the request is a get" do
82
82
  stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://new/resource'})
83
83
  stub_request(:get, 'http://new/resource').to_return(:body => 'Foo')
84
- RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should == 'Foo'
84
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should eq 'Foo'
85
85
  end
86
86
 
87
87
  it "follows a redirection and keep the parameters" do
88
88
  stub_request(:get, 'http://foo:bar@some/resource').with(:headers => {'Accept' => 'application/json'}).to_return(:body => '', :status => 301, :headers => {'Location' => 'http://new/resource'})
89
89
  stub_request(:get, 'http://foo:bar@new/resource').with(:headers => {'Accept' => 'application/json'}).to_return(:body => 'Foo')
90
- RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :user => 'foo', :password => 'bar', :headers => {:accept => :json}).body.should == 'Foo'
90
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :user => 'foo', :password => 'bar', :headers => {:accept => :json}).body.should eq 'Foo'
91
91
  end
92
92
 
93
93
  it "follows a redirection and keep the cookies" do
94
- stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Set-Cookie' => CGI::Cookie.new('Foo', 'Bar'), 'Location' => 'http://new/resource', })
95
- stub_request(:get, 'http://new/resource').with(:headers => {'Cookie' => 'Foo=Bar'}).to_return(:body => 'Qux')
96
- RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should == 'Qux'
94
+ stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Set-Cookie' => 'Foo=Bar', 'Location' => 'http://some/new_resource', })
95
+ stub_request(:get, 'http://some/new_resource').with(:headers => {'Cookie' => 'Foo=Bar'}).to_return(:body => 'Qux')
96
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should eq 'Qux'
97
+ end
98
+
99
+ it 'does not keep cookies across domains' do
100
+ stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Set-Cookie' => 'Foo=Bar', 'Location' => 'http://new/resource', })
101
+ stub_request(:get, 'http://new/resource').with(:headers => {'Cookie' => ''}).to_return(:body => 'Qux')
102
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should eq 'Qux'
97
103
  end
98
104
 
99
105
  it "doesn't follow a 301 when the request is a post" do
100
- net_http_res = mock('net http response', :code => 301)
101
- response = RestClient::Response.create('abc', net_http_res, {:method => :post})
106
+ net_http_res = double('net http response', :code => 301)
107
+ response = RestClient::Response.create('abc', net_http_res, {:method => :post}, @request)
102
108
  lambda { response.return!(@request)}.should raise_error(RestClient::MovedPermanently)
103
109
  end
104
110
 
105
111
  it "doesn't follow a 302 when the request is a post" do
106
- net_http_res = mock('net http response', :code => 302)
107
- response = RestClient::Response.create('abc', net_http_res, {:method => :post})
112
+ net_http_res = double('net http response', :code => 302)
113
+ response = RestClient::Response.create('abc', net_http_res, {:method => :post}, @request)
108
114
  lambda { response.return!(@request)}.should raise_error(RestClient::Found)
109
115
  end
110
116
 
111
117
  it "doesn't follow a 307 when the request is a post" do
112
- net_http_res = mock('net http response', :code => 307)
113
- response = RestClient::Response.create('abc', net_http_res, {:method => :post})
118
+ net_http_res = double('net http response', :code => 307)
119
+ response = RestClient::Response.create('abc', net_http_res, {:method => :post}, @request)
114
120
  lambda { response.return!(@request)}.should raise_error(RestClient::TemporaryRedirect)
115
121
  end
116
122
 
117
123
  it "doesn't follow a redirection when the request is a put" do
118
- net_http_res = mock('net http response', :code => 301)
119
- response = RestClient::Response.create('abc', net_http_res, {:method => :put})
124
+ net_http_res = double('net http response', :code => 301)
125
+ response = RestClient::Response.create('abc', net_http_res, {:method => :put}, @request)
120
126
  lambda { response.return!(@request)}.should raise_error(RestClient::MovedPermanently)
121
127
  end
122
128
 
123
129
  it "follows a redirection when the request is a post and result is a 303" do
124
130
  stub_request(:put, 'http://some/resource').to_return(:body => '', :status => 303, :headers => {'Location' => 'http://new/resource'})
125
131
  stub_request(:get, 'http://new/resource').to_return(:body => 'Foo')
126
- RestClient::Request.execute(:url => 'http://some/resource', :method => :put).body.should == 'Foo'
132
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :put).body.should eq 'Foo'
127
133
  end
128
134
 
129
135
  it "follows a redirection when the request is a head" do
130
136
  stub_request(:head, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://new/resource'})
131
137
  stub_request(:head, 'http://new/resource').to_return(:body => 'Foo')
132
- RestClient::Request.execute(:url => 'http://some/resource', :method => :head).body.should == 'Foo'
138
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :head).body.should eq 'Foo'
133
139
  end
134
140
 
135
141
  it "handles redirects with relative paths" do
136
142
  stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Location' => 'index'})
137
143
  stub_request(:get, 'http://some/index').to_return(:body => 'Foo')
138
- RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should == 'Foo'
144
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should eq 'Foo'
139
145
  end
140
146
 
141
147
  it "handles redirects with relative path and query string" do
142
148
  stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Location' => 'index?q=1'})
143
149
  stub_request(:get, 'http://some/index?q=1').to_return(:body => 'Foo')
144
- RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should == 'Foo'
150
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should eq 'Foo'
145
151
  end
146
152
 
147
153
  it "follow a redirection when the request is a get and the response is in the 30x range" do
148
154
  stub_request(:get, 'http://some/resource').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://new/resource'})
149
155
  stub_request(:get, 'http://new/resource').to_return(:body => 'Foo')
150
- RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should == 'Foo'
156
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get).body.should eq 'Foo'
151
157
  end
152
-
158
+
153
159
  it "follows no more than 10 redirections before raising error" do
154
160
  stub_request(:get, 'http://some/redirect-1').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://some/redirect-2'})
155
161
  stub_request(:get, 'http://some/redirect-2').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://some/redirect-2'})
156
162
  lambda { RestClient::Request.execute(:url => 'http://some/redirect-1', :method => :get) }.should raise_error(RestClient::MaxRedirectsReached)
157
163
  WebMock.should have_requested(:get, 'http://some/redirect-2').times(10)
158
164
  end
159
-
165
+
160
166
  it "follows no more than max_redirects redirections, if specified" do
161
167
  stub_request(:get, 'http://some/redirect-1').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://some/redirect-2'})
162
168
  stub_request(:get, 'http://some/redirect-2').to_return(:body => '', :status => 301, :headers => {'Location' => 'http://some/redirect-2'})
@@ -1,4 +1,4 @@
1
- require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
1
+ require 'spec_helper'
2
2
 
3
3
  describe RestClient do
4
4
  describe "API" do
@@ -63,11 +63,17 @@ describe RestClient do
63
63
 
64
64
  it "append the log to the requested filename" do
65
65
  RestClient.log = '/tmp/restclient.log'
66
- f = mock('file handle')
66
+ f = double('file handle')
67
67
  File.should_receive(:open).with('/tmp/restclient.log', 'a').and_yield(f)
68
68
  f.should_receive(:puts).with('xyz')
69
69
  RestClient.log << 'xyz'
70
70
  end
71
71
  end
72
72
 
73
+ describe 'version' do
74
+ it 'has a version ~> 1.8.0.alpha' do
75
+ ver = Gem::Version.new(RestClient.version)
76
+ Gem::Requirement.new('~> 1.8.0.alpha').should be_satisfied_by(ver)
77
+ end
78
+ end
73
79
  end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'RestClient::Windows::RootCerts',
4
+ :if => RestClient::Platform.windows? do
5
+ let(:x509_store) { RestClient::Windows::RootCerts.instance.to_a }
6
+
7
+ it 'should return at least one X509 certificate' do
8
+ expect(x509_store.to_a).to have_at_least(1).items
9
+ end
10
+
11
+ it 'should return an X509 certificate with a subject' do
12
+ x509 = x509_store.first
13
+
14
+ expect(x509.subject.to_s).to match(/CN=.*/)
15
+ end
16
+
17
+ it 'should return X509 certificate objects' do
18
+ x509_store.each do |cert|
19
+ cert.should be_a(OpenSSL::X509::Certificate)
20
+ end
21
+ end
22
+ end