airborne 0.1.3 → 0.1.4
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.
- checksums.yaml +4 -4
- data/.gitignore +2 -2
- data/README.md +21 -21
- data/airborne.gemspec +2 -2
- data/lib/airborne/base.rb +7 -0
- data/spec/airborne/head_spec.rb +11 -0
- data/spec/stub_helper.rb +5 -1
- metadata +25 -26
- data/CHANGELOG.md +0 -8
- data/Gemfile.lock +0 -79
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb2cc7c750235264547682073bf9a99fc30eb027
|
4
|
+
data.tar.gz: ea66ce3a100d4078abcadaa4c832b840d7187f66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e13485b10fcff3a67558501f82a70f0cd0dd12b0cffcfd0275990107ba115715719a6e26a0dc85b9ba60308003e38553047c1aa34d770e47e9a8a3fd7c9bf903
|
7
|
+
data.tar.gz: fc929249c14d7549170299591e6336474677d1db7f1b5c4d28d9d5eb67127fa045a9601b4136df287be839a4bad891deec4cc77a1ca2dafa73590265af511b21
|
data/.gitignore
CHANGED
@@ -26,11 +26,11 @@ build/
|
|
26
26
|
|
27
27
|
# for a library or gem, you might want to ignore these files since the code is
|
28
28
|
# intended to run in multiple environments; otherwise, check them in:
|
29
|
-
|
29
|
+
Gemfile.lock
|
30
30
|
# .ruby-version
|
31
31
|
# .ruby-gemset
|
32
32
|
|
33
33
|
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
34
34
|
.rvmrc
|
35
35
|
.idea
|
36
|
-
.DS_store
|
36
|
+
.DS_store
|
data/README.md
CHANGED
@@ -14,7 +14,7 @@ RSpec driven API testing framework inspired by [frisby.js](https://github.com/vl
|
|
14
14
|
Install Airborne:
|
15
15
|
|
16
16
|
gem install airborne
|
17
|
-
|
17
|
+
|
18
18
|
Or add it to your Gemfile:
|
19
19
|
|
20
20
|
gem 'airborne'
|
@@ -26,12 +26,12 @@ require 'airborne'
|
|
26
26
|
|
27
27
|
describe 'sample spec' do
|
28
28
|
it 'should validate types' do
|
29
|
-
get 'http://example.com/api/v1/simple_get' #json api that returns { "name" : "John Doe" }
|
29
|
+
get 'http://example.com/api/v1/simple_get' #json api that returns { "name" : "John Doe" }
|
30
30
|
expect_json_types({name: :string})
|
31
31
|
end
|
32
32
|
|
33
|
-
it 'should validate values' do
|
34
|
-
get 'http://example.com/api/v1/simple_get' #json api that returns { "name" : "John Doe" }
|
33
|
+
it 'should validate values' do
|
34
|
+
get 'http://example.com/api/v1/simple_get' #json api that returns { "name" : "John Doe" }
|
35
35
|
expect_json({:name => "John Doe"})
|
36
36
|
end
|
37
37
|
end
|
@@ -54,7 +54,7 @@ When calling expect_json_types, these are the valid types that can be tested aga
|
|
54
54
|
* `:array_of_arrays`
|
55
55
|
|
56
56
|
If the properties are optional and may not appear in the response, you can append `_or_null` to the types above.
|
57
|
-
|
57
|
+
|
58
58
|
```ruby
|
59
59
|
describe 'sample spec' do
|
60
60
|
it 'should validate types' do
|
@@ -108,7 +108,7 @@ end
|
|
108
108
|
|
109
109
|
##Making requests
|
110
110
|
|
111
|
-
Airborne uses `rest_client` to make the HTTP request, and supports all HTTP verbs. When creating a test, you can call any of the following methods: `get`, `post`, `put`, `patch`, `delete`. This will then give you access the following properties:
|
111
|
+
Airborne uses `rest_client` to make the HTTP request, and supports all HTTP verbs. When creating a test, you can call any of the following methods: `get`, `post`, `put`, `patch`, `delete`, `head`. This will then give you access the following properties:
|
112
112
|
|
113
113
|
* `response` - The HTTP response returned from the request
|
114
114
|
* `headers` - A symbolized hash of the response headers returned by the request
|
@@ -119,20 +119,20 @@ For example:
|
|
119
119
|
|
120
120
|
```ruby
|
121
121
|
it 'should validate types' do
|
122
|
-
get 'http://example.com/api/v1/simple_get' #json api that returns { "name" : "John Doe" }
|
122
|
+
get 'http://example.com/api/v1/simple_get' #json api that returns { "name" : "John Doe" }
|
123
123
|
name = json_body[:name] #name will equal "John Doe"
|
124
124
|
body_as_string = body
|
125
125
|
end
|
126
126
|
```
|
127
127
|
|
128
|
-
When calling any of the methods above, you can pass request headers to be used.
|
128
|
+
When calling any of the methods above, you can pass request headers to be used.
|
129
129
|
|
130
130
|
```ruby
|
131
131
|
get 'http://example.com/api/v1/my_api', {'x-auth-token' => 'my_token'}
|
132
132
|
```
|
133
133
|
|
134
134
|
For requests that require a body (`post`, `put`, `patch`) you can pass the body as a hash as well:
|
135
|
-
|
135
|
+
|
136
136
|
```ruby
|
137
137
|
post 'http://example.com/api/v1/my_api', {:name => 'John Doe'}, {'x-auth-token' => 'my_token'}
|
138
138
|
```
|
@@ -147,7 +147,7 @@ Airborne.configure do |config|
|
|
147
147
|
end
|
148
148
|
```
|
149
149
|
|
150
|
-
Under the covers, Airborne uses [rack-test](https://github.com/brynary/rack-test) to make the requests.
|
150
|
+
Under the covers, Airborne uses [rack-test](https://github.com/brynary/rack-test) to make the requests.
|
151
151
|
|
152
152
|
##Rails Applications
|
153
153
|
|
@@ -179,7 +179,7 @@ end
|
|
179
179
|
|
180
180
|
##Path Matching
|
181
181
|
|
182
|
-
When calling `expect_json_types`, `expect_json`, `expect_json_keys` or `expect_json_sizes` you can optionally specify a path as a first parameter.
|
182
|
+
When calling `expect_json_types`, `expect_json`, `expect_json_keys` or `expect_json_sizes` you can optionally specify a path as a first parameter.
|
183
183
|
|
184
184
|
For example, if our API returns the following JSON:
|
185
185
|
|
@@ -197,9 +197,9 @@ For example, if our API returns the following JSON:
|
|
197
197
|
}
|
198
198
|
}
|
199
199
|
```
|
200
|
-
|
200
|
+
|
201
201
|
This test would only test the address object:
|
202
|
-
|
202
|
+
|
203
203
|
```ruby
|
204
204
|
describe 'path spec' do
|
205
205
|
it 'should allow simple path and verify only that path' do
|
@@ -215,7 +215,7 @@ Or, to test the existence of specific keys:
|
|
215
215
|
```ruby
|
216
216
|
it 'should allow nested paths' do
|
217
217
|
get 'http://example.com/api/v1/simple_path_get'
|
218
|
-
expect_json_keys('address', [:street, :city, :state, :coordinates])
|
218
|
+
expect_json_keys('address', [:street, :city, :state, :coordinates])
|
219
219
|
end
|
220
220
|
```
|
221
221
|
|
@@ -224,7 +224,7 @@ Alternativley, if we only want to test `coordinates` we can dot into just the `c
|
|
224
224
|
```ruby
|
225
225
|
it 'should allow nested paths' do
|
226
226
|
get 'http://example.com/api/v1/simple_path_get'
|
227
|
-
expect_json('address.coordinates', {latitude: 33.3872, longitude: 104.5281} )
|
227
|
+
expect_json('address.coordinates', {latitude: 33.3872, longitude: 104.5281} )
|
228
228
|
end
|
229
229
|
```
|
230
230
|
|
@@ -250,7 +250,7 @@ Given the following JSON:
|
|
250
250
|
We can test against just the first car like this:
|
251
251
|
|
252
252
|
```ruby
|
253
|
-
it 'should index into array and test against specific element' do
|
253
|
+
it 'should index into array and test against specific element' do
|
254
254
|
get '/array_api'
|
255
255
|
expect_json('cars.0', {make: "Tesla", model: "Model S"})
|
256
256
|
end
|
@@ -259,13 +259,13 @@ end
|
|
259
259
|
To test the types of all elements in the array:
|
260
260
|
|
261
261
|
```ruby
|
262
|
-
it 'should test all elements of the array' do
|
262
|
+
it 'should test all elements of the array' do
|
263
263
|
get 'http://example.com/api/v1/array_api'
|
264
264
|
expect_json('cars.?', {make: "Tesla", model: "Model S"}) # tests that one car in array matches the tesla
|
265
265
|
expect_json_types('cars.*', {make: :string, model: :string}) # tests all cars in array for make and model of type string
|
266
266
|
end
|
267
267
|
```
|
268
|
-
|
268
|
+
|
269
269
|
`*` and `?` work for nested arrays as well. Given the following JSON:
|
270
270
|
|
271
271
|
```json
|
@@ -319,7 +319,7 @@ it 'should verify correct date value' do
|
|
319
319
|
prev_day = DateTime.new(2014,10,19)
|
320
320
|
next_day = DateTime.new(2014,10,21)
|
321
321
|
#within the date callback, you can use regular RSpec expectations that work with dates
|
322
|
-
expect_json({createdAt: date {|value| expect(value).to be_between(prev_day, next_day)}})
|
322
|
+
expect_json({createdAt: date {|value| expect(value).to be_between(prev_day, next_day)}})
|
323
323
|
end
|
324
324
|
```
|
325
325
|
|
@@ -354,8 +354,8 @@ end
|
|
354
354
|
|
355
355
|
$ cd your/project
|
356
356
|
$ rspec spec
|
357
|
-
|
358
|
-
## License
|
357
|
+
|
358
|
+
## License
|
359
359
|
|
360
360
|
The MIT License
|
361
361
|
|
data/airborne.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'airborne'
|
3
|
-
s.version = '0.1.
|
4
|
-
s.date = '2014-11-
|
3
|
+
s.version = '0.1.4'
|
4
|
+
s.date = '2014-11-24'
|
5
5
|
s.summary = "RSpec driven API testing framework"
|
6
6
|
s.authors = ["Alex Friedman", "Seth Pollack"]
|
7
7
|
s.email = ['a.friedman07@gmail.com', 'teampollack@gmail.com']
|
data/lib/airborne/base.rb
CHANGED
@@ -44,6 +44,13 @@ module Airborne
|
|
44
44
|
set_response(make_request(:delete, url, {headers: headers}))
|
45
45
|
end
|
46
46
|
|
47
|
+
def head(url, headers = nil)
|
48
|
+
set_response(make_request(:head, url, {headers: headers}))
|
49
|
+
end
|
50
|
+
|
51
|
+
def options()
|
52
|
+
end
|
53
|
+
|
47
54
|
def response
|
48
55
|
@response
|
49
56
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'head' do
|
4
|
+
it 'should allow testing on head requests' do
|
5
|
+
mock_head('simple_head', {'foo' => 'foo'})
|
6
|
+
head '/simple_head', {}
|
7
|
+
expect_status(200)
|
8
|
+
expect_header('foo', 'foo')
|
9
|
+
expect(json_body).to be(nil)
|
10
|
+
end
|
11
|
+
end
|
data/spec/stub_helper.rb
CHANGED
@@ -29,9 +29,13 @@ module StubHelper
|
|
29
29
|
stub_request(:delete, @base_url + url)
|
30
30
|
end
|
31
31
|
|
32
|
+
def mock_head(url, response_headers = {}, status = 200)
|
33
|
+
stub_request(:head, @base_url + url).to_return(headers: response_headers, body: nil, status: status)
|
34
|
+
end
|
35
|
+
|
32
36
|
private
|
33
37
|
|
34
38
|
def get_json_response_file(name)
|
35
39
|
IO.read(File.join('spec/test_responses', name + ".json"))
|
36
40
|
end
|
37
|
-
end
|
41
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: airborne
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Friedman
|
@@ -9,94 +9,94 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-11-
|
12
|
+
date: 2014-11-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ~>
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3.1'
|
21
|
-
- -
|
21
|
+
- - '>='
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 3.1.0
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
-
- -
|
28
|
+
- - ~>
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '3.1'
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 3.1.0
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: rest-client
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.7'
|
41
|
-
- -
|
41
|
+
- - '>='
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 1.7.2
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
46
|
version_requirements: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
|
-
- -
|
48
|
+
- - ~>
|
49
49
|
- !ruby/object:Gem::Version
|
50
50
|
version: '1.7'
|
51
|
-
- -
|
51
|
+
- - '>='
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: 1.7.2
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
55
|
name: rack-test
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- -
|
58
|
+
- - ~>
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '0.6'
|
61
|
-
- -
|
61
|
+
- - '>='
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: 0.6.2
|
64
64
|
type: :runtime
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- -
|
68
|
+
- - ~>
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '0.6'
|
71
|
-
- -
|
71
|
+
- - '>='
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: 0.6.2
|
74
74
|
- !ruby/object:Gem::Dependency
|
75
75
|
name: activesupport
|
76
76
|
requirement: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
|
-
- -
|
78
|
+
- - '>='
|
79
79
|
- !ruby/object:Gem::Version
|
80
80
|
version: 4.0.1
|
81
81
|
type: :runtime
|
82
82
|
prerelease: false
|
83
83
|
version_requirements: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
|
-
- -
|
85
|
+
- - '>='
|
86
86
|
- !ruby/object:Gem::Version
|
87
87
|
version: 4.0.1
|
88
88
|
- !ruby/object:Gem::Dependency
|
89
89
|
name: webmock
|
90
90
|
requirement: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
|
-
- -
|
92
|
+
- - ~>
|
93
93
|
- !ruby/object:Gem::Version
|
94
94
|
version: '0'
|
95
95
|
type: :development
|
96
96
|
prerelease: false
|
97
97
|
version_requirements: !ruby/object:Gem::Requirement
|
98
98
|
requirements:
|
99
|
-
- -
|
99
|
+
- - ~>
|
100
100
|
- !ruby/object:Gem::Version
|
101
101
|
version: '0'
|
102
102
|
description:
|
@@ -107,12 +107,10 @@ executables: []
|
|
107
107
|
extensions: []
|
108
108
|
extra_rdoc_files: []
|
109
109
|
files:
|
110
|
-
-
|
111
|
-
-
|
112
|
-
-
|
113
|
-
- CHANGELOG.md
|
110
|
+
- .coveralls.yml
|
111
|
+
- .gitignore
|
112
|
+
- .travis.yml
|
114
113
|
- Gemfile
|
115
|
-
- Gemfile.lock
|
116
114
|
- LICENSE
|
117
115
|
- README.md
|
118
116
|
- airborne.gemspec
|
@@ -140,6 +138,7 @@ files:
|
|
140
138
|
- spec/airborne/expectations/expect_json_types_path_spec.rb
|
141
139
|
- spec/airborne/expectations/expect_json_types_spec.rb
|
142
140
|
- spec/airborne/expectations/expect_status_spec.rb
|
141
|
+
- spec/airborne/head_spec.rb
|
143
142
|
- spec/airborne/patch_spec.rb
|
144
143
|
- spec/airborne/post_spec.rb
|
145
144
|
- spec/airborne/put_spec.rb
|
@@ -170,17 +169,17 @@ require_paths:
|
|
170
169
|
- lib
|
171
170
|
required_ruby_version: !ruby/object:Gem::Requirement
|
172
171
|
requirements:
|
173
|
-
- -
|
172
|
+
- - '>='
|
174
173
|
- !ruby/object:Gem::Version
|
175
174
|
version: '0'
|
176
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
176
|
requirements:
|
178
|
-
- -
|
177
|
+
- - '>='
|
179
178
|
- !ruby/object:Gem::Version
|
180
179
|
version: '0'
|
181
180
|
requirements: []
|
182
181
|
rubyforge_project:
|
183
|
-
rubygems_version: 2.
|
182
|
+
rubygems_version: 2.4.1
|
184
183
|
signing_key:
|
185
184
|
specification_version: 4
|
186
185
|
summary: RSpec driven API testing framework
|
data/CHANGELOG.md
DELETED
data/Gemfile.lock
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: https://rubygems.org/
|
3
|
-
specs:
|
4
|
-
activesupport (4.1.6)
|
5
|
-
i18n (~> 0.6, >= 0.6.9)
|
6
|
-
json (~> 1.7, >= 1.7.7)
|
7
|
-
minitest (~> 5.1)
|
8
|
-
thread_safe (~> 0.1)
|
9
|
-
tzinfo (~> 1.1)
|
10
|
-
addressable (2.3.6)
|
11
|
-
coveralls (0.7.1)
|
12
|
-
multi_json (~> 1.3)
|
13
|
-
rest-client
|
14
|
-
simplecov (>= 0.7)
|
15
|
-
term-ansicolor
|
16
|
-
thor
|
17
|
-
crack (0.4.2)
|
18
|
-
safe_yaml (~> 1.0.0)
|
19
|
-
diff-lcs (1.2.5)
|
20
|
-
docile (1.1.5)
|
21
|
-
i18n (0.6.11)
|
22
|
-
json (1.8.1)
|
23
|
-
mime-types (2.3)
|
24
|
-
minitest (5.4.1)
|
25
|
-
multi_json (1.10.1)
|
26
|
-
netrc (0.7.7)
|
27
|
-
rack (1.5.2)
|
28
|
-
rack-protection (1.5.3)
|
29
|
-
rack
|
30
|
-
rack-test (0.6.2)
|
31
|
-
rack (>= 1.0)
|
32
|
-
rest-client (1.7.2)
|
33
|
-
mime-types (>= 1.16, < 3.0)
|
34
|
-
netrc (~> 0.7)
|
35
|
-
rspec (3.1.0)
|
36
|
-
rspec-core (~> 3.1.0)
|
37
|
-
rspec-expectations (~> 3.1.0)
|
38
|
-
rspec-mocks (~> 3.1.0)
|
39
|
-
rspec-core (3.1.3)
|
40
|
-
rspec-support (~> 3.1.0)
|
41
|
-
rspec-expectations (3.1.1)
|
42
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
-
rspec-support (~> 3.1.0)
|
44
|
-
rspec-mocks (3.1.0)
|
45
|
-
rspec-support (~> 3.1.0)
|
46
|
-
rspec-support (3.1.0)
|
47
|
-
safe_yaml (1.0.3)
|
48
|
-
simplecov (0.9.0)
|
49
|
-
docile (~> 1.1.0)
|
50
|
-
multi_json
|
51
|
-
simplecov-html (~> 0.8.0)
|
52
|
-
simplecov-html (0.8.0)
|
53
|
-
sinatra (1.4.5)
|
54
|
-
rack (~> 1.4)
|
55
|
-
rack-protection (~> 1.4)
|
56
|
-
tilt (~> 1.3, >= 1.3.4)
|
57
|
-
term-ansicolor (1.3.0)
|
58
|
-
tins (~> 1.0)
|
59
|
-
thor (0.19.1)
|
60
|
-
thread_safe (0.3.4)
|
61
|
-
tilt (1.4.1)
|
62
|
-
tins (1.3.3)
|
63
|
-
tzinfo (1.2.2)
|
64
|
-
thread_safe (~> 0.1)
|
65
|
-
webmock (1.18.0)
|
66
|
-
addressable (>= 2.3.6)
|
67
|
-
crack (>= 0.3.2)
|
68
|
-
|
69
|
-
PLATFORMS
|
70
|
-
ruby
|
71
|
-
|
72
|
-
DEPENDENCIES
|
73
|
-
activesupport
|
74
|
-
coveralls
|
75
|
-
rack-test
|
76
|
-
rest-client
|
77
|
-
rspec
|
78
|
-
sinatra
|
79
|
-
webmock
|