capybara-mechanize 1.1.0 → 1.4.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.
- data/lib/capybara/mechanize/browser.rb +14 -4
- data/lib/capybara/mechanize/node.rb +2 -1
- data/lib/capybara/mechanize/version.rb +1 -1
- data/lib/capybara/spec/extended_test_app.rb +1 -1
- data/spec/driver/mechanize_driver_spec.rb +48 -19
- data/spec/driver/remote_mechanize_driver_spec.rb +6 -6
- data/spec/session/mechanize_spec.rb +16 -10
- data/spec/session/remote_mechanize_spec.rb +5 -3
- data/spec/spec_helper.rb +8 -2
- data/spec/support/extended_test_app_setup.rb +1 -0
- data/spec/support/remote_test_url.rb +5 -0
- metadata +11 -7
@@ -19,6 +19,7 @@ class Capybara::Mechanize::Browser < Capybara::RackTest::Browser
|
|
19
19
|
def reset_host!
|
20
20
|
@last_remote_uri = nil
|
21
21
|
@last_request_remote = nil
|
22
|
+
@errored_remote_response = nil
|
22
23
|
super
|
23
24
|
end
|
24
25
|
|
@@ -71,7 +72,7 @@ class Capybara::Mechanize::Browser < Capybara::RackTest::Browser
|
|
71
72
|
end.map { |node| Capybara::Mechanize::Node.new(self, node) }
|
72
73
|
end
|
73
74
|
|
74
|
-
attr_reader :agent
|
75
|
+
attr_reader :agent, :errored_remote_response
|
75
76
|
|
76
77
|
private
|
77
78
|
|
@@ -116,8 +117,13 @@ class Capybara::Mechanize::Browser < Capybara::RackTest::Browser
|
|
116
117
|
else
|
117
118
|
@agent.send(method, url, attributes, headers)
|
118
119
|
end
|
119
|
-
|
120
|
-
|
120
|
+
@errored_remote_response = nil
|
121
|
+
rescue Mechanize::ResponseCodeError => e
|
122
|
+
@errored_remote_response = e.page
|
123
|
+
|
124
|
+
if Capybara.raise_server_errors
|
125
|
+
raise "Received the following error for a #{method.to_s.upcase} request to #{url}: '#{e.message}'"
|
126
|
+
end
|
121
127
|
end
|
122
128
|
@last_request_remote = true
|
123
129
|
end
|
@@ -129,7 +135,11 @@ class Capybara::Mechanize::Browser < Capybara::RackTest::Browser
|
|
129
135
|
end
|
130
136
|
|
131
137
|
def remote_response
|
132
|
-
|
138
|
+
if errored_remote_response
|
139
|
+
ResponseProxy.new(errored_remote_response)
|
140
|
+
elsif @agent.current_page
|
141
|
+
ResponseProxy.new(@agent.current_page)
|
142
|
+
end
|
133
143
|
end
|
134
144
|
|
135
145
|
def default_user_agent
|
@@ -4,7 +4,8 @@ class Capybara::Mechanize::Node < Capybara::RackTest::Node
|
|
4
4
|
super
|
5
5
|
elsif (tag_name == 'input' and %w(submit image).include?(type)) or
|
6
6
|
((tag_name == 'button') and type.nil? or type == "submit")
|
7
|
-
|
7
|
+
associated_form = form
|
8
|
+
Capybara::Mechanize::Form.new(driver, form).submit(self) if associated_form
|
8
9
|
end
|
9
10
|
end
|
10
11
|
end
|
@@ -90,7 +90,6 @@ describe Capybara::Mechanize::Driver, 'local' do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
context "with an app_host" do
|
93
|
-
|
94
93
|
before do
|
95
94
|
Capybara.app_host = 'http://www.remote.com'
|
96
95
|
end
|
@@ -109,9 +108,22 @@ describe Capybara::Mechanize::Driver, 'local' do
|
|
109
108
|
Capybara.default_host = 'www.local.com'
|
110
109
|
end
|
111
110
|
|
112
|
-
|
113
|
-
Capybara
|
114
|
-
|
111
|
+
after do
|
112
|
+
Capybara.default_host = CAPYBARA_DEFAULT_HOST
|
113
|
+
end
|
114
|
+
|
115
|
+
context "local hosts" do
|
116
|
+
before do
|
117
|
+
Capybara::Mechanize.local_hosts = ['subdomain.local.com']
|
118
|
+
end
|
119
|
+
|
120
|
+
after do
|
121
|
+
Capybara::Mechanize.local_hosts = nil
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should allow local hosts to be set" do
|
125
|
+
driver.should_not be_remote('http://subdomain.local.com')
|
126
|
+
end
|
115
127
|
end
|
116
128
|
|
117
129
|
it "should treat urls with the same host names as local" do
|
@@ -123,7 +135,7 @@ describe Capybara::Mechanize::Driver, 'local' do
|
|
123
135
|
end
|
124
136
|
|
125
137
|
it "should treat relative paths as remote if the previous request was remote" do
|
126
|
-
driver.visit(
|
138
|
+
driver.visit(remote_test_url)
|
127
139
|
driver.should be_remote('/some_relative_link')
|
128
140
|
end
|
129
141
|
|
@@ -146,7 +158,7 @@ describe Capybara::Mechanize::Driver, 'local' do
|
|
146
158
|
end
|
147
159
|
|
148
160
|
it "should consider relative paths to be remote when the previous request was remote" do
|
149
|
-
driver.visit("#{
|
161
|
+
driver.visit("#{remote_test_url}/host")
|
150
162
|
driver.get('/host')
|
151
163
|
|
152
164
|
should_be_a_remote_get
|
@@ -156,7 +168,7 @@ describe Capybara::Mechanize::Driver, 'local' do
|
|
156
168
|
it "should always switch to the right context" do
|
157
169
|
driver.visit('http://www.local.com/host')
|
158
170
|
driver.get('/host')
|
159
|
-
driver.get("#{
|
171
|
+
driver.get("#{remote_test_url}/host")
|
160
172
|
driver.get('/host')
|
161
173
|
driver.get('http://www.local.com/host')
|
162
174
|
|
@@ -165,28 +177,41 @@ describe Capybara::Mechanize::Driver, 'local' do
|
|
165
177
|
end
|
166
178
|
|
167
179
|
it "should follow redirects from local to remote" do
|
168
|
-
driver.visit("http://www.local.com/redirect_to/#{
|
180
|
+
driver.visit("http://www.local.com/redirect_to/#{remote_test_url}/host")
|
169
181
|
should_be_a_remote_get
|
170
182
|
end
|
171
183
|
|
172
184
|
it "should follow redirects from remote to local" do
|
173
|
-
driver.visit("#{
|
185
|
+
driver.visit("#{remote_test_url}/redirect_to/http://www.local.com/host")
|
174
186
|
should_be_a_local_get
|
175
187
|
end
|
176
188
|
|
177
|
-
|
178
|
-
|
189
|
+
it "passes the status code of remote calls back to be validated" do
|
190
|
+
quietly do
|
191
|
+
driver.visit(remote_test_url)
|
192
|
+
driver.get('/asdfafadfsdfs')
|
193
|
+
driver.response.status.should be >= 400
|
194
|
+
end
|
179
195
|
end
|
180
196
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
197
|
+
context "when errors are set to true" do
|
198
|
+
it "raises an useful error because it is probably a misconfiguration" do
|
199
|
+
quietly do
|
200
|
+
original = Capybara.raise_server_errors
|
201
|
+
|
202
|
+
expect {
|
203
|
+
driver.visit(remote_test_url)
|
204
|
+
Capybara.raise_server_errors = true
|
205
|
+
driver.get('/asdfafadfsdfs')
|
206
|
+
}.to raise_error(%r{Received the following error for a GET request to /asdfafadfsdfs:})
|
207
|
+
Capybara.raise_server_errors = original
|
208
|
+
end
|
209
|
+
end
|
185
210
|
end
|
186
211
|
end
|
187
212
|
|
188
213
|
it "should include the right host when remote" do
|
189
|
-
driver.visit("#{
|
214
|
+
driver.visit("#{remote_test_url}/host")
|
190
215
|
should_be_a_remote_get
|
191
216
|
end
|
192
217
|
|
@@ -195,8 +220,12 @@ describe Capybara::Mechanize::Driver, 'local' do
|
|
195
220
|
Capybara.default_host = 'http://www.local.com'
|
196
221
|
end
|
197
222
|
|
223
|
+
after do
|
224
|
+
Capybara.default_host = CAPYBARA_DEFAULT_HOST
|
225
|
+
end
|
226
|
+
|
198
227
|
it 'should reset remote host' do
|
199
|
-
driver.visit("#{
|
228
|
+
driver.visit("#{remote_test_url}/host")
|
200
229
|
should_be_a_remote_get
|
201
230
|
driver.reset!
|
202
231
|
driver.visit("/host")
|
@@ -205,11 +234,11 @@ describe Capybara::Mechanize::Driver, 'local' do
|
|
205
234
|
end
|
206
235
|
|
207
236
|
def should_be_a_remote_get
|
208
|
-
driver.current_url.should include(
|
237
|
+
driver.current_url.should include(remote_test_url)
|
209
238
|
end
|
210
239
|
|
211
240
|
def should_be_a_local_get
|
212
241
|
driver.current_url.should include("www.local.com")
|
213
242
|
end
|
214
|
-
|
243
|
+
|
215
244
|
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Capybara::Mechanize::Driver, 'remote' do
|
4
4
|
before do
|
5
|
-
Capybara.app_host =
|
5
|
+
Capybara.app_host = remote_test_url
|
6
6
|
end
|
7
7
|
|
8
8
|
after do
|
@@ -13,32 +13,32 @@ describe Capybara::Mechanize::Driver, 'remote' do
|
|
13
13
|
|
14
14
|
context "in remote mode" do
|
15
15
|
it "should pass arguments through to a get request" do
|
16
|
-
driver.visit("#{
|
16
|
+
driver.visit("#{remote_test_url}/form/get", {:form => "success"})
|
17
17
|
driver.html.should include('success')
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should pass arguments through to a post request" do
|
21
|
-
driver.post("#{
|
21
|
+
driver.post("#{remote_test_url}/form", {:form => "success"})
|
22
22
|
driver.html.should include('success')
|
23
23
|
end
|
24
24
|
|
25
25
|
describe "redirect" do
|
26
26
|
it "should handle redirects with http-params" do
|
27
|
-
driver.visit "#{
|
27
|
+
driver.visit "#{remote_test_url}/redirect_with_http_param"
|
28
28
|
driver.html.should include('correct redirect')
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
context "for a post request" do
|
33
33
|
it 'transforms nested map in post data' do
|
34
|
-
driver.post("#{
|
34
|
+
driver.post("#{remote_test_url}/form", {:form => {:key => 'value'}})
|
35
35
|
driver.html.should include(':key=>"value"')
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
context 'process remote request' do
|
40
40
|
it 'transforms nested map in post data' do
|
41
|
-
driver.submit(:post, "#{
|
41
|
+
driver.submit(:post, "#{remote_test_url}/form", {:form => {:key => 'value'}})
|
42
42
|
driver.html.should include(':key=>"value"')
|
43
43
|
end
|
44
44
|
end
|
@@ -4,13 +4,15 @@ module TestSessions
|
|
4
4
|
Mechanize = Capybara::Session.new(:mechanize, TestApp)
|
5
5
|
end
|
6
6
|
|
7
|
-
Capybara::SpecHelper.run_specs TestSessions::Mechanize, "Mechanize", :
|
7
|
+
Capybara::SpecHelper.run_specs TestSessions::Mechanize, "Mechanize", :capybara_skip => [
|
8
8
|
:js,
|
9
9
|
:screenshot,
|
10
10
|
:frames,
|
11
11
|
:windows,
|
12
12
|
:server,
|
13
|
-
:hover
|
13
|
+
:hover,
|
14
|
+
:modals,
|
15
|
+
:about_scheme
|
14
16
|
]
|
15
17
|
|
16
18
|
describe Capybara::Session do
|
@@ -21,6 +23,10 @@ describe Capybara::Session do
|
|
21
23
|
Capybara.default_host = 'http://www.local.com'
|
22
24
|
end
|
23
25
|
|
26
|
+
after do
|
27
|
+
Capybara.default_host = CAPYBARA_DEFAULT_HOST
|
28
|
+
end
|
29
|
+
|
24
30
|
describe '#driver' do
|
25
31
|
it "should be a mechanize driver" do
|
26
32
|
session.driver.should be_an_instance_of(Capybara::Mechanize::Driver)
|
@@ -71,31 +77,31 @@ describe Capybara::Session do
|
|
71
77
|
end
|
72
78
|
|
73
79
|
it "should use the last remote url when following relative links" do
|
74
|
-
session.visit("#{
|
80
|
+
session.visit("#{remote_test_url}/relative_link_to_host")
|
75
81
|
session.click_link "host"
|
76
|
-
session.body.should include("Current host is #{
|
82
|
+
session.body.should include("Current host is #{remote_test_url}/request_info/host, method get")
|
77
83
|
end
|
78
84
|
|
79
85
|
it "should use the last remote url when submitting a form with a relative action" do
|
80
|
-
session.visit("#{
|
86
|
+
session.visit("#{remote_test_url}/form_with_relative_action_to_host")
|
81
87
|
session.click_button "submit"
|
82
|
-
session.body.should include("Current host is #{
|
88
|
+
session.body.should include("Current host is #{remote_test_url}/request_info/host, method post")
|
83
89
|
end
|
84
90
|
|
85
91
|
it "should use the last url when submitting a form with no action" do
|
86
|
-
session.visit("#{
|
92
|
+
session.visit("#{remote_test_url}/request_info/form_with_no_action")
|
87
93
|
session.click_button "submit"
|
88
|
-
session.body.should include("Current host is #{
|
94
|
+
session.body.should include("Current host is #{remote_test_url}/request_info/form_with_no_action, method post")
|
89
95
|
end
|
90
96
|
|
91
97
|
it "should send correct user agent" do
|
92
|
-
session.visit("#{
|
98
|
+
session.visit("#{remote_test_url}/request_info/user_agent")
|
93
99
|
session.body.should include("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.853.0 Safari/535.2")
|
94
100
|
end
|
95
101
|
|
96
102
|
context 'form referer when switching from local to remote' do
|
97
103
|
it 'sends the referer' do
|
98
|
-
session.visit "/form_posts_to/#{
|
104
|
+
session.visit "/form_posts_to/#{remote_test_url}/get_referer"
|
99
105
|
session.click_button 'submit'
|
100
106
|
session.body.should include 'Got referer'
|
101
107
|
end
|
@@ -6,7 +6,7 @@ end
|
|
6
6
|
|
7
7
|
shared_context "remote tests" do
|
8
8
|
before do
|
9
|
-
Capybara.app_host =
|
9
|
+
Capybara.app_host = remote_test_url
|
10
10
|
end
|
11
11
|
|
12
12
|
after do
|
@@ -14,13 +14,15 @@ shared_context "remote tests" do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
session_describe = Capybara::SpecHelper.run_specs TestSessions::Mechanize, "Mechanize", :
|
17
|
+
session_describe = Capybara::SpecHelper.run_specs TestSessions::Mechanize, "Mechanize", :capybara_skip => [
|
18
18
|
:js,
|
19
19
|
:screenshot,
|
20
20
|
:frames,
|
21
21
|
:windows,
|
22
22
|
:server,
|
23
|
-
:hover
|
23
|
+
:hover,
|
24
|
+
:modals,
|
25
|
+
:about_scheme
|
24
26
|
]
|
25
27
|
|
26
28
|
session_describe.include_context("remote tests")
|
data/spec/spec_helper.rb
CHANGED
@@ -17,12 +17,18 @@ RSpec.configure do |config|
|
|
17
17
|
# Used with DisableExternalTests
|
18
18
|
config.filter_run_excluding :external_test_disabled
|
19
19
|
|
20
|
+
config.include RemoteTestUrl
|
21
|
+
config.extend RemoteTestUrl
|
22
|
+
config.include Capybara::SpecHelper
|
23
|
+
|
20
24
|
config.after do
|
21
25
|
Capybara::Mechanize.local_hosts = nil
|
22
26
|
end
|
23
27
|
|
24
28
|
Capybara::SpecHelper.configure(config)
|
29
|
+
|
30
|
+
config.order = "random"
|
31
|
+
|
32
|
+
CAPYBARA_DEFAULT_HOST = Capybara.default_host
|
25
33
|
end
|
26
34
|
|
27
|
-
setup = ExtendedTestAppSetup.new.boot
|
28
|
-
REMOTE_TEST_URL = setup.remote_test_url
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-mechanize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-10-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mechanize
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 2.7.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 2.7.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: capybara
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 2.
|
37
|
+
version: 2.4.4
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 2.
|
45
|
+
version: 2.4.4
|
46
46
|
description: RackTest driver for Capybara, but with remote request support thanks
|
47
47
|
to mechanize
|
48
48
|
email: jeroen@jeevidee.nl
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- spec/spec_helper.rb
|
66
66
|
- spec/support/disable_external_tests.rb
|
67
67
|
- spec/support/extended_test_app_setup.rb
|
68
|
+
- spec/support/remote_test_url.rb
|
68
69
|
- README.mdown
|
69
70
|
homepage: https://github.com/jeroenvandijk/capybara-mechanize
|
70
71
|
licenses: []
|
@@ -79,6 +80,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
80
|
- - ! '>='
|
80
81
|
- !ruby/object:Gem::Version
|
81
82
|
version: '0'
|
83
|
+
segments:
|
84
|
+
- 0
|
85
|
+
hash: 1895227021431628826
|
82
86
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
87
|
none: false
|
84
88
|
requirements:
|
@@ -87,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
91
|
version: '0'
|
88
92
|
requirements: []
|
89
93
|
rubyforge_project:
|
90
|
-
rubygems_version: 1.8.
|
94
|
+
rubygems_version: 1.8.23
|
91
95
|
signing_key:
|
92
96
|
specification_version: 3
|
93
97
|
summary: RackTest driver for Capybara with remote request support
|