rest-client 1.6.7 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
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