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,65 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect_json options' do
4
+ describe 'match_expected', match_expected: true, match_actual: false do
5
+ it 'should require all expected properties' do
6
+ mock_get 'simple_get'
7
+ get '/simple_get'
8
+ expect{ expect_json(name: 'Alex', other: 'other') }.to raise_error(ExpectationNotMetError)
9
+ end
10
+
11
+ it 'should not require the actual properties' do
12
+ mock_get 'simple_get'
13
+ get '/simple_get'
14
+ expect_json(name: 'Alex')
15
+ end
16
+ end
17
+
18
+ describe 'match_actual', match_expected: false, match_actual: true do
19
+ it 'should require all actual properties' do
20
+ mock_get 'simple_get'
21
+ get '/simple_get'
22
+ expect{ expect_json(name: 'Alex') }.to raise_error(ExpectationError)
23
+ end
24
+
25
+ it 'should not require the expected properties' do
26
+ mock_get 'simple_get'
27
+ get '/simple_get'
28
+ expect_json(name: 'Alex', age: 32, address: nil, other: 'other')
29
+ end
30
+ end
31
+
32
+ describe 'match_both', match_expected: true, match_actual: true do
33
+ it 'should require all actual properties' do
34
+ mock_get 'simple_get'
35
+ get '/simple_get'
36
+ expect{ expect_json(name: 'Alex') }.to raise_error(ExpectationError)
37
+ end
38
+
39
+ it 'should require all expected properties' do
40
+ mock_get 'simple_get'
41
+ get '/simple_get'
42
+ expect{ expect_json(name: 'Alex', other: 'other') }.to raise_error(ExpectationNotMetError)
43
+ end
44
+
45
+ it 'should require all expected properties' do
46
+ mock_get 'simple_get'
47
+ get '/simple_get'
48
+ expect{ expect_json(name: 'Alex', nested: {}) }.to raise_error(ExpectationNotMetError)
49
+ end
50
+ end
51
+
52
+ describe 'match_none', match_expected: false, match_actual: false do
53
+ it 'should not require the actual properties' do
54
+ mock_get 'simple_get'
55
+ get '/simple_get'
56
+ expect_json(name: 'Alex')
57
+ end
58
+
59
+ it 'should not require the expected properties' do
60
+ mock_get 'simple_get'
61
+ get '/simple_get'
62
+ expect_json(name: 'Alex', age: 32, address: nil, other: 'other', nested: {})
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,108 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect_json with path' do
4
+ it 'should allow simple path and verify only that path' do
5
+ mock_get('simple_path_get')
6
+ get '/simple_path_get'
7
+ expect_json('address', street: 'Area 51', city: 'Roswell', state: 'NM')
8
+ end
9
+
10
+ it 'should allow nested paths' do
11
+ mock_get('simple_nested_path')
12
+ get '/simple_nested_path'
13
+ expect_json('address.coordinates', lattitude: 33.3872, longitutde: 104.5281)
14
+ end
15
+
16
+ it 'should index into array and test against specific element' do
17
+ mock_get('array_with_index')
18
+ get '/array_with_index'
19
+ expect_json('cars.0', make: 'Tesla', model: 'Model S')
20
+ end
21
+
22
+ it 'should test against all elements in the array' do
23
+ mock_get('array_with_index')
24
+ get '/array_with_index'
25
+ expect_json('cars.?', make: 'Tesla', model: 'Model S')
26
+ expect_json('cars.?', make: 'Lamborghini', model: 'Aventador')
27
+ end
28
+
29
+ it 'should test against properties in the array' do
30
+ mock_get('array_with_index')
31
+ get '/array_with_index'
32
+ expect_json('cars.?.make', 'Tesla')
33
+ end
34
+
35
+ it 'should ensure at least one match' do
36
+ mock_get('array_with_index')
37
+ get '/array_with_index'
38
+ expect { expect_json('cars.?.make', 'Teslas') }.to raise_error(ExpectationNotMetError)
39
+ end
40
+
41
+ it 'should check for at least one match' do
42
+ mock_get('array_with_nested')
43
+ get '/array_with_nested'
44
+ expect_json('cars.?.owners.?', name: 'Bart Simpson')
45
+ end
46
+
47
+ it 'should ensure at least one match' do
48
+ mock_get('array_with_nested')
49
+ get '/array_with_nested'
50
+ expect { expect_json('cars.?.owners.?', name: 'Bart Simpsons') }.to raise_error(ExpectationNotMetError)
51
+ end
52
+
53
+ it 'should check for one match that matches all ' do
54
+ mock_get('array_with_nested')
55
+ get '/array_with_nested'
56
+ expect_json('cars.?.owners.*', name: 'Bart Simpson')
57
+ end
58
+
59
+ it 'should check for one match that matches all with lambda' do
60
+ mock_get('array_with_nested')
61
+ get '/array_with_nested'
62
+ expect_json('cars.?.owners.*', name: ->(name) { expect(name).to eq('Bart Simpson') })
63
+ end
64
+
65
+ it 'should ensure one match that matches all with lambda' do
66
+ mock_get('array_with_nested')
67
+ get '/array_with_nested'
68
+ expect { expect_json('cars.?.owners.*', name: ->(name) { expect(name).to eq('Bart Simpsons') }) }.to raise_error(ExpectationNotMetError)
69
+ end
70
+
71
+ it 'should ensure one match that matches all' do
72
+ mock_get('array_with_nested')
73
+ get '/array_with_nested'
74
+ expect { expect_json('cars.?.owners.*', name: 'Bart Simpsons') }.to raise_error(ExpectationNotMetError)
75
+ end
76
+
77
+ it 'should allow indexing' do
78
+ mock_get('array_with_nested')
79
+ get '/array_with_nested'
80
+ expect_json('cars.0.owners.0', name: 'Bart Simpson')
81
+ end
82
+
83
+ it 'should allow strings (String) to be tested against a path' do
84
+ mock_get('simple_nested_path')
85
+ get '/simple_nested_path'
86
+ expect_json('address.city', 'Roswell')
87
+ end
88
+
89
+ it 'should allow floats (Float) to be tested against a path' do
90
+ mock_get('simple_nested_path')
91
+ get '/simple_nested_path'
92
+ expect_json('address.coordinates.lattitude', 33.3872)
93
+ end
94
+
95
+ it 'should allow integers (Fixnum, Bignum) to be tested against a path' do
96
+ mock_get('simple_get')
97
+ get '/simple_get'
98
+ expect_json('age', 32)
99
+ end
100
+
101
+ it 'should raise ExpectationError when expectation expects an object instead of value' do
102
+ mock_get('array_with_index')
103
+ get '/array_with_index'
104
+ expect do
105
+ expect_json('cars.0.make', make: 'Tesla')
106
+ end.to raise_error(ExpectationError, "Expected String Tesla\nto be an object with property make")
107
+ end
108
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect_json regex' do
4
+ it 'should test against regex' do
5
+ mock_get('simple_get')
6
+ get '/simple_get'
7
+ expect_json(name: regex('^A'))
8
+ end
9
+
10
+ it 'should raise an error if regex does not match' do
11
+ mock_get('simple_get')
12
+ get '/simple_get'
13
+ expect { expect_json(name: regex('^B')) }.to raise_error(ExpectationNotMetError)
14
+ end
15
+
16
+ it 'should allow regex(Regexp) to be tested against a path' do
17
+ mock_get('simple_nested_path')
18
+ get '/simple_nested_path'
19
+ expect_json('address.city', regex('^R'))
20
+ end
21
+
22
+ it 'should allow testing regex against numbers directly' do
23
+ mock_get('simple_nested_path')
24
+ get '/simple_nested_path'
25
+ expect_json('address.coordinates.lattitude', regex('^3'))
26
+ end
27
+
28
+ it 'should allow testing regex against numbers in the hash' do
29
+ mock_get('simple_nested_path')
30
+ get '/simple_nested_path'
31
+ expect_json('address.coordinates', lattitude: regex('^3'))
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect_json_sizes' do
4
+ it 'should detect sizes' do
5
+ mock_get('array_of_values')
6
+ get '/array_of_values'
7
+ expect_json_sizes(grades: 4, bad: 3, emptyArray: 0)
8
+ end
9
+
10
+ it 'should allow full object graph' do
11
+ mock_get('array_with_nested')
12
+ get '/array_with_nested'
13
+ expect_json_sizes(cars: { 0 => { owners: 1 }, 1 => { owners: 1 } })
14
+ end
15
+
16
+ it 'should allow properties to be tested against a path' do
17
+ mock_get('array_with_nested')
18
+ get '/array_with_nested'
19
+ expect_json_sizes('cars.0.owners', 1)
20
+ end
21
+
22
+ it 'should test against all elements in the array when path contains * AND expectation is an Integer' do
23
+ mock_get('array_with_nested')
24
+ get '/array_with_nested'
25
+ expect_json_sizes('cars.*.owners', 1)
26
+ end
27
+
28
+ it 'should test against all elements in the array when path contains * AND expectation is a Hash' do
29
+ mock_get('array_with_nested')
30
+ get '/array_with_nested'
31
+ expect_json_sizes('cars.*', owners: 1)
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect_json' do
4
+ it 'should ensure correct json values' do
5
+ mock_get('simple_get')
6
+ get '/simple_get'
7
+ expect_json(name: 'Alex', age: 32)
8
+ end
9
+
10
+ it 'should allow array response' do
11
+ mock_get('array_response')
12
+ get '/array_response'
13
+ expect_json([{ name: 'Seth' }])
14
+ end
15
+
16
+ it 'should fail when incorrect json is tested' do
17
+ mock_get('simple_get')
18
+ get '/simple_get'
19
+ expect { expect_json(bad: 'data') }.to raise_error(ExpectationNotMetError)
20
+ end
21
+
22
+ it 'should allow full object graph' do
23
+ mock_get('simple_path_get')
24
+ get '/simple_path_get'
25
+ expect_json(name: 'Alex', address: { street: 'Area 51', city: 'Roswell', state: 'NM' })
26
+ end
27
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+ require 'date'
3
+
4
+ describe 'expect_json_types with date' do
5
+ it 'should verify correct date types' do
6
+ mock_get('date_response')
7
+ get '/date_response'
8
+ expect_json_types(createdAt: :date)
9
+ end
10
+
11
+ it 'should verify correct date types with path' do
12
+ mock_get('date_response')
13
+ get '/date_response'
14
+ expect_json_types('createdAt', :date)
15
+ end
16
+ end
17
+
18
+ describe 'expect_json with date' do
19
+ it 'should verify correct date value' do
20
+ mock_get('date_response')
21
+ get '/date_response'
22
+ prev_day = DateTime.new(2014, 10, 19)
23
+ next_day = DateTime.new(2014, 10, 21)
24
+ expect_json(createdAt: date { |value| expect(value).to be_between(prev_day, next_day) })
25
+ end
26
+ end
27
+
28
+ describe 'expect_json_types with date_or_null' do
29
+ it 'should verify date_or_null when date is null' do
30
+ mock_get('date_is_null_response')
31
+ get '/date_is_null_response'
32
+ expect_json_types(dateDeleted: :date_or_null)
33
+ end
34
+
35
+ it 'should verify date_or_null when date is null with path' do
36
+ mock_get('date_is_null_response')
37
+ get '/date_is_null_response'
38
+ expect_json_types('dateDeleted', :date_or_null)
39
+ end
40
+
41
+ it 'should verify date_or_null with date' do
42
+ mock_get('date_response')
43
+ get '/date_response'
44
+ expect_json_types(createdAt: :date_or_null)
45
+ end
46
+
47
+ it 'should verify date_or_null with date with path' do
48
+ mock_get('date_response')
49
+ get '/date_response'
50
+ expect_json_types('createdAt', :date_or_null)
51
+ end
52
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect_json_types lambda' do
4
+ it 'should invoke proc passed in' do
5
+ mock_get('simple_get')
6
+ get '/simple_get'
7
+ expect_json_types(name: ->(name) { expect(name.length).to eq(4) })
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect_json_types optional' do
4
+ it 'should test optional nested hash when exists' do
5
+ mock_get('simple_nested_path')
6
+ get '/simple_nested_path'
7
+ expect_json_types('address.coordinates', optional(lattitude: :float, longitutde: :float))
8
+ end
9
+
10
+ it 'should allow optional nested hash' do
11
+ mock_get('simple_path_get')
12
+ get '/simple_path_get'
13
+ expect_json_types('address.coordinates', optional(lattitude: :float, longitutde: :float))
14
+ end
15
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect_json_types options' do
4
+ describe 'match_expected', match_expected: true, match_actual: false do
5
+ it 'should require all expected properties' do
6
+ mock_get 'simple_get'
7
+ get '/simple_get'
8
+ expect{ expect_json_types(name: :string, other: :string) }.to raise_error(ExpectationNotMetError)
9
+ end
10
+
11
+ it 'should not require the actual properties' do
12
+ mock_get 'simple_get'
13
+ get '/simple_get'
14
+ expect_json_types(name: :string)
15
+ end
16
+ end
17
+
18
+ describe 'match_actual', match_expected: false, match_actual: true do
19
+ it 'should require all actual properties' do
20
+ mock_get 'simple_get'
21
+ get '/simple_get'
22
+ expect{ expect_json_types(name: :string) }.to raise_error(ExpectationError)
23
+ end
24
+
25
+ it 'should not require the expected properties' do
26
+ mock_get 'simple_get'
27
+ get '/simple_get'
28
+ expect_json_types(name: :string, age: :int, address: :null, other: :string)
29
+ end
30
+ end
31
+
32
+ describe 'match_both', match_expected: true, match_actual: true do
33
+ it 'should require all actual properties' do
34
+ mock_get 'simple_get'
35
+ get '/simple_get'
36
+ expect{ expect_json_types(name: :string) }.to raise_error(ExpectationError)
37
+ end
38
+
39
+ it 'should require all expected properties' do
40
+ mock_get 'simple_get'
41
+ get '/simple_get'
42
+ expect{ expect_json_types(name: :string, other: :string) }.to raise_error(ExpectationNotMetError)
43
+ end
44
+ end
45
+
46
+ describe 'match_none', match_expected: false, match_actual: false do
47
+ it 'should not require the actual properties' do
48
+ mock_get 'simple_get'
49
+ get '/simple_get'
50
+ expect_json_types(name: :string)
51
+ end
52
+
53
+ it 'should not require the expected properties' do
54
+ mock_get 'simple_get'
55
+ get '/simple_get'
56
+ expect_json_types(name: :string, age: :int, address: :null, other: :string)
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect_json_types wih path' do
4
+ it 'should allow simple path and verify only that path' do
5
+ mock_get('simple_path_get')
6
+ get '/simple_path_get'
7
+ expect_json_types('address', street: :string, city: :string, state: :string)
8
+ end
9
+
10
+ it 'should allow nested paths' do
11
+ mock_get('simple_nested_path')
12
+ get '/simple_nested_path'
13
+ expect_json_types('address.coordinates', lattitude: :float, longitutde: :float)
14
+ end
15
+
16
+ it 'should index into array and test against specific element' do
17
+ mock_get('array_with_index')
18
+ get '/array_with_index'
19
+ expect_json_types('cars.0', make: :string, model: :string)
20
+ end
21
+
22
+ it 'should allow properties to be tested against a path' do
23
+ mock_get('array_with_index')
24
+ get '/array_with_index'
25
+ expect_json_types('cars.0.make', :string)
26
+ end
27
+
28
+ it 'should test against all elements in the array' do
29
+ mock_get('array_with_index')
30
+ get '/array_with_index'
31
+ expect_json_types('cars.*', make: :string, model: :string)
32
+ end
33
+
34
+ it 'should ensure all elements of array are valid' do
35
+ mock_get('array_with_index')
36
+ get '/array_with_index'
37
+ expect { expect_json_types('cars.*', make: :string, model: :int) }.to raise_error(ExpectationNotMetError)
38
+ end
39
+
40
+ it 'should deep symbolize array responses' do
41
+ mock_get('array_response')
42
+ get '/array_response'
43
+ expect_json_types('*', name: :string)
44
+ end
45
+
46
+ it 'should check all nested arrays for specified elements' do
47
+ mock_get('array_with_nested')
48
+ get '/array_with_nested'
49
+ expect_json_types('cars.*.owners.*', name: :string)
50
+ end
51
+
52
+ it 'should ensure all nested arrays contain correct data' do
53
+ mock_get('array_with_nested_bad_data')
54
+ get '/array_with_nested_bad_data'
55
+ expect { expect_json_types('cars.*.owners.*', name: :string) }.to raise_error(ExpectationNotMetError)
56
+ end
57
+
58
+ it 'should raise ExpectationError when expectation expects an object instead of type' do
59
+ mock_get('array_with_index')
60
+ get '/array_with_index'
61
+ expect do
62
+ expect_json_types('cars.0.make', make: :string)
63
+ end.to raise_error(ExpectationError, "Expected String Tesla\nto be an object with property make")
64
+ end
65
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect_json_types' do
4
+ it 'should detect current type' do
5
+ mock_get('simple_get')
6
+ get '/simple_get'
7
+ expect_json_types(name: :string, age: :int)
8
+ end
9
+
10
+ it 'should fail when incorrect json types tested' do
11
+ mock_get('simple_get')
12
+ get '/simple_get'
13
+ expect { expect_json_types(bad: :bool) }.to raise_error(ExpectationNotMetError)
14
+ end
15
+
16
+ it 'should not fail when optional property is not present' do
17
+ mock_get('simple_get')
18
+ get '/simple_get'
19
+ expect_json_types(name: :string, age: :int, optional: :bool_or_null)
20
+ end
21
+
22
+ it 'should allow full object graph' do
23
+ mock_get('simple_path_get')
24
+ get '/simple_path_get'
25
+ expect_json_types({name: :string, address: { street: :string, city: :string, state: :string }})
26
+ end
27
+
28
+ it 'should check all types in a simple array' do
29
+ mock_get('array_of_values')
30
+ get '/array_of_values'
31
+ expect_json_types(grades: :array_of_ints)
32
+ end
33
+
34
+ it 'should ensure all valid types in a simple array' do
35
+ mock_get('array_of_values')
36
+ get '/array_of_values'
37
+ expect { expect_json_types(bad: :array_of_ints) }.to raise_error(ExpectationNotMetError)
38
+ end
39
+
40
+ it "should allow array of types to be null" do
41
+ mock_get('array_of_types')
42
+ get '/array_of_types'
43
+ expect_json_types(nil_array: :array_or_null)
44
+ expect_json_types(nil_array: :array_of_integers_or_null)
45
+ expect_json_types(nil_array: :array_of_ints_or_null)
46
+ expect_json_types(nil_array: :array_of_floats_or_null)
47
+ expect_json_types(nil_array: :array_of_strings_or_null)
48
+ expect_json_types(nil_array: :array_of_booleans_or_null)
49
+ expect_json_types(nil_array: :array_of_bools_or_null)
50
+ expect_json_types(nil_array: :array_of_objects_or_null)
51
+ expect_json_types(nil_array: :array_of_arrays_or_null)
52
+ end
53
+
54
+ it "should check array types when not null" do
55
+ mock_get('array_of_types')
56
+ get '/array_of_types'
57
+ expect_json_types(array_of_ints: :array_or_null)
58
+ expect_json_types(array_of_ints: :array_of_integers_or_null)
59
+ expect_json_types(array_of_ints: :array_of_ints_or_null)
60
+ expect_json_types(array_of_floats: :array_of_floats_or_null)
61
+ expect_json_types(array_of_strings: :array_of_strings_or_null)
62
+ expect_json_types(array_of_bools: :array_of_booleans_or_null)
63
+ expect_json_types(array_of_bools: :array_of_bools_or_null)
64
+ expect_json_types(array_of_objects: :array_of_objects_or_null)
65
+ expect_json_types(array_of_arrays: :array_of_arrays_or_null)
66
+ end
67
+
68
+ it 'should allow empty array' do
69
+ mock_get('array_of_values')
70
+ get '/array_of_values'
71
+ expect_json_types(emptyArray: :array_of_ints)
72
+ end
73
+
74
+ it 'should be able to test for a nil type' do
75
+ mock_get('simple_get')
76
+ get '/simple_get'
77
+ expect_json_types(name: :string, age: :int, address: :null)
78
+ end
79
+
80
+ it 'Should throw bad type error' do
81
+ mock_get('simple_get')
82
+ get '/simple_get'
83
+ expect { expect_json_types(name: :foo) }.to raise_error(ExpectationError, "Expected type foo\nis an invalid type")
84
+ end
85
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect_status' do
4
+ it 'should verify correct status code' do
5
+ mock_get('simple_get')
6
+ get '/simple_get'
7
+ expect_status 200
8
+ end
9
+
10
+ it 'should fail when incorrect status code is returned' do
11
+ mock_get('simple_get')
12
+ get '/simple_get'
13
+ expect { expect_status 123 }.to raise_error(ExpectationNotMetError)
14
+ end
15
+
16
+ it 'should translate symbol codes to whatever is appropriate for the request' do
17
+ mock_get('simple_get')
18
+ get '/simple_get'
19
+ expect_status :ok
20
+ expect_status 200
21
+ expect_status '200'
22
+ end
23
+ end
@@ -0,0 +1,10 @@
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
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'head' do
4
+ it 'should allow testing on options requests' do
5
+ mock_options('simple_options', 'foo' => 'foo')
6
+ options '/simple_options', {}
7
+ expect_status 200
8
+ expect_header('foo', 'foo')
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'patch' do
4
+ it 'should allow testing on patch requests' do
5
+ mock_patch('simple_patch')
6
+ patch '/simple_patch', {}
7
+ expect_json_types(status: :string, someNumber: :int)
8
+ end
9
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'expect path' do
4
+ describe 'errors' do
5
+ before :each do
6
+ mock_get('array_with_index')
7
+ get '/array_with_index'
8
+ end
9
+
10
+ it 'should raise PathError when incorrect path containing .. is used' do
11
+ expect do
12
+ expect_json('cars..make', 'Tesla')
13
+ end.to raise_error(PathError, "Invalid Path, contains '..'")
14
+ end
15
+
16
+ it 'should raise PathError when trying to call property on an array' do
17
+ expect do
18
+ expect_json('cars.make', 'Tesla')
19
+ end.to raise_error(PathError, "Expected Array\nto be an object with property make")
20
+ end
21
+ end
22
+
23
+ it 'should work with numberic properties' do
24
+ mock_get('numeric_property')
25
+ get '/numeric_property'
26
+ expect_json('cars.0.make', 'Tesla')
27
+ end
28
+
29
+ it 'should work with numberic properties' do
30
+ mock_get('numeric_property')
31
+ get '/numeric_property'
32
+ expect_json_keys('cars.0', [:make, :model])
33
+ end
34
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+ require 'webmock/rspec'
3
+
4
+ describe 'post' do
5
+ it 'should allow testing on post requests' do
6
+ mock_post('simple_post')
7
+ post '/simple_post', {}
8
+ expect_json_types(status: :string, someNumber: :int)
9
+ end
10
+
11
+ it 'should allow testing on post requests' do
12
+ url = 'http://www.example.com/simple_post'
13
+ stub_request(:post, url)
14
+ post '/simple_post', 'hello', content_type: 'text/plain'
15
+ expect(WebMock).to have_requested(:post, url).with(body: 'hello', headers: { 'Content-Type' => 'text/plain' })
16
+ end
17
+ end