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.
- checksums.yaml +5 -5
- data/.github/dependabot.yml +15 -0
- data/.github/workflows/dependabot.yml +29 -0
- data/.github/workflows/push.yml +39 -0
- data/.github/workflows/test.yml +31 -0
- data/.rspec +1 -0
- data/.rubocop.yml +171 -0
- data/Gemfile +2 -0
- data/Guardfile +70 -0
- data/README.md +67 -63
- data/Rakefile +8 -3
- data/api-tester.gemspec +29 -23
- data/changelog.txt +19 -0
- data/lib/api-tester/config.rb +17 -15
- data/lib/api-tester/definition/boundary_case.rb +5 -4
- data/lib/api-tester/definition/contract.rb +10 -5
- data/lib/api-tester/definition/endpoint.rb +59 -32
- data/lib/api-tester/definition/fields/array_field.rb +26 -21
- data/lib/api-tester/definition/fields/boolean_field.rb +17 -7
- data/lib/api-tester/definition/fields/email_field.rb +28 -11
- data/lib/api-tester/definition/fields/enum_field.rb +19 -12
- data/lib/api-tester/definition/fields/field.rb +52 -45
- data/lib/api-tester/definition/fields/number_field.rb +20 -6
- data/lib/api-tester/definition/fields/object_field.rb +37 -30
- data/lib/api-tester/definition/fields/plain_array_field.rb +25 -0
- data/lib/api-tester/definition/method.rb +8 -5
- data/lib/api-tester/definition/request.rb +55 -13
- data/lib/api-tester/definition/response.rb +35 -25
- data/lib/api-tester/method_case_test.rb +68 -54
- data/lib/api-tester/modules/benchmark_module.rb +35 -0
- data/lib/api-tester/modules/extra_verbs.rb +37 -10
- data/lib/api-tester/modules/format.rb +23 -8
- data/lib/api-tester/modules/good_case.rb +25 -10
- data/lib/api-tester/modules/good_variations.rb +69 -0
- data/lib/api-tester/modules/injection_module.rb +44 -23
- data/lib/api-tester/modules/missing_resource.rb +64 -0
- data/lib/api-tester/modules/required_fields.rb +51 -0
- data/lib/api-tester/modules/server_information.rb +14 -12
- data/lib/api-tester/modules/typo.rb +39 -14
- data/lib/api-tester/modules/unexpected_fields.rb +61 -0
- data/lib/api-tester/modules/unused_fields.rb +13 -7
- data/lib/api-tester/reporter/api_report.rb +25 -16
- data/lib/api-tester/reporter/missing_field_report.rb +11 -15
- data/lib/api-tester/reporter/report.rb +12 -13
- data/lib/api-tester/reporter/response_time_report.rb +24 -0
- data/lib/api-tester/reporter/status_code_report.rb +10 -4
- data/lib/api-tester/test_helper.rb +8 -6
- data/lib/api-tester/util/response_evaluator.rb +84 -56
- data/lib/api-tester/util/supported_verbs.rb +8 -5
- data/lib/api-tester/version.rb +3 -1
- data/lib/api-tester.rb +6 -3
- metadata +117 -24
- data/.travis.yml +0 -6
- data/lib/api-tester/reporter/missing_response_field_report.rb +0 -21
@@ -1,25 +1,21 @@
|
|
1
|
-
|
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(
|
10
|
-
self.description = description
|
8
|
+
def initialize(url:, verb:, expected_field:, description:)
|
11
9
|
self.url = url
|
12
|
-
self.
|
10
|
+
self.verb = verb
|
13
11
|
self.expected_field = expected_field
|
14
|
-
self.
|
12
|
+
self.description = description
|
15
13
|
end
|
16
14
|
|
17
15
|
def print
|
18
|
-
puts "#{
|
19
|
-
puts "
|
20
|
-
puts " #{
|
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
|
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 "#{
|
19
|
-
puts " Requested #{
|
20
|
-
puts " #{
|
21
|
-
puts
|
22
|
-
puts " "
|
23
|
-
puts
|
24
|
-
puts " #{
|
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
|
9
|
-
super description
|
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
|
4
|
-
|
6
|
+
def initialize(url); end
|
7
|
+
|
8
|
+
def before; end
|
5
9
|
|
6
|
-
def retrieve_param
|
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
|
-
|
4
|
-
attr_accessor :expected_response
|
6
|
+
attr_accessor :response_body, :expected_response, :expected_fields_hash
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
-
|
12
|
-
|
13
|
-
|
14
|
+
def response_field_array
|
15
|
+
field_array response_body
|
16
|
+
end
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
+
def expected_fields
|
19
|
+
expected_fields_hash.keys
|
20
|
+
end
|
18
21
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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
|
-
|
30
|
-
|
31
|
-
|
32
|
+
def extra_fields
|
33
|
+
response_field_array - expected_fields
|
34
|
+
end
|
32
35
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
+
def missing_fields
|
37
|
+
expected_fields - response_field_array
|
38
|
+
end
|
36
39
|
|
37
|
-
|
38
|
-
|
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
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
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
|
-
|
51
|
-
|
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
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
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
|
-
|
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
|
6
|
+
def self.add_item(key, value)
|
4
7
|
@hash ||= {}
|
5
8
|
@hash[key] = value
|
6
9
|
end
|
7
10
|
|
8
|
-
def
|
11
|
+
def self.const_missing(key)
|
9
12
|
@hash[key]
|
10
13
|
end
|
11
14
|
|
12
|
-
def
|
13
|
-
@hash.each
|
15
|
+
def self.each(&block)
|
16
|
+
@hash.each(&block)
|
14
17
|
end
|
15
18
|
|
16
|
-
def
|
19
|
+
def self.all
|
17
20
|
@hash.values
|
18
21
|
end
|
19
22
|
|
data/lib/api-tester/version.rb
CHANGED
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
|
5
|
+
def self.go(contract, config)
|
3
6
|
reporter = config.reporter
|
4
7
|
|
5
|
-
config.modules.sort_by
|
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
|
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:
|
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:
|
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: '
|
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: '
|
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:
|
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:
|
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:
|
112
|
+
name: rubocop
|
57
113
|
requirement: !ruby/object:Gem::Requirement
|
58
114
|
requirements:
|
59
115
|
- - "~>"
|
60
116
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
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:
|
124
|
+
version: 1.31.0
|
69
125
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
126
|
+
name: terminal-notifier
|
71
127
|
requirement: !ruby/object:Gem::Requirement
|
72
128
|
requirements:
|
73
129
|
- - "~>"
|
74
130
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
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:
|
138
|
+
version: 2.0.0
|
83
139
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
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:
|
90
|
-
type: :
|
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:
|
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.
|
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.
|
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
|
-
- ".
|
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
|
-
|
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,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
|