api-tester 0.3.1 → 1.1.2

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 (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