api-tester 0.3.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +15 -0
  3. data/.github/workflows/dependabot.yml +29 -0
  4. data/.github/workflows/push.yml +39 -0
  5. data/.github/workflows/test.yml +31 -0
  6. data/.rspec +1 -0
  7. data/.rubocop.yml +171 -0
  8. data/Gemfile +2 -0
  9. data/Guardfile +70 -0
  10. data/README.md +67 -63
  11. data/Rakefile +8 -3
  12. data/api-tester.gemspec +29 -23
  13. data/changelog.txt +19 -0
  14. data/lib/api-tester/config.rb +17 -15
  15. data/lib/api-tester/definition/boundary_case.rb +5 -4
  16. data/lib/api-tester/definition/contract.rb +10 -5
  17. data/lib/api-tester/definition/endpoint.rb +59 -32
  18. data/lib/api-tester/definition/fields/array_field.rb +26 -21
  19. data/lib/api-tester/definition/fields/boolean_field.rb +17 -7
  20. data/lib/api-tester/definition/fields/email_field.rb +28 -11
  21. data/lib/api-tester/definition/fields/enum_field.rb +19 -12
  22. data/lib/api-tester/definition/fields/field.rb +52 -45
  23. data/lib/api-tester/definition/fields/number_field.rb +20 -6
  24. data/lib/api-tester/definition/fields/object_field.rb +37 -30
  25. data/lib/api-tester/definition/fields/plain_array_field.rb +25 -0
  26. data/lib/api-tester/definition/method.rb +8 -5
  27. data/lib/api-tester/definition/request.rb +55 -13
  28. data/lib/api-tester/definition/response.rb +35 -25
  29. data/lib/api-tester/method_case_test.rb +68 -54
  30. data/lib/api-tester/modules/benchmark_module.rb +35 -0
  31. data/lib/api-tester/modules/extra_verbs.rb +37 -10
  32. data/lib/api-tester/modules/format.rb +23 -8
  33. data/lib/api-tester/modules/good_case.rb +25 -10
  34. data/lib/api-tester/modules/good_variations.rb +69 -0
  35. data/lib/api-tester/modules/injection_module.rb +44 -23
  36. data/lib/api-tester/modules/missing_resource.rb +64 -0
  37. data/lib/api-tester/modules/required_fields.rb +51 -0
  38. data/lib/api-tester/modules/server_information.rb +14 -12
  39. data/lib/api-tester/modules/typo.rb +39 -14
  40. data/lib/api-tester/modules/unexpected_fields.rb +61 -0
  41. data/lib/api-tester/modules/unused_fields.rb +13 -7
  42. data/lib/api-tester/reporter/api_report.rb +25 -16
  43. data/lib/api-tester/reporter/missing_field_report.rb +11 -15
  44. data/lib/api-tester/reporter/report.rb +12 -13
  45. data/lib/api-tester/reporter/response_time_report.rb +24 -0
  46. data/lib/api-tester/reporter/status_code_report.rb +10 -4
  47. data/lib/api-tester/test_helper.rb +8 -6
  48. data/lib/api-tester/util/response_evaluator.rb +84 -56
  49. data/lib/api-tester/util/supported_verbs.rb +8 -5
  50. data/lib/api-tester/version.rb +3 -1
  51. data/lib/api-tester.rb +6 -3
  52. metadata +117 -24
  53. data/.travis.yml +0 -6
  54. data/lib/api-tester/reporter/missing_response_field_report.rb +0 -21
@@ -1,25 +1,21 @@
1
- module ApiReport
1
+ # frozen_string_literal: true
2
+
3
+ module ApiTester
4
+ # Report used for when response is missing a field
2
5
  class MissingFieldReport
3
- attr_accessor :description
4
- attr_accessor :url
5
- attr_accessor :request
6
- attr_accessor :expected_field
7
- attr_accessor :actual_response
6
+ attr_accessor :url, :verb, :expected_field, :description
8
7
 
9
- def initialize(description, url, request, expected_field)
10
- self.description = description
8
+ def initialize(url:, verb:, expected_field:, description:)
11
9
  self.url = url
12
- self.request = request
10
+ self.verb = verb
13
11
  self.expected_field = expected_field
14
- self.actual_response = ''
12
+ self.description = description
15
13
  end
16
14
 
17
15
  def print
18
- puts "#{self.description}: "
19
- puts " Requested #{self.url} with payload:"
20
- puts " #{self.request}"
21
- puts ' Missing field: '
22
- puts " #{self.expected_field}"
16
+ puts "#{description}:"
17
+ puts " #{verb} #{url} is missing response field:"
18
+ puts " #{expected_field}"
23
19
  end
24
20
  end
25
21
  end
@@ -1,12 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ApiTester
4
+ # Standard report format for differing responses
2
5
  class Report
3
- attr_accessor :description
4
- attr_accessor :url
5
- attr_accessor :request
6
- attr_accessor :expected_response
7
- attr_accessor :actual_response
6
+ attr_accessor :description, :url, :request, :expected_response, :actual_response
8
7
 
9
- def initialize description, url, request, expected_response, actual_response
8
+ def initialize(description:, url:, request:, expected_response:, actual_response:)
10
9
  self.description = description
11
10
  self.url = url
12
11
  self.request = request
@@ -15,13 +14,13 @@ module ApiTester
15
14
  end
16
15
 
17
16
  def print
18
- puts "#{self.description}: "
19
- puts " Requested #{self.url} with payload:"
20
- puts " #{self.request.to_json}"
21
- puts " Expecting: "
22
- puts " " + self.expected_response.to_s
23
- puts " Receiving: "
24
- puts " #{self.actual_response}"
17
+ puts "#{description}: "
18
+ puts " Requested #{url} with payload:"
19
+ puts " #{request.to_json}"
20
+ puts ' Expecting: '
21
+ puts " #{expected_response}"
22
+ puts ' Receiving: '
23
+ puts " #{actual_response}"
25
24
  end
26
25
  end
27
26
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ApiTester
4
+ # Report used for when response took too long
5
+ class ResponseTimeReport
6
+ attr_accessor :url, :verb, :payload, :max_time, :actual_time, :description
7
+
8
+ def initialize(url:, verb:, payload:, max_time:, actual_time:, description:)
9
+ self.url = url
10
+ self.verb = verb
11
+ self.payload = payload
12
+ self.max_time = max_time
13
+ self.actual_time = actual_time
14
+ self.description = description
15
+ end
16
+
17
+ def print
18
+ puts "#{description}:"
19
+ puts " #{verb} #{url} took #{actual_time}ms, the max time is #{max_time}ms:"
20
+ puts ' Payload:'
21
+ puts " #{payload}"
22
+ end
23
+ end
24
+ end
@@ -1,12 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'api-tester/reporter/report'
2
4
 
3
5
  module ApiTester
6
+ # Report for when status code is different than expected
4
7
  class StatusCodeReport < Report
5
- attr_accessor :expected_status_code
6
- attr_accessor :actual_status_code
8
+ attr_accessor :expected_status_code, :actual_status_code
7
9
 
8
- def initialize description, url, request, expected_status_code, actual_status_code
9
- super description, url, request, expected_status_code, actual_status_code
10
+ def initialize(description:, url:, request:, expected_status_code:, actual_status_code:)
11
+ super description: description,
12
+ url: url,
13
+ request: request,
14
+ expected_response: expected_status_code,
15
+ actual_response: actual_status_code
10
16
  self.expected_status_code = expected_status_code
11
17
  self.actual_status_code = actual_status_code
12
18
  end
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ApiTester
4
+ # Interface for when things need to be done before or after an api call
2
5
  class TestHelper
3
- def before
4
- end
6
+ def initialize(url); end
7
+
8
+ def before; end
5
9
 
6
- def retrieve_param key
7
- end
10
+ def retrieve_param(key); end
8
11
 
9
- def after
10
- end
12
+ def after; end
11
13
  end
12
14
  end
@@ -1,75 +1,103 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ApiTester
4
+ # Class for evaluating responses against what is expected
2
5
  class ResponseEvaluator
3
- attr_accessor :response_body
4
- attr_accessor :expected_response
6
+ attr_accessor :response_body, :expected_response, :expected_fields_hash
5
7
 
6
- def initialize(actual_response_body, expected_response_fields)
7
- self.response_body = actual_response_body
8
- self.expected_response = expected_response_fields
9
- end
8
+ def initialize(actual_body:, expected_fields:)
9
+ self.response_body = actual_body
10
+ self.expected_response = expected_fields
11
+ self.expected_fields_hash = expected_field_array(expected_response.body)
12
+ end
10
13
 
11
- def response_field_array
12
- field_array self.response_body
13
- end
14
+ def response_field_array
15
+ field_array response_body
16
+ end
14
17
 
15
- def expected_fields
16
- expected_fields_hash.keys
17
- end
18
+ def expected_fields
19
+ expected_fields_hash.keys
20
+ end
18
21
 
19
- def seen_fields
20
- seen = []
21
- fields = response_field_array - extra_fields
22
- expected = expected_fields_hash
23
- fields.each do |field_key|
24
- seen << expected[field_key]
25
- end
26
- seen
22
+ def seen_fields
23
+ seen = []
24
+ fields = response_field_array - extra_fields
25
+ expected = expected_fields_hash
26
+ fields.each do |field_key|
27
+ seen << expected[field_key]
27
28
  end
29
+ seen
30
+ end
28
31
 
29
- def expected_fields_hash
30
- expected_field_array self.expected_response.body
31
- end
32
+ def extra_fields
33
+ response_field_array - expected_fields
34
+ end
32
35
 
33
- def extra_fields
34
- response_field_array - expected_fields
35
- end
36
+ def missing_fields
37
+ expected_fields - response_field_array
38
+ end
36
39
 
37
- def missing_fields
38
- expected_fields - response_field_array
40
+ def expected_field_array(expected_fields)
41
+ fields = {}
42
+ expected_fields.each do |field|
43
+ field_name = field.name
44
+ if field.has_key
45
+ fields[field.name] = field
46
+ else
47
+ field_name = field.type
48
+ end
49
+ fields = fields.merge inner_expected_field(expected_fields: field.fields,
50
+ name: field_name)
39
51
  end
52
+ fields
53
+ end
40
54
 
41
- def expected_field_array expected_fields
42
- fields = {}
43
- expected_fields.each do |field|
44
- fields[field.name] = field
45
- fields = fields.merge inner_expected_field(field.fields, field.name)
46
- end
47
- fields
55
+ def inner_expected_field(expected_fields:, name:)
56
+ fields = {}
57
+ expected_fields.each do |field|
58
+ inner_name = "#{name}.#{field.name}"
59
+ if field.has_key
60
+ fields[inner_name] = field
61
+ else
62
+ inner_name = "#{name}.#{field.type}"
63
+ end
64
+ fields = fields.merge inner_expected_field(expected_fields: field.fields,
65
+ name: inner_name)
48
66
  end
67
+ fields
68
+ end
49
69
 
50
- def inner_expected_field expected_fields, name
51
- fields = {}
52
- expected_fields.each do |field|
53
- inner_name = "#{name}.#{field.name}"
54
- fields[inner_name] = field
55
- fields = fields.merge inner_expected_field(field.fields, inner_name)
56
- end
57
- fields
58
- end
70
+ def field_array(object)
71
+ fields = []
59
72
 
60
- def field_array object
61
- fields = []
62
- object.each do |key, value|
63
- if(value)
64
- fields << key.to_s
65
- fields.concat(field_array(value).map{|i| "#{key}.#{i}"})
66
- else
67
- fields.concat(field_array(key))
68
- end
73
+ if object.instance_of?(Array)
74
+ name = 'array'
75
+ fields.concat(field_array(object[0]).map { |i| "#{name}.#{i}" })
76
+ else
77
+ object.each do |key, value|
78
+ if key.respond_to?('each')
79
+ fields.concat(field_array(key))
80
+ elsif value == nil || value == 0 || value == false
81
+ fields << key.to_s
82
+ fields.concat(field_array(value).map { |i| "#{key}.#{i}" })
83
+ elsif value.to_s[0] == '[' && value.to_s[-1] == ']' && !value.to_s.include?('=>')
84
+ fields << key.to_s
85
+ elsif value
86
+ passed_value = value
87
+ fields << key.to_s
88
+ if value.instance_of?(Array)
89
+ passed_value = value[0]
90
+ end
91
+ fields.concat(field_array(passed_value).map { |i| "#{key}.#{i}" })
92
+ else
93
+ fields.concat(field_array(key))
69
94
  end
70
- fields
71
- rescue NoMethodError
72
- fields
95
+ end
73
96
  end
97
+
98
+ fields
99
+ rescue NoMethodError
100
+ fields
101
+ end
74
102
  end
75
103
  end
@@ -1,19 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ApiTester
4
+ # Class defining the verbs this tool supports
2
5
  class SupportedVerbs
3
- def SupportedVerbs.add_item(key, value)
6
+ def self.add_item(key, value)
4
7
  @hash ||= {}
5
8
  @hash[key] = value
6
9
  end
7
10
 
8
- def SupportedVerbs.const_missing(key)
11
+ def self.const_missing(key)
9
12
  @hash[key]
10
13
  end
11
14
 
12
- def SupportedVerbs.each
13
- @hash.each {|key,value| yield(key,value)}
15
+ def self.each(&block)
16
+ @hash.each(&block)
14
17
  end
15
18
 
16
- def SupportedVerbs.all
19
+ def self.all
17
20
  @hash.values
18
21
  end
19
22
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ApiTester
2
- VERSION = "0.3.1"
4
+ VERSION = '1.1.2'
3
5
  end
data/lib/api-tester.rb CHANGED
@@ -1,12 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Tool for testing through API definitions
1
4
  module ApiTester
2
- def self.go contract, config
5
+ def self.go(contract, config)
3
6
  reporter = config.reporter
4
7
 
5
- config.modules.sort_by{ |mod| mod.order }.each do |mod|
8
+ config.modules.sort_by(&:order).each do |mod|
6
9
  reporter.add_reports mod.go contract
7
10
  end
8
11
 
9
12
  reporter.print
10
- reporter.reports.size == 0
13
+ reporter.reports.size.zero?
11
14
  end
12
15
  end
metadata CHANGED
@@ -1,43 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api-tester
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - arane
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-30 00:00:00.000000000 Z
11
+ date: 2022-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler-audit
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.9.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: guard-rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 4.7.3
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 4.7.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
15
57
  requirement: !ruby/object:Gem::Requirement
16
58
  requirements:
17
59
  - - "~>"
18
60
  - !ruby/object:Gem::Version
19
- version: '1.13'
61
+ version: '0.11'
20
62
  type: :development
21
63
  prerelease: false
22
64
  version_requirements: !ruby/object:Gem::Requirement
23
65
  requirements:
24
66
  - - "~>"
25
67
  - !ruby/object:Gem::Version
26
- version: '1.13'
68
+ version: '0.11'
27
69
  - !ruby/object:Gem::Dependency
28
70
  name: rake
29
71
  requirement: !ruby/object:Gem::Requirement
30
72
  requirements:
31
73
  - - "~>"
32
74
  - !ruby/object:Gem::Version
33
- version: '10.0'
75
+ version: 13.0.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 13.0.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: require_all
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 3.0.0
34
90
  type: :development
35
91
  prerelease: false
36
92
  version_requirements: !ruby/object:Gem::Requirement
37
93
  requirements:
38
94
  - - "~>"
39
95
  - !ruby/object:Gem::Version
40
- version: '10.0'
96
+ version: 3.0.0
41
97
  - !ruby/object:Gem::Dependency
42
98
  name: rspec
43
99
  requirement: !ruby/object:Gem::Requirement
@@ -53,61 +109,89 @@ dependencies:
53
109
  - !ruby/object:Gem::Version
54
110
  version: '3.0'
55
111
  - !ruby/object:Gem::Dependency
56
- name: webmock
112
+ name: rubocop
57
113
  requirement: !ruby/object:Gem::Requirement
58
114
  requirements:
59
115
  - - "~>"
60
116
  - !ruby/object:Gem::Version
61
- version: '3.4'
117
+ version: 1.31.0
62
118
  type: :development
63
119
  prerelease: false
64
120
  version_requirements: !ruby/object:Gem::Requirement
65
121
  requirements:
66
122
  - - "~>"
67
123
  - !ruby/object:Gem::Version
68
- version: '3.4'
124
+ version: 1.31.0
69
125
  - !ruby/object:Gem::Dependency
70
- name: pry
126
+ name: terminal-notifier
71
127
  requirement: !ruby/object:Gem::Requirement
72
128
  requirements:
73
129
  - - "~>"
74
130
  - !ruby/object:Gem::Version
75
- version: '0.11'
131
+ version: 2.0.0
76
132
  type: :development
77
133
  prerelease: false
78
134
  version_requirements: !ruby/object:Gem::Requirement
79
135
  requirements:
80
136
  - - "~>"
81
137
  - !ruby/object:Gem::Version
82
- version: '0.11'
138
+ version: 2.0.0
83
139
  - !ruby/object:Gem::Dependency
84
- name: rest-client
140
+ name: terminal-notifier-guard
85
141
  requirement: !ruby/object:Gem::Requirement
86
142
  requirements:
87
143
  - - "~>"
88
144
  - !ruby/object:Gem::Version
89
- version: '2.0'
90
- type: :runtime
145
+ version: 1.7.0
146
+ type: :development
91
147
  prerelease: false
92
148
  version_requirements: !ruby/object:Gem::Requirement
93
149
  requirements:
94
150
  - - "~>"
95
151
  - !ruby/object:Gem::Version
96
- version: '2.0'
152
+ version: 1.7.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: webmock
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '3.4'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '3.4'
97
167
  - !ruby/object:Gem::Dependency
98
168
  name: injection_vulnerability_library
99
169
  requirement: !ruby/object:Gem::Requirement
100
170
  requirements:
101
171
  - - '='
102
172
  - !ruby/object:Gem::Version
103
- version: 0.0.2
173
+ version: 0.1.3
104
174
  type: :runtime
105
175
  prerelease: false
106
176
  version_requirements: !ruby/object:Gem::Requirement
107
177
  requirements:
108
178
  - - '='
109
179
  - !ruby/object:Gem::Version
110
- version: 0.0.2
180
+ version: 0.1.3
181
+ - !ruby/object:Gem::Dependency
182
+ name: rest-client
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '2.0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '2.0'
111
195
  description: Tool to test APIs which will eventually do boundary testing and other
112
196
  sorts of testing automatically given a contract
113
197
  email:
@@ -116,10 +200,15 @@ executables: []
116
200
  extensions: []
117
201
  extra_rdoc_files: []
118
202
  files:
203
+ - ".github/dependabot.yml"
204
+ - ".github/workflows/dependabot.yml"
205
+ - ".github/workflows/push.yml"
206
+ - ".github/workflows/test.yml"
119
207
  - ".gitignore"
120
208
  - ".rspec"
121
- - ".travis.yml"
209
+ - ".rubocop.yml"
122
210
  - Gemfile
211
+ - Guardfile
123
212
  - LICENSE.txt
124
213
  - README.md
125
214
  - Rakefile
@@ -139,21 +228,27 @@ files:
139
228
  - lib/api-tester/definition/fields/field.rb
140
229
  - lib/api-tester/definition/fields/number_field.rb
141
230
  - lib/api-tester/definition/fields/object_field.rb
231
+ - lib/api-tester/definition/fields/plain_array_field.rb
142
232
  - lib/api-tester/definition/method.rb
143
233
  - lib/api-tester/definition/request.rb
144
234
  - lib/api-tester/definition/response.rb
145
235
  - lib/api-tester/method_case_test.rb
236
+ - lib/api-tester/modules/benchmark_module.rb
146
237
  - lib/api-tester/modules/extra_verbs.rb
147
238
  - lib/api-tester/modules/format.rb
148
239
  - lib/api-tester/modules/good_case.rb
240
+ - lib/api-tester/modules/good_variations.rb
149
241
  - lib/api-tester/modules/injection_module.rb
242
+ - lib/api-tester/modules/missing_resource.rb
243
+ - lib/api-tester/modules/required_fields.rb
150
244
  - lib/api-tester/modules/server_information.rb
151
245
  - lib/api-tester/modules/typo.rb
246
+ - lib/api-tester/modules/unexpected_fields.rb
152
247
  - lib/api-tester/modules/unused_fields.rb
153
248
  - lib/api-tester/reporter/api_report.rb
154
249
  - lib/api-tester/reporter/missing_field_report.rb
155
- - lib/api-tester/reporter/missing_response_field_report.rb
156
250
  - lib/api-tester/reporter/report.rb
251
+ - lib/api-tester/reporter/response_time_report.rb
157
252
  - lib/api-tester/reporter/status_code_report.rb
158
253
  - lib/api-tester/test_helper.rb
159
254
  - lib/api-tester/util/response_evaluator.rb
@@ -162,8 +257,7 @@ files:
162
257
  homepage: https://github.com/araneforseti/api-tester
163
258
  licenses:
164
259
  - MIT
165
- metadata:
166
- allowed_push_host: https://rubygems.org/
260
+ metadata: {}
167
261
  post_install_message:
168
262
  rdoc_options: []
169
263
  require_paths:
@@ -179,8 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
273
  - !ruby/object:Gem::Version
180
274
  version: '0'
181
275
  requirements: []
182
- rubyforge_project:
183
- rubygems_version: 2.6.12
276
+ rubygems_version: 3.0.3.1
184
277
  signing_key:
185
278
  specification_version: 4
186
279
  summary: Tool to help test APIs
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- language: ruby
2
-
3
- rvm:
4
- - 2.2.1
5
-
6
- before_install: gem install bundler -v 1.13.6
@@ -1,21 +0,0 @@
1
- module ApiTester
2
- class MissingResponseFieldReport
3
- attr_accessor :url
4
- attr_accessor :verb
5
- attr_accessor :expected_field
6
- attr_accessor :description
7
-
8
- def initialize(url, verb, expected_field, description)
9
- self.url = url
10
- self.verb = verb
11
- self.expected_field = expected_field
12
- self.description = description
13
- end
14
-
15
- def print
16
- puts "#{self.description}:"
17
- puts " #{self.verb} #{self.url} is missing response field:"
18
- puts " #{self.expected_field}"
19
- end
20
- end
21
- end