hops-airborne 0.2.15

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 (67) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +38 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +12 -0
  6. data/Gemfile +10 -0
  7. data/LICENSE +9 -0
  8. data/README.md +429 -0
  9. data/airborne.gemspec +19 -0
  10. data/lib/airborne/base.rb +82 -0
  11. data/lib/airborne/optional_hash_type_expectations.rb +23 -0
  12. data/lib/airborne/path_matcher.rb +101 -0
  13. data/lib/airborne/rack_test_requester.rb +18 -0
  14. data/lib/airborne/request_expectations.rb +285 -0
  15. data/lib/airborne/rest_client_requester.rb +33 -0
  16. data/lib/airborne.rb +29 -0
  17. data/spec/airborne/base_spec.rb +55 -0
  18. data/spec/airborne/client_requester_spec.rb +42 -0
  19. data/spec/airborne/delete_spec.rb +9 -0
  20. data/spec/airborne/expectations/expect_header_contains_spec.rb +21 -0
  21. data/spec/airborne/expectations/expect_header_spec.rb +21 -0
  22. data/spec/airborne/expectations/expect_json_keys_path_spec.rb +15 -0
  23. data/spec/airborne/expectations/expect_json_keys_spec.rb +21 -0
  24. data/spec/airborne/expectations/expect_json_lambda_spec.rb +9 -0
  25. data/spec/airborne/expectations/expect_json_options_spec.rb +65 -0
  26. data/spec/airborne/expectations/expect_json_path_spec.rb +108 -0
  27. data/spec/airborne/expectations/expect_json_regex_spec.rb +33 -0
  28. data/spec/airborne/expectations/expect_json_sizes_spec.rb +33 -0
  29. data/spec/airborne/expectations/expect_json_spec.rb +27 -0
  30. data/spec/airborne/expectations/expect_json_types_date_spec.rb +52 -0
  31. data/spec/airborne/expectations/expect_json_types_lambda_spec.rb +9 -0
  32. data/spec/airborne/expectations/expect_json_types_optional_spec.rb +15 -0
  33. data/spec/airborne/expectations/expect_json_types_options_spec.rb +59 -0
  34. data/spec/airborne/expectations/expect_json_types_path_spec.rb +65 -0
  35. data/spec/airborne/expectations/expect_json_types_spec.rb +85 -0
  36. data/spec/airborne/expectations/expect_status_spec.rb +23 -0
  37. data/spec/airborne/head_spec.rb +10 -0
  38. data/spec/airborne/options_spec.rb +10 -0
  39. data/spec/airborne/patch_spec.rb +9 -0
  40. data/spec/airborne/path_spec.rb +34 -0
  41. data/spec/airborne/post_spec.rb +17 -0
  42. data/spec/airborne/put_spec.rb +9 -0
  43. data/spec/airborne/rack/rack_sinatra_spec.rb +43 -0
  44. data/spec/spec_helper.rb +14 -0
  45. data/spec/stub_helper.rb +45 -0
  46. data/spec/test_responses/array_of_types.json +9 -0
  47. data/spec/test_responses/array_of_values.json +5 -0
  48. data/spec/test_responses/array_response.json +5 -0
  49. data/spec/test_responses/array_with_index.json +6 -0
  50. data/spec/test_responses/array_with_nested.json +16 -0
  51. data/spec/test_responses/array_with_nested_bad_data.json +15 -0
  52. data/spec/test_responses/array_with_partial_nested.json +12 -0
  53. data/spec/test_responses/date_is_null_response.json +3 -0
  54. data/spec/test_responses/date_response.json +3 -0
  55. data/spec/test_responses/hash_property.json +3 -0
  56. data/spec/test_responses/invalid_get.json +1 -0
  57. data/spec/test_responses/invalid_json.json +1 -0
  58. data/spec/test_responses/numeric_property.json +6 -0
  59. data/spec/test_responses/simple_delete.json +4 -0
  60. data/spec/test_responses/simple_get.json +5 -0
  61. data/spec/test_responses/simple_json.json +5 -0
  62. data/spec/test_responses/simple_nested_path.json +12 -0
  63. data/spec/test_responses/simple_patch.json +4 -0
  64. data/spec/test_responses/simple_path_get.json +8 -0
  65. data/spec/test_responses/simple_post.json +4 -0
  66. data/spec/test_responses/simple_put.json +4 -0
  67. metadata +206 -0
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'put' do
4
+ it 'should allow testing on put requests' do
5
+ mock_put('simple_put')
6
+ put '/simple_put', {}
7
+ expect_json_types(status: :string, someNumber: :int)
8
+ end
9
+ end
@@ -0,0 +1,43 @@
1
+ require 'json'
2
+ require 'sinatra'
3
+
4
+ class SampleApp < Sinatra::Application
5
+ before do
6
+ content_type 'application/json'
7
+ end
8
+
9
+ get '/' do
10
+ { foo: 'bar' }.to_json
11
+ end
12
+ end
13
+
14
+ Airborne.configure do |config|
15
+ config.rack_app = SampleApp
16
+ end
17
+
18
+ describe 'rack app' do
19
+ it 'should allow requests against a sinatra app' do
20
+ get '/'
21
+ expect_json_types(foo: :string)
22
+ end
23
+
24
+ it 'should ensure correct values from sinatra app' do
25
+ get '/'
26
+ expect { expect_json_types(foo: :int) }.to raise_error(ExpectationNotMetError)
27
+ end
28
+
29
+ it 'Should set json_body even when not using the airborne http requests' do
30
+ Response = Struct.new(:body, :headers)
31
+ @response = Response.new({ foo: 'bar' }.to_json)
32
+ expect(json_body).to eq(foo: 'bar')
33
+ end
34
+
35
+ it 'Should work with consecutive requests' do
36
+ Response = Struct.new(:body, :headers)
37
+ @response = Response.new({ foo: 'bar' }.to_json)
38
+ expect(json_body).to eq(foo: 'bar')
39
+
40
+ @response = Response.new({ foo: 'boo' }.to_json)
41
+ expect(json_body).to eq(foo: 'boo')
42
+ end
43
+ end
@@ -0,0 +1,14 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+ require 'airborne'
4
+ require 'stub_helper'
5
+
6
+ Airborne.configure do |config|
7
+ config.base_url = 'http://www.example.com'
8
+ config.include StubHelper
9
+ end
10
+
11
+ ExpectationNotMetError = RSpec::Expectations::ExpectationNotMetError
12
+ ExpectationError = Airborne::ExpectationError
13
+ InvalidJsonError = Airborne::InvalidJsonError
14
+ PathError = Airborne::PathError
@@ -0,0 +1,45 @@
1
+ require 'webmock/rspec'
2
+
3
+ module StubHelper
4
+ def initialize(*args)
5
+ @base_url = 'http://www.example.com/'
6
+ end
7
+
8
+ def mock_get(url, response_headers = {}, status = 200)
9
+ stub_request(:get, @base_url + url).to_return(headers: response_headers, body: get_json_response_file(url), status: status)
10
+ end
11
+
12
+ def mock_post(url, options = {}, status = 200)
13
+ stub_request(:post, @base_url + url).with(body: options[:request_body] || {})
14
+ .to_return(headers: options[:response_headers] || {}, body: get_json_response_file(url), status: status)
15
+ end
16
+
17
+ def mock_put(url, options = {}, status = 200)
18
+ stub_request(:put, @base_url + url).with(body: options[:request_body] || {})
19
+ .to_return(headers: options[:response_headers] || {}, body: get_json_response_file(url), status: status)
20
+ end
21
+
22
+ def mock_patch(url, options = {}, status = 200)
23
+ stub_request(:patch, @base_url + url).with(body: options[:request_body] || {})
24
+ .to_return(headers: options[:response_headers] || {}, body: get_json_response_file(url), status: status)
25
+ end
26
+
27
+ def mock_delete(url, options = {}, status = 200)
28
+ stub_request(:delete, @base_url + url).with(body: options[:request_body] || {})
29
+ .to_return(headers: options[:response_headers] || {}, body: get_json_response_file(url), status: status)
30
+ end
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
+
36
+ def mock_options(url, response_headers = {}, status = 200)
37
+ stub_request(:options, @base_url + url).to_return(headers: response_headers, body: nil, status: status)
38
+ end
39
+
40
+ private
41
+
42
+ def get_json_response_file(name)
43
+ IO.read("spec/test_responses/#{name}.json")
44
+ end
45
+ end
@@ -0,0 +1,9 @@
1
+ {
2
+ "array_of_ints": [1,2,3],
3
+ "array_of_floats": [1.2, 2.2, 3.3],
4
+ "array_of_strings": ["one", "two", "three"],
5
+ "array_of_bools": [true, false, true],
6
+ "array_of_objects": [{}, {}, {}],
7
+ "array_of_arrays": [[], [], []],
8
+ "nil_array": null
9
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "grades":[89,65,100,92],
3
+ "bad": [89,67,"foo"],
4
+ "emptyArray": []
5
+ }
@@ -0,0 +1,5 @@
1
+ [
2
+ {
3
+ "name":"Seth"
4
+ }
5
+ ]
@@ -0,0 +1,6 @@
1
+ {
2
+ "cars":[
3
+ {"make": "Tesla", "model": "Model S"},
4
+ {"make": "Lamborghini", "model": "Aventador"}
5
+ ]
6
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "cars": [{
3
+ "make": "Tesla",
4
+ "model": "Model S",
5
+ "owners": [
6
+ {"name": "Bart Simpson"}
7
+ ]
8
+ }, {
9
+ "make": "Lamborghini",
10
+ "model": "Aventador",
11
+ "owners": [
12
+ {"name": "Peter Griffin"}
13
+
14
+ ]
15
+ }]
16
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "cars": [{
3
+ "make": "Tesla",
4
+ "model": "Model S",
5
+ "owners": [{
6
+ "name": "Bart Simpson"
7
+ }]
8
+ }, {
9
+ "make": "Lamborghini",
10
+ "model": "Aventador",
11
+ "owners": [{
12
+ "name": 123
13
+ }]
14
+ }]
15
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "cars": [{
3
+ "make": "Tesla",
4
+ "model": "Model S",
5
+ "owners": [
6
+ {"name": "Bart Simpson"}
7
+ ]
8
+ }, {
9
+ "make": "Lamborghini",
10
+ "model": "Aventador"
11
+ }]
12
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "dateDeleted": null
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "createdAt": "Mon Oct 20 2014 16:10:42 GMT-0400 (EDT)"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "person": { "name": "Alex" }
3
+ }
@@ -0,0 +1 @@
1
+ THIS IS INTENTIONALLY NOT JSON
@@ -0,0 +1 @@
1
+ invalid1234
@@ -0,0 +1,6 @@
1
+ {
2
+ "cars": {
3
+ "0": {"make": "Tesla", "model": "Model S"},
4
+ "1": {"make": "Lamborghini", "model": "Aventador"}
5
+ }
6
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "status": "ok",
3
+ "someNumber": 100
4
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "Alex",
3
+ "age": 32,
4
+ "address": null
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "foo": "foo",
3
+ "bar": "bar",
4
+ "baz": "baz"
5
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "Alex",
3
+ "address": {
4
+ "street": "Area 51",
5
+ "city": "Roswell",
6
+ "state": "NM",
7
+ "coordinates":{
8
+ "lattitude": 33.3872,
9
+ "longitutde": 104.5281
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "status": "ok",
3
+ "someNumber": 100
4
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "Alex",
3
+ "address": {
4
+ "street": "Area 51",
5
+ "city": "Roswell",
6
+ "state": "NM"
7
+ }
8
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "status": "ok",
3
+ "someNumber": 100
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "status": "ok",
3
+ "someNumber": 100
4
+ }
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hops-airborne
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.15
5
+ platform: ruby
6
+ authors:
7
+ - Alex Friedman
8
+ - Seth Pollack
9
+ - Fabio Buso
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2019-02-18 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '3.1'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '3.1'
29
+ - !ruby/object:Gem::Dependency
30
+ name: rest-client
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 1.7.3
36
+ - - "<"
37
+ - !ruby/object:Gem::Version
38
+ version: '3.0'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 1.7.3
46
+ - - "<"
47
+ - !ruby/object:Gem::Version
48
+ version: '3.0'
49
+ - !ruby/object:Gem::Dependency
50
+ name: rack-test
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '0.6'
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: 0.6.2
59
+ type: :runtime
60
+ prerelease: false
61
+ version_requirements: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - "~>"
64
+ - !ruby/object:Gem::Version
65
+ version: '0.6'
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.6.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: activesupport
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description:
112
+ email:
113
+ - fabio@logicalclocks.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".coveralls.yml"
119
+ - ".gitignore"
120
+ - ".rspec"
121
+ - ".travis.yml"
122
+ - Gemfile
123
+ - LICENSE
124
+ - README.md
125
+ - airborne.gemspec
126
+ - lib/airborne.rb
127
+ - lib/airborne/base.rb
128
+ - lib/airborne/optional_hash_type_expectations.rb
129
+ - lib/airborne/path_matcher.rb
130
+ - lib/airborne/rack_test_requester.rb
131
+ - lib/airborne/request_expectations.rb
132
+ - lib/airborne/rest_client_requester.rb
133
+ - spec/airborne/base_spec.rb
134
+ - spec/airborne/client_requester_spec.rb
135
+ - spec/airborne/delete_spec.rb
136
+ - spec/airborne/expectations/expect_header_contains_spec.rb
137
+ - spec/airborne/expectations/expect_header_spec.rb
138
+ - spec/airborne/expectations/expect_json_keys_path_spec.rb
139
+ - spec/airborne/expectations/expect_json_keys_spec.rb
140
+ - spec/airborne/expectations/expect_json_lambda_spec.rb
141
+ - spec/airborne/expectations/expect_json_options_spec.rb
142
+ - spec/airborne/expectations/expect_json_path_spec.rb
143
+ - spec/airborne/expectations/expect_json_regex_spec.rb
144
+ - spec/airborne/expectations/expect_json_sizes_spec.rb
145
+ - spec/airborne/expectations/expect_json_spec.rb
146
+ - spec/airborne/expectations/expect_json_types_date_spec.rb
147
+ - spec/airborne/expectations/expect_json_types_lambda_spec.rb
148
+ - spec/airborne/expectations/expect_json_types_optional_spec.rb
149
+ - spec/airborne/expectations/expect_json_types_options_spec.rb
150
+ - spec/airborne/expectations/expect_json_types_path_spec.rb
151
+ - spec/airborne/expectations/expect_json_types_spec.rb
152
+ - spec/airborne/expectations/expect_status_spec.rb
153
+ - spec/airborne/head_spec.rb
154
+ - spec/airborne/options_spec.rb
155
+ - spec/airborne/patch_spec.rb
156
+ - spec/airborne/path_spec.rb
157
+ - spec/airborne/post_spec.rb
158
+ - spec/airborne/put_spec.rb
159
+ - spec/airborne/rack/rack_sinatra_spec.rb
160
+ - spec/spec_helper.rb
161
+ - spec/stub_helper.rb
162
+ - spec/test_responses/array_of_types.json
163
+ - spec/test_responses/array_of_values.json
164
+ - spec/test_responses/array_response.json
165
+ - spec/test_responses/array_with_index.json
166
+ - spec/test_responses/array_with_nested.json
167
+ - spec/test_responses/array_with_nested_bad_data.json
168
+ - spec/test_responses/array_with_partial_nested.json
169
+ - spec/test_responses/date_is_null_response.json
170
+ - spec/test_responses/date_response.json
171
+ - spec/test_responses/hash_property.json
172
+ - spec/test_responses/invalid_get.json
173
+ - spec/test_responses/invalid_json.json
174
+ - spec/test_responses/numeric_property.json
175
+ - spec/test_responses/simple_delete.json
176
+ - spec/test_responses/simple_get.json
177
+ - spec/test_responses/simple_json.json
178
+ - spec/test_responses/simple_nested_path.json
179
+ - spec/test_responses/simple_patch.json
180
+ - spec/test_responses/simple_path_get.json
181
+ - spec/test_responses/simple_post.json
182
+ - spec/test_responses/simple_put.json
183
+ homepage:
184
+ licenses:
185
+ - MIT
186
+ metadata: {}
187
+ post_install_message:
188
+ rdoc_options: []
189
+ require_paths:
190
+ - lib
191
+ required_ruby_version: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ required_rubygems_version: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ requirements: []
202
+ rubygems_version: 3.0.2
203
+ signing_key:
204
+ specification_version: 4
205
+ summary: RSpec driven API testing framework - LogicalClocks maintained fork
206
+ test_files: []