api-tester 0.2.0 → 0.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d7fd0c363094e175b8c3a28f0b208c6a5202f496
4
- data.tar.gz: fd8349e6d3f62ab34f34f95f6dd82c1c77dcd62a
3
+ metadata.gz: 52c7685df4c907ec1841e6b73414281b003670bb
4
+ data.tar.gz: 4d277569d088a704d840ad7e6c187bee4eeb0629
5
5
  SHA512:
6
- metadata.gz: 0f99743ce48fb7157e50d6cb2fac17ab7256a6dffb8c3abaf370ae85c6866385087684932899d973388a23758da73079f55eb87946fa39267783db19f533d77d
7
- data.tar.gz: c74c4a8c90395deeed9f2a3520a67e3a279f5e011a54fbcdad13be5aa1c799e81f70d519a9fe63e3e9bc4e0306ddc990ff8e9d5cb333a850bda303bc2fab5ffc
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
- tester = ApiTester.new(contract).with_module(Format.new)
109
- expect(tester.go).to be true
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
@@ -1,3 +1,7 @@
1
+ 0.3.0
2
+
3
+ - Making modules actually be modules
4
+
1
5
  0.2.0
2
6
 
3
7
  - Finally fixing the naming scheme
@@ -1,21 +1,23 @@
1
- require 'api-tester/modules/module'
2
- require 'api-tester/util/supported_verbs'
1
+ require 'api-tester/util/supported_verbs'
3
2
 
4
3
  module ApiTester
5
- class ExtraVerbs < Module
6
- def go(endpoint, report)
7
- super
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 = test.check
16
- self.report.reports.concat reports
13
+ reports.concat test.check
17
14
  end
18
- self.report.reports == []
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 < Module
7
- def go definition, report
8
- super
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
- self.report.reports.concat test.check
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 < Module
7
- def go endpoint, report
8
- super
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
- self.report.reports.concat test.check
12
+ reports.concat test.check
15
13
  end
16
14
 
17
- self.report.reports == []
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 < Module
7
- def go(endpoint, report)
8
- super
9
-
5
+ class Typo
6
+ def self.go(endpoint, report)
7
+ reports = []
10
8
  allowances(endpoint).each do |verbs|
11
- check_typo_url endpoint
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
- reports = test.check
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 < Module
6
- def go definition, report
7
- super
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
- report.add_new_report MissingResponseFieldReport.new(definition.url, method.verb, field.name, "UnusedFieldsModule")
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
@@ -1,3 +1,3 @@
1
1
  module ApiTester
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
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.2.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