capybara-json 0.1.0 → 0.1.1
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/CHANGELOG.md +8 -1
- data/README.md +6 -10
- data/VERSION +1 -1
- data/lib/capybara/httpclient_json/driver.rb +21 -0
- data/lib/capybara/json/error.rb +6 -0
- data/lib/capybara/json.rb +2 -0
- data/lib/capybara/rack_test_json/driver.rb +34 -2
- data/spec/capybara/httpclient_json/driver_spec.rb +1 -0
- data/spec/capybara/rack_test_json/driver_spec.rb +1 -0
- data/spec/support/driver_examples.rb +15 -0
- metadata +19 -18
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
|
+
## 0.1.1
|
2
|
+
* ENHANCEMENT
|
3
|
+
* get!, post!, put!, delete!
|
4
|
+
* BUGFIX
|
5
|
+
* ensure the same interface sending header to app
|
6
|
+
|
1
7
|
## 0.1.0
|
2
|
-
|
8
|
+
* ENHANCEMENT
|
9
|
+
* gurantee the same interface in error response
|
3
10
|
|
4
11
|
## 0.0.3
|
5
12
|
* ENHANCEMENT
|
data/README.md
CHANGED
@@ -17,20 +17,16 @@ testing web application
|
|
17
17
|
post '/', { "this is" => "json" } # POST '/'
|
18
18
|
body #=> parsed json response
|
19
19
|
source #=> raw response body
|
20
|
+
get '/errors/400'
|
21
|
+
status_code #=> 400
|
22
|
+
get! '/errors' #=> raise Capybara::Json::Error
|
20
23
|
|
21
24
|
Capybara.current_driver = :httpclient_json
|
22
25
|
Capybara.app_host = 'http://example.com'
|
23
26
|
post '/', { "this is" => "json" } # POST 'http://example.com/'
|
24
27
|
body #=> parsed json response
|
25
28
|
source #=> raw response body
|
29
|
+
get '/errors/400'
|
30
|
+
status_code #=> 400
|
31
|
+
get! '/errors' #=> raise Capybara::Json::Error
|
26
32
|
|
27
|
-
## ROADMAP
|
28
|
-
|
29
|
-
* 0.0.1
|
30
|
-
* create :rack_test_json driver which supports normal json response (2xx, 3xx)
|
31
|
-
* 0.0.3
|
32
|
-
* create :httpclient_json driver with the same interface with :rack_test_json in normal json response
|
33
|
-
* 0.1.0
|
34
|
-
* ensure :rack_test_json and :httpclient_json has the same interface in error response (4xx, 5xx)
|
35
|
-
* 0.2.0
|
36
|
-
* add jsonpath? interface to search response
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
@@ -54,6 +54,22 @@ class Capybara::HTTPClientJson::Driver < Capybara::Driver::Base
|
|
54
54
|
def delete(url, params = {}, headers = {})
|
55
55
|
process :delete, url, params, headers
|
56
56
|
end
|
57
|
+
|
58
|
+
%w[ get delete ].each do |method|
|
59
|
+
class_eval %{
|
60
|
+
def #{method}!(url, params = {}, env = {})
|
61
|
+
handle_error { #{method}(url, params, env) }
|
62
|
+
end
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
%w[ post put ].each do |method|
|
67
|
+
class_eval %{
|
68
|
+
def #{method}!(url, json, headers = {})
|
69
|
+
handle_error { #{method}(url, json, headers) }
|
70
|
+
end
|
71
|
+
}
|
72
|
+
end
|
57
73
|
|
58
74
|
def reset!
|
59
75
|
@client = nil
|
@@ -73,4 +89,9 @@ class Capybara::HTTPClientJson::Driver < Capybara::Driver::Base
|
|
73
89
|
end
|
74
90
|
end
|
75
91
|
end
|
92
|
+
|
93
|
+
def handle_error(&block)
|
94
|
+
yield
|
95
|
+
raise(Capybara::Json::Error, response) if status_code >= 400
|
96
|
+
end
|
76
97
|
end
|
data/lib/capybara/json.rb
CHANGED
@@ -5,19 +5,51 @@ class Capybara::RackTestJson::Driver < to_inherit
|
|
5
5
|
MultiJson.decode(source) || {}
|
6
6
|
end
|
7
7
|
|
8
|
+
%w[ get delete ].each do |method|
|
9
|
+
class_eval %{
|
10
|
+
def #{method}(path, params = {}, env = {})
|
11
|
+
super(path, params, env_for_rack(env))
|
12
|
+
end
|
13
|
+
|
14
|
+
def #{method}!(path, params = {}, env = {})
|
15
|
+
handle_error { #{method}(path, params, env) }
|
16
|
+
end
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
8
20
|
%w[ post put ].each do |method|
|
9
21
|
class_eval %{
|
10
22
|
def #{method}(path, json, env = {})
|
11
23
|
json = MultiJson.encode(json) unless json.is_a?(String)
|
12
|
-
|
24
|
+
|
13
25
|
request_env = {
|
14
26
|
'CONTENT_LENGTH' => json.size,
|
15
27
|
'CONTENT_TYPE' => "application/json; charset=\#{json.encoding.to_s.downcase}",
|
16
28
|
'rack.input' => StringIO.new(json)
|
17
|
-
}.merge(env)
|
29
|
+
}.merge(env_for_rack(env))
|
18
30
|
|
19
31
|
super(path, {}, request_env)
|
20
32
|
end
|
33
|
+
|
34
|
+
def #{method}!(path, json, env = {})
|
35
|
+
handle_error { #{method}(path, json, env) }
|
36
|
+
end
|
21
37
|
}
|
22
38
|
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
def env_for_rack(env)
|
42
|
+
env.inject({}) do |rack_env, (key, value)|
|
43
|
+
env_key = key.upcase.gsub('-', '_')
|
44
|
+
env_key = "HTTP_" + env_key unless env_key == "CONTENT_TYPE"
|
45
|
+
rack_env[env_key] = value
|
46
|
+
|
47
|
+
rack_env
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def handle_error(&block)
|
52
|
+
yield
|
53
|
+
raise(Capybara::Json::Error, response) if status_code >= 400
|
54
|
+
end
|
23
55
|
end
|
@@ -7,6 +7,7 @@ describe klass do
|
|
7
7
|
|
8
8
|
it_should_behave_like 'driver'
|
9
9
|
it_should_behave_like 'driver with header support'
|
10
|
+
it_should_behave_like 'driver with custom header support'
|
10
11
|
it_should_behave_like 'driver with status code support'
|
11
12
|
it_should_behave_like 'driver with cookies support'
|
12
13
|
it_should_behave_like 'driver with infinite redirect detection'
|
@@ -7,6 +7,7 @@ describe klass do
|
|
7
7
|
|
8
8
|
it_should_behave_like 'driver'
|
9
9
|
it_should_behave_like 'driver with header support'
|
10
|
+
it_should_behave_like 'driver with custom header support'
|
10
11
|
it_should_behave_like 'driver with status code support'
|
11
12
|
it_should_behave_like 'driver with cookies support'
|
12
13
|
it_should_behave_like 'driver with infinite redirect detection'
|
@@ -40,6 +40,13 @@ shared_examples_for 'driver with header support' do
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
shared_examples_for 'driver with custom header support' do
|
44
|
+
it "should send custom header" do
|
45
|
+
@driver.get('/env', {}, { 'X-Custom-Header' => 'custom header'})
|
46
|
+
@driver.body['headers']['X_CUSTOM_HEADER'].should == 'custom header'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
43
50
|
|
44
51
|
%w[ post put ].each do |method|
|
45
52
|
shared_examples_for "driver to #{method} json" do
|
@@ -83,6 +90,10 @@ shared_examples_for 'driver for client error' do
|
|
83
90
|
@driver.get('/errors/400')
|
84
91
|
@driver.body['status_code'].should == 400
|
85
92
|
end
|
93
|
+
|
94
|
+
it 'should raise error using bang!' do
|
95
|
+
expect { @driver.get!('/errors/400') }.should raise_exception(Capybara::Json::Error)
|
96
|
+
end
|
86
97
|
end
|
87
98
|
|
88
99
|
shared_examples_for 'driver for server error' do
|
@@ -94,4 +105,8 @@ shared_examples_for 'driver for server error' do
|
|
94
105
|
@driver.get('/errors/500')
|
95
106
|
@driver.status_code.should == 500
|
96
107
|
end
|
108
|
+
|
109
|
+
it 'should raise error using bang!' do
|
110
|
+
expect { @driver.get!('/errors/500') }.should raise_exception(Capybara::Json::Error)
|
111
|
+
end
|
97
112
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-12-
|
12
|
+
date: 2011-12-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
16
|
-
requirement: &
|
16
|
+
requirement: &74677520 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *74677520
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: httpclient
|
27
|
-
requirement: &
|
27
|
+
requirement: &74676990 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *74676990
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: multi_json
|
38
|
-
requirement: &
|
38
|
+
requirement: &74676250 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *74676250
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &74675420 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.8.0.rc
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *74675420
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: sinatra
|
60
|
-
requirement: &
|
60
|
+
requirement: &74674860 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *74674860
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: yajl-ruby
|
71
|
-
requirement: &
|
71
|
+
requirement: &74674450 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *74674450
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: autowatchr
|
82
|
-
requirement: &
|
82
|
+
requirement: &74674220 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *74674220
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rake
|
93
|
-
requirement: &
|
93
|
+
requirement: &74673970 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *74673970
|
102
102
|
description: for testing json-api with capybara
|
103
103
|
email:
|
104
104
|
- okitakunio@gmail.com
|
@@ -121,6 +121,7 @@ files:
|
|
121
121
|
- lib/capybara-json.rb
|
122
122
|
- lib/capybara/httpclient_json/driver.rb
|
123
123
|
- lib/capybara/json.rb
|
124
|
+
- lib/capybara/json/error.rb
|
124
125
|
- lib/capybara/rack_test_json/driver.rb
|
125
126
|
- spec/capybara/httpclient_json/driver_spec.rb
|
126
127
|
- spec/capybara/json_spec.rb
|