api-tester 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +26 -4
- data/changelog.txt +4 -0
- data/lib/api-tester/modules/extra_verbs.rb +11 -9
- data/lib/api-tester/modules/format.rb +10 -7
- data/lib/api-tester/modules/good_case.rb +7 -8
- data/lib/api-tester/modules/typo.rb +13 -11
- data/lib/api-tester/modules/unused_fields.rb +7 -7
- data/lib/api-tester/version.rb +1 -1
- metadata +1 -2
- data/lib/api-tester/modules/module.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52c7685df4c907ec1841e6b73414281b003670bb
|
4
|
+
data.tar.gz: 4d277569d088a704d840ad7e6c187bee4eeb0629
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ea181c7075b97cad1fbfbdfa235a0ab2fcda488a7bdc99efbe981b4bee6cbf69ec98c3024d6cb5cf321004b4bb2e2b4558ca611f9f5fc5628306cdad5dbf541
|
7
|
+
data.tar.gz: d9ad6635b7521e596478c47bea98ceb5c778a18b12a3bb33f5bb50941ec60cf70aaf7f8c90b2ba8e25581ddcf4f85cec93b5da9c0d963cebff67522b85577cc1
|
data/README.md
CHANGED
@@ -75,7 +75,7 @@ Define your contract and endpoints using
|
|
75
75
|
```ruby
|
76
76
|
require 'api-tester/definition/api_contract'
|
77
77
|
require 'api-tester/definition/endpoint'
|
78
|
-
contract = ApiContract.new "API Name"
|
78
|
+
contract = ApiTester::ApiContract.new "API Name"
|
79
79
|
endpoint = ApiTester::Endpoint.new "Some name which is currently unused", "http://yourbase.com/api/endpoint"
|
80
80
|
```
|
81
81
|
|
@@ -97,16 +97,21 @@ field.has_subfields?
|
|
97
97
|
values_array = field.negative_boundary_values
|
98
98
|
```
|
99
99
|
|
100
|
+
Define which modules you want to use through a config
|
101
|
+
```ruby
|
102
|
+
config = ApiTester::Config().with_module(Format.new)
|
103
|
+
```
|
104
|
+
|
100
105
|
Put them together and call go and off you go!
|
101
106
|
```ruby
|
102
|
-
request = Request.new.add_field(ApiTester::Field.new "fieldName")
|
107
|
+
request = ApiTester::Request.new.add_field(ApiTester::Field.new "fieldName")
|
103
108
|
expected_response = ApiTester::Response.new(200).add_field(ApiTester::Field.new "fieldName")
|
104
109
|
endpoint = ApiTester::Endpoint.new "Unused Name", "http://yourbase.com/api/endpoint"
|
105
110
|
endpoint.add_method ApiTester::SupportedVerbs::GET, expected_response, request
|
106
111
|
contract = ApiContract.new "API Name"
|
107
112
|
contract.add_endpoint endpoint
|
108
|
-
|
109
|
-
expect(
|
113
|
+
config = ApiTester::Config().with_module(Format.new)
|
114
|
+
expect(ApiTester.go(contract, config)).to be true
|
110
115
|
|
111
116
|
```
|
112
117
|
|
@@ -159,6 +164,23 @@ detailing unreturned response fields. When using this
|
|
159
164
|
module, it is recommended the good case module is also
|
160
165
|
used.
|
161
166
|
|
167
|
+
## Custom Modules
|
168
|
+
Do you want to do something with the definition which this gem currently does not support?
|
169
|
+
You can create your own test module and add it to the config instance class!
|
170
|
+
Just make sure it adheres to the following interface:
|
171
|
+
```ruby
|
172
|
+
module Name
|
173
|
+
def self.go contract, reports
|
174
|
+
# Your test code here - the reports object is where the reports are all stored
|
175
|
+
end
|
176
|
+
|
177
|
+
def self.order
|
178
|
+
# If your module needs to run first, put 0, if last, put 100.
|
179
|
+
# Otherwise this can just be any number
|
180
|
+
end
|
181
|
+
end
|
182
|
+
```
|
183
|
+
|
162
184
|
# Reporting
|
163
185
|
Right now the default reporting mechanism prints out to
|
164
186
|
the console all the issues which were found. You can
|
data/changelog.txt
CHANGED
@@ -1,21 +1,23 @@
|
|
1
|
-
require 'api-tester/
|
2
|
-
require 'api-tester/util/supported_verbs'
|
1
|
+
require 'api-tester/util/supported_verbs'
|
3
2
|
|
4
3
|
module ApiTester
|
5
|
-
|
6
|
-
def go(endpoint, report)
|
7
|
-
|
8
|
-
|
4
|
+
module ExtraVerbs
|
5
|
+
def self.go(endpoint, report)
|
6
|
+
reports = []
|
9
7
|
extras = ApiTester::SupportedVerbs.all - endpoint.verbs
|
10
8
|
extras.each do |verb|
|
11
9
|
verb_case = BoundaryCase.new("Verb check with #{verb} for #{endpoint.name}", {}, {})
|
12
10
|
method = ApiTester::ApiMethod.new verb, ApiTester::Response.new, ApiTester::Request.new
|
13
11
|
response = endpoint.call method, verb_case.payload, verb_case.headers
|
14
12
|
test = VerbClass.new response, verb_case.payload, endpoint.not_allowed_response, endpoint.url, verb
|
15
|
-
reports
|
16
|
-
self.report.reports.concat reports
|
13
|
+
reports.concat test.check
|
17
14
|
end
|
18
|
-
|
15
|
+
report.reports.concat reports
|
16
|
+
reports == []
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.order
|
20
|
+
3
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
@@ -1,22 +1,25 @@
|
|
1
1
|
require 'api-tester/reporter/status_code_report'
|
2
|
-
require 'api-tester/modules/module'
|
3
2
|
require 'api-tester/method_case_test'
|
4
3
|
|
5
4
|
module ApiTester
|
6
|
-
class Format
|
7
|
-
def go definition, report
|
8
|
-
|
9
|
-
|
5
|
+
class Format
|
6
|
+
def self.go definition, report
|
7
|
+
reports = []
|
10
8
|
definition.methods.each do |method|
|
11
9
|
cases = method.request.cases
|
12
10
|
cases.each do |format_case|
|
13
11
|
response = definition.call method, format_case.payload, format_case.headers
|
14
12
|
test = FormatTest.new response, format_case.payload, definition.bad_request_response, definition.url, method.verb
|
15
|
-
|
13
|
+
reports.concat test.check
|
16
14
|
end
|
17
15
|
end
|
18
16
|
|
19
|
-
report.reports
|
17
|
+
report.reports.concat reports
|
18
|
+
reports == []
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.order
|
22
|
+
2
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
@@ -1,23 +1,22 @@
|
|
1
1
|
require 'api-tester/reporter/status_code_report'
|
2
|
-
require 'api-tester/modules/module'
|
3
2
|
require 'api-tester/method_case_test'
|
4
3
|
|
5
4
|
module ApiTester
|
6
|
-
class GoodCase
|
7
|
-
def go endpoint, report
|
8
|
-
|
9
|
-
|
5
|
+
class GoodCase
|
6
|
+
def self.go endpoint, report
|
7
|
+
reports = []
|
10
8
|
endpoint.methods.each do |method|
|
11
9
|
default_case = BoundaryCase.new endpoint.url, method.request.default_payload, method.request.default_headers
|
12
10
|
response = endpoint.call method, default_case.payload, default_case.headers
|
13
11
|
test = GoodCaseTest.new response, endpoint.url, method
|
14
|
-
|
12
|
+
reports.concat test.check
|
15
13
|
end
|
16
14
|
|
17
|
-
|
15
|
+
report.reports.concat reports
|
16
|
+
reports == []
|
18
17
|
end
|
19
18
|
|
20
|
-
def order
|
19
|
+
def self.order
|
21
20
|
1
|
22
21
|
end
|
23
22
|
end
|
@@ -1,20 +1,19 @@
|
|
1
1
|
require 'api-tester/reporter/status_code_report'
|
2
|
-
require 'api-tester/modules/module'
|
3
2
|
require 'api-tester/util/supported_verbs'
|
4
3
|
|
5
4
|
module ApiTester
|
6
|
-
class Typo
|
7
|
-
def go(endpoint, report)
|
8
|
-
|
9
|
-
|
5
|
+
class Typo
|
6
|
+
def self.go(endpoint, report)
|
7
|
+
reports = []
|
10
8
|
allowances(endpoint).each do |verbs|
|
11
|
-
check_typo_url
|
9
|
+
reports.concat check_typo_url(endpoint)
|
12
10
|
end
|
13
11
|
|
14
|
-
report.reports
|
12
|
+
report.reports.concat reports
|
13
|
+
reports == []
|
15
14
|
end
|
16
15
|
|
17
|
-
def check_typo_url endpoint
|
16
|
+
def self.check_typo_url endpoint
|
18
17
|
bad_url = "#{endpoint.url}gibberishadsfasdf"
|
19
18
|
bad_endpoint = ApiTester::Endpoint.new "Bad URL", bad_url
|
20
19
|
typo_case = BoundaryCase.new("Typo URL check", {}, {})
|
@@ -22,17 +21,20 @@ module ApiTester
|
|
22
21
|
response = bad_endpoint.call method, typo_case.payload, typo_case.headers
|
23
22
|
|
24
23
|
test = TypoClass.new response, typo_case.payload, endpoint.not_found_response, bad_url, ApiTester::SupportedVerbs::GET
|
25
|
-
|
26
|
-
self.report.reports.concat reports
|
24
|
+
test.check
|
27
25
|
end
|
28
26
|
|
29
|
-
def allowances(endpoint)
|
27
|
+
def self.allowances(endpoint)
|
30
28
|
allowances = []
|
31
29
|
endpoint.methods.each do |method|
|
32
30
|
allowances << method.verb
|
33
31
|
end
|
34
32
|
allowances.uniq
|
35
33
|
end
|
34
|
+
|
35
|
+
def self.order
|
36
|
+
4
|
37
|
+
end
|
36
38
|
end
|
37
39
|
|
38
40
|
class TypoClass < MethodCaseTest
|
@@ -1,23 +1,23 @@
|
|
1
1
|
require 'api-tester/reporter/missing_response_field_report'
|
2
|
-
require 'api-tester/modules/module'
|
3
2
|
|
4
3
|
module ApiTester
|
5
|
-
class UnusedFields
|
6
|
-
def go definition, report
|
7
|
-
|
4
|
+
class UnusedFields
|
5
|
+
def self.go definition, report
|
6
|
+
reports = []
|
8
7
|
|
9
8
|
definition.methods.each do |method|
|
10
9
|
method.expected_response.body.each do |field|
|
11
10
|
if field.is_seen == 0
|
12
|
-
|
11
|
+
reports << MissingResponseFieldReport.new(definition.url, method.verb, field.name, "UnusedFieldsModule")
|
13
12
|
end
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
17
|
-
report.reports
|
16
|
+
report.reports.concat reports
|
17
|
+
reports == []
|
18
18
|
end
|
19
19
|
|
20
|
-
def order
|
20
|
+
def self.order
|
21
21
|
99
|
22
22
|
end
|
23
23
|
end
|
data/lib/api-tester/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api-tester
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- arane
|
@@ -118,7 +118,6 @@ files:
|
|
118
118
|
- lib/api-tester/modules/extra_verbs.rb
|
119
119
|
- lib/api-tester/modules/format.rb
|
120
120
|
- lib/api-tester/modules/good_case.rb
|
121
|
-
- lib/api-tester/modules/module.rb
|
122
121
|
- lib/api-tester/modules/typo.rb
|
123
122
|
- lib/api-tester/modules/unused_fields.rb
|
124
123
|
- lib/api-tester/reporter/api_report.rb
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'api-tester/reporter/status_code_report'
|
2
|
-
require 'api-tester/test_helper'
|
3
|
-
|
4
|
-
module ApiTester
|
5
|
-
class Module
|
6
|
-
attr_accessor :report
|
7
|
-
|
8
|
-
def set_report report
|
9
|
-
self.report = report
|
10
|
-
end
|
11
|
-
|
12
|
-
def go definition, report
|
13
|
-
set_report report
|
14
|
-
end
|
15
|
-
|
16
|
-
def order
|
17
|
-
5
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|