fitting 2.18.3 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -11
- data/CHANGELOG.md +6 -0
- data/README.md +46 -6
- data/fitting.gemspec +1 -1
- data/lib/fitting/configuration.rb +12 -6
- data/lib/fitting/cover/json_schema.rb +4 -2
- data/lib/fitting/cover/json_schema_enum.rb +4 -2
- data/lib/fitting/cover/json_schema_one_of.rb +4 -2
- data/lib/fitting/railtie.rb +1 -0
- data/lib/fitting/records/documented/request.rb +1 -15
- data/lib/fitting/records/spherical/requests.rb +1 -1
- data/lib/fitting/records/tested/request.rb +11 -11
- data/lib/fitting/records/tested/response.rb +4 -4
- data/lib/fitting/report/actions.rb +4 -0
- data/lib/fitting/report/prefix.rb +20 -41
- data/lib/fitting/report/prefixes.rb +7 -8
- data/lib/fitting/report/response.rb +0 -3
- data/lib/fitting/report/tests.rb +23 -10
- data/lib/fitting/storage/responses.rb +5 -9
- data/lib/fitting/tests.rb +12 -4
- data/lib/fitting/version.rb +1 -1
- data/lib/fitting.rb +38 -43
- data/lib/tasks/fitting.rake +2 -186
- data/lib/tasks/fitting_outgoing.rake +91 -0
- metadata +5 -41
- data/lib/fitting/configuration/yaml.rb +0 -89
- data/lib/fitting/cover/response.rb +0 -37
- data/lib/fitting/documentation.rb +0 -56
- data/lib/fitting/matchers/response_matcher.rb +0 -88
- data/lib/fitting/records/realized_unit.rb +0 -52
- data/lib/fitting/records/test_unit/request.rb +0 -98
- data/lib/fitting/records/unit/combination.rb +0 -27
- data/lib/fitting/records/unit/json_schema.rb +0 -111
- data/lib/fitting/records/unit/request.rb +0 -37
- data/lib/fitting/records/unit/response.rb +0 -32
- data/lib/fitting/request.rb +0 -38
- data/lib/fitting/response/fully_validates.rb +0 -34
- data/lib/fitting/response.rb +0 -88
- data/lib/fitting/statistics/analysis.rb +0 -25
- data/lib/fitting/statistics/cover_error.rb +0 -29
- data/lib/fitting/statistics/cover_error_enum.rb +0 -29
- data/lib/fitting/statistics/cover_error_one_of.rb +0 -29
- data/lib/fitting/statistics/great.rb +0 -13
- data/lib/fitting/statistics/list.rb +0 -55
- data/lib/fitting/statistics/lists.rb +0 -53
- data/lib/fitting/statistics/measurement.rb +0 -92
- data/lib/fitting/statistics/measurement_cover.rb +0 -92
- data/lib/fitting/statistics/measurement_cover_enum.rb +0 -92
- data/lib/fitting/statistics/measurement_cover_one_of.rb +0 -92
- data/lib/fitting/statistics/not_covered_responses.rb +0 -13
- data/lib/fitting/statistics/percent.rb +0 -20
- data/lib/fitting/statistics/requests_stats.rb +0 -40
- data/lib/fitting/statistics/responses_stats.rb +0 -32
- data/lib/fitting/statistics/template.rb +0 -117
- data/lib/fitting/statistics/template_cover_error.rb +0 -50
- data/lib/fitting/statistics/template_cover_error_enum.rb +0 -50
- data/lib/fitting/statistics/template_cover_error_one_of.rb +0 -50
- data/lib/fitting/statistics.rb +0 -25
- data/lib/fitting/storage/white_list.rb +0 -158
- data/lib/fitting/templates/realized_template.rb +0 -49
- data/lib/fitting/view/report.html.haml +0 -16
- data/lib/fitting/view/style.css +0 -47
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'fitting/response'
|
2
|
-
require 'fitting/configuration'
|
3
|
-
|
4
|
-
module Fitting
|
5
|
-
module Matchers
|
6
|
-
class Response
|
7
|
-
def matches?(response)
|
8
|
-
if Fitting.configuration.is_a?(Array)
|
9
|
-
Fitting.configuration.all? do |config|
|
10
|
-
one_match(response, config)
|
11
|
-
end
|
12
|
-
else
|
13
|
-
one_match(response, Fitting.configuration)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def ===(other)
|
18
|
-
matches?(other)
|
19
|
-
end
|
20
|
-
|
21
|
-
def failure_message
|
22
|
-
unless @response.documented?
|
23
|
-
return "response not documented\n"\
|
24
|
-
"got: #{@response.real_request_with_status}"
|
25
|
-
end
|
26
|
-
|
27
|
-
return nil if @response.fully_validates.valid?
|
28
|
-
|
29
|
-
"response does not conform to json-schema\n"\
|
30
|
-
"schemas: \n#{@response.expected}\n\n"\
|
31
|
-
"got: #{@response.got}\n\n"\
|
32
|
-
"errors: \n#{@response.fully_validates}\n"
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def one_match(response, config)
|
38
|
-
response = Fitting::Response.new(response, config.tomogram)
|
39
|
-
if response.within_prefix?(config.prefix)
|
40
|
-
@response = response
|
41
|
-
return true if @response.ignored?(config.ignore_list)
|
42
|
-
|
43
|
-
@response.fully_validates.valid?
|
44
|
-
else
|
45
|
-
true
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
class StrictResponse
|
51
|
-
def matches?(response)
|
52
|
-
if Fitting.configuration.is_a?(Array)
|
53
|
-
one_match(response, Fitting.configuration[0])
|
54
|
-
else
|
55
|
-
one_match(response, Fitting.configuration)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def ===(other)
|
60
|
-
matches?(other)
|
61
|
-
end
|
62
|
-
|
63
|
-
def failure_message
|
64
|
-
unless @response.documented?
|
65
|
-
return "response not documented\n"\
|
66
|
-
"got: #{@response.real_request_with_status}"
|
67
|
-
end
|
68
|
-
|
69
|
-
return nil if @response.strict_fully_validates.valid?
|
70
|
-
|
71
|
-
"response does not conform to json-schema\n"\
|
72
|
-
"schemas: \n#{@response.expected}\n\n"\
|
73
|
-
"got: #{@response.got}\n\n"\
|
74
|
-
"errors: \n#{@response.strict_fully_validates}\n"
|
75
|
-
end
|
76
|
-
|
77
|
-
private
|
78
|
-
|
79
|
-
def one_match(response, config)
|
80
|
-
@response = Fitting::Response.new(
|
81
|
-
response,
|
82
|
-
config.tomogram
|
83
|
-
)
|
84
|
-
@response.strict_fully_validates.valid?
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'fitting/records/test_unit/request'
|
2
|
-
|
3
|
-
module Fitting
|
4
|
-
class Records
|
5
|
-
class RealizedUnit
|
6
|
-
def initialize(realized_requests, documented_requests)
|
7
|
-
@realized_requests = realized_requests
|
8
|
-
@documented_requests = documented_requests
|
9
|
-
end
|
10
|
-
|
11
|
-
def fully_covered?
|
12
|
-
all_good_documented = false
|
13
|
-
all_good_response_documented = false
|
14
|
-
all_good_response_json_schemas = false
|
15
|
-
all_good_valid_json_schemas = false
|
16
|
-
|
17
|
-
test_file_paths.each do |_key, requests|
|
18
|
-
all_good_documented = requests.all?(&:documented?)
|
19
|
-
all_good_response_documented = requests.all?(&:response_documented?)
|
20
|
-
all_good_response_json_schemas = requests.all?(&:response_json_schemas?)
|
21
|
-
all_good_valid_json_schemas = requests.all?(&:valid_json_schemas?)
|
22
|
-
end
|
23
|
-
|
24
|
-
all_good_documented && all_good_response_documented &&
|
25
|
-
all_good_response_json_schemas && all_good_valid_json_schemas
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_file_paths
|
29
|
-
return @test_file_paths if @test_file_paths
|
30
|
-
|
31
|
-
@test_file_paths = {}
|
32
|
-
white_unit.map do |request|
|
33
|
-
@test_file_paths[request.test_file_path] ||= []
|
34
|
-
@test_file_paths[request.test_file_path].push(request)
|
35
|
-
end
|
36
|
-
@test_file_paths
|
37
|
-
end
|
38
|
-
|
39
|
-
def all_documented_requests
|
40
|
-
@all_documented_requests ||= @documented_requests.to_a.inject([]) do |res, tomogram_request|
|
41
|
-
res.push(Fitting::Records::Documented::Request.new(tomogram_request, nil))
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def white_unit
|
46
|
-
@white_unit_requests ||= @realized_requests.to_a.inject([]) do |res, tested_request|
|
47
|
-
res.push(Fitting::Records::TestUnit::Request.new(tested_request, all_documented_requests))
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
require 'json-schema'
|
2
|
-
|
3
|
-
module Fitting
|
4
|
-
class Records
|
5
|
-
class TestUnit
|
6
|
-
class Request
|
7
|
-
def initialize(tested_request, all_documented_requests)
|
8
|
-
@tested_request = tested_request
|
9
|
-
@all_documented_requests = all_documented_requests
|
10
|
-
end
|
11
|
-
|
12
|
-
def method
|
13
|
-
@method ||= @tested_request.method
|
14
|
-
end
|
15
|
-
|
16
|
-
def path
|
17
|
-
@path ||= @tested_request.path
|
18
|
-
end
|
19
|
-
|
20
|
-
def body
|
21
|
-
@body ||= @tested_request.body
|
22
|
-
end
|
23
|
-
|
24
|
-
def response
|
25
|
-
@response ||= @tested_request.response
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_path
|
29
|
-
@test_path ||= @tested_request.title
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_file_path
|
33
|
-
@test_file_path ||= @tested_request.group
|
34
|
-
end
|
35
|
-
|
36
|
-
def documented_requests
|
37
|
-
@documented_requests ||= @all_documented_requests.inject([]) do |res, documented_request|
|
38
|
-
next res unless @tested_request.method == documented_request.method &&
|
39
|
-
documented_request.path.match(@tested_request.path.to_s)
|
40
|
-
|
41
|
-
res.push(documented_request)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def documented?
|
46
|
-
@documented ||= documented_requests.present?
|
47
|
-
end
|
48
|
-
|
49
|
-
def documented_responses
|
50
|
-
@documented_responses ||= documented_requests.inject([]) do |res, documented_request|
|
51
|
-
documented_request.responses.map do |documented_response|
|
52
|
-
next unless documented_response['status'] == response.status.to_s
|
53
|
-
|
54
|
-
res.push(documented_response)
|
55
|
-
end
|
56
|
-
end.flatten.compact
|
57
|
-
end
|
58
|
-
|
59
|
-
def response_documented?
|
60
|
-
@response_documented ||= documented_responses.present?
|
61
|
-
end
|
62
|
-
|
63
|
-
def response_json_schemas
|
64
|
-
@response_json_schemas ||= documented_responses.inject([]) do |res, documented_response|
|
65
|
-
res.push(documented_response['json_schemas'])
|
66
|
-
end.flatten
|
67
|
-
end
|
68
|
-
|
69
|
-
def response_json_schemas?
|
70
|
-
@response_json_schemas_present ||= response_json_schemas.present?
|
71
|
-
end
|
72
|
-
|
73
|
-
def valid_json_schemas
|
74
|
-
@valid_json_schemas ||= response_json_schemas.inject([]) do |res, json_schema|
|
75
|
-
next res unless JSON::Validator.validate(json_schema, response.body)
|
76
|
-
|
77
|
-
res.push(json_schema)
|
78
|
-
end.flatten
|
79
|
-
end
|
80
|
-
|
81
|
-
def invalid_json_schemas
|
82
|
-
@invalid_json_schemas ||= response_json_schemas.inject([]) do |res, json_schema|
|
83
|
-
next res if JSON::Validator.validate(json_schema, response.body)
|
84
|
-
|
85
|
-
res.push(
|
86
|
-
json_schema: json_schema,
|
87
|
-
fully_validate: JSON::Validator.fully_validate(json_schema, response.body)
|
88
|
-
)
|
89
|
-
end.flatten
|
90
|
-
end
|
91
|
-
|
92
|
-
def valid_json_schemas?
|
93
|
-
@valid_json_schemas_present ||= valid_json_schemas.present?
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'json-schema'
|
2
|
-
|
3
|
-
module Fitting
|
4
|
-
class Records
|
5
|
-
class Unit
|
6
|
-
class Combination
|
7
|
-
attr_reader :description, :json_schema, :bodies
|
8
|
-
|
9
|
-
def initialize(comb, bodies)
|
10
|
-
@description = comb[1]
|
11
|
-
@json_schema = comb[0]
|
12
|
-
@bodies = bodies
|
13
|
-
end
|
14
|
-
|
15
|
-
def valid_bodies
|
16
|
-
@valid_bodies ||= @bodies.inject([]) do |res, tested_body|
|
17
|
-
next res unless JSON::Validator.validate(@json_schema, tested_body)
|
18
|
-
|
19
|
-
res.push(tested_body)
|
20
|
-
rescue JSON::Schema::UriError
|
21
|
-
res.push(tested_body)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,111 +0,0 @@
|
|
1
|
-
require 'json-schema'
|
2
|
-
require 'fitting/cover/json_schema'
|
3
|
-
require 'fitting/cover/json_schema_enum'
|
4
|
-
require 'fitting/cover/json_schema_one_of'
|
5
|
-
require 'fitting/records/unit/combination'
|
6
|
-
|
7
|
-
module Fitting
|
8
|
-
class Records
|
9
|
-
class Unit
|
10
|
-
class JsonSchema
|
11
|
-
attr_reader :json_schema
|
12
|
-
|
13
|
-
def initialize(json_schema, tested_bodies)
|
14
|
-
@json_schema = json_schema
|
15
|
-
@tested_bodies = tested_bodies
|
16
|
-
end
|
17
|
-
|
18
|
-
def bodies
|
19
|
-
@bodies ||= @tested_bodies.inject([]) do |res, tested_body|
|
20
|
-
next res unless JSON::Validator.validate(@json_schema, tested_body)
|
21
|
-
|
22
|
-
res.push(tested_body)
|
23
|
-
rescue JSON::Schema::UriError
|
24
|
-
res.push(tested_body)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def combinations
|
29
|
-
return @combinations if @combinations
|
30
|
-
|
31
|
-
@combinations = []
|
32
|
-
cover_json_schema = Fitting::Cover::JSONSchema.new(@json_schema)
|
33
|
-
cover_json_schema.combi.map do |comb|
|
34
|
-
@combinations.push(Fitting::Records::Unit::Combination.new(
|
35
|
-
comb,
|
36
|
-
bodies
|
37
|
-
))
|
38
|
-
end
|
39
|
-
@combinations
|
40
|
-
end
|
41
|
-
|
42
|
-
def combinations_with_enum
|
43
|
-
return @combinations_with_enum if @combinations_with_enum
|
44
|
-
|
45
|
-
@combinations_with_enum = []
|
46
|
-
qwe = Fitting::Cover::JSONSchema.new(@json_schema).combi +
|
47
|
-
Fitting::Cover::JSONSchemaEnum.new(@json_schema).combi
|
48
|
-
qwe.map do |comb|
|
49
|
-
@combinations_with_enum.push(Fitting::Records::Unit::Combination.new(
|
50
|
-
comb,
|
51
|
-
bodies
|
52
|
-
))
|
53
|
-
end
|
54
|
-
@combinations_with_enum
|
55
|
-
end
|
56
|
-
|
57
|
-
def combinations_with_one_of
|
58
|
-
return @combinations_with_one_of if @combinations_with_one_of
|
59
|
-
|
60
|
-
@combinations_with_one_of = []
|
61
|
-
qwe = Fitting::Cover::JSONSchema.new(@json_schema).combi +
|
62
|
-
Fitting::Cover::JSONSchemaEnum.new(@json_schema).combi +
|
63
|
-
Fitting::Cover::JSONSchemaOneOf.new(@json_schema).combi
|
64
|
-
qwe.map do |comb|
|
65
|
-
@combinations_with_one_of.push(Fitting::Records::Unit::Combination.new(
|
66
|
-
comb,
|
67
|
-
bodies
|
68
|
-
))
|
69
|
-
end
|
70
|
-
@combinations_with_one_of
|
71
|
-
end
|
72
|
-
|
73
|
-
def cover
|
74
|
-
@cover ||= if bodies == []
|
75
|
-
0
|
76
|
-
else
|
77
|
-
count = 0
|
78
|
-
combinations.map do |combination|
|
79
|
-
count += 1 unless combination.valid_bodies == []
|
80
|
-
end
|
81
|
-
(count + 1) * 100 / (combinations.size + 1)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def cover_enum
|
86
|
-
@cover_enum ||= if bodies == []
|
87
|
-
0
|
88
|
-
else
|
89
|
-
count = 0
|
90
|
-
combinations_with_enum.map do |combination|
|
91
|
-
count += 1 unless combination.valid_bodies == []
|
92
|
-
end
|
93
|
-
(count + 1) * 100 / (combinations_with_enum.size + 1)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def cover_one_of
|
98
|
-
@cover_one_of ||= if bodies == []
|
99
|
-
0
|
100
|
-
else
|
101
|
-
count = 0
|
102
|
-
combinations_with_one_of.map do |combination|
|
103
|
-
count += 1 unless combination.valid_bodies == []
|
104
|
-
end
|
105
|
-
(count + 1) * 100 / (combinations_with_one_of.size + 1)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'fitting/records/unit/response'
|
2
|
-
|
3
|
-
module Fitting
|
4
|
-
class Records
|
5
|
-
class Unit
|
6
|
-
class Request
|
7
|
-
def initialize(documented_request, tested_requests)
|
8
|
-
@documented_request = documented_request
|
9
|
-
@tested_requests = tested_requests
|
10
|
-
end
|
11
|
-
|
12
|
-
def path
|
13
|
-
@path ||= @documented_request.path
|
14
|
-
end
|
15
|
-
|
16
|
-
def method
|
17
|
-
@method ||= @documented_request.method
|
18
|
-
end
|
19
|
-
|
20
|
-
def responses
|
21
|
-
@responses ||= @documented_request.responses.to_a.inject([]) do |res, documented_response|
|
22
|
-
res.push(Fitting::Records::Unit::Response.new(documented_response, tested_responses))
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def tested_responses
|
27
|
-
@tested_responses ||= @tested_requests.to_a.inject([]) do |res, tested_request|
|
28
|
-
next res unless @documented_request.method == tested_request.method &&
|
29
|
-
@documented_request.path.match(tested_request.path.to_s)
|
30
|
-
|
31
|
-
res.push(tested_request.response)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'fitting/records/unit/json_schema'
|
2
|
-
|
3
|
-
module Fitting
|
4
|
-
class Records
|
5
|
-
class Unit
|
6
|
-
class Response
|
7
|
-
def initialize(documented_response, tested_responses)
|
8
|
-
@documented_response = documented_response
|
9
|
-
@tested_responses = tested_responses
|
10
|
-
end
|
11
|
-
|
12
|
-
def status
|
13
|
-
@status ||= @documented_response['status']
|
14
|
-
end
|
15
|
-
|
16
|
-
def json_schemas
|
17
|
-
@json_schemas ||= @documented_response['json_schemas'].inject([]) do |res, documented_json_schema|
|
18
|
-
res.push(Fitting::Records::Unit::JsonSchema.new(documented_json_schema, tested_bodies))
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def tested_bodies
|
23
|
-
@tested_bodies ||= @tested_responses.inject([]) do |res, tested_response|
|
24
|
-
next res unless status == tested_response.status.to_s
|
25
|
-
|
26
|
-
res.push(tested_response.body)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
data/lib/fitting/request.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'json-schema'
|
2
|
-
|
3
|
-
module Fitting
|
4
|
-
class Request
|
5
|
-
def initialize(env_request, tomogram)
|
6
|
-
@method = env_request.request_method
|
7
|
-
@path = env_request.env['PATH_INFO'] || env_request.fullpath
|
8
|
-
@body = env_request.env['action_dispatch.request.request_parameters']
|
9
|
-
@schema = tomogram.find_request(method: @method, path: @path)
|
10
|
-
end
|
11
|
-
|
12
|
-
def route
|
13
|
-
"#{@schema.method}\t#{@schema.path}"
|
14
|
-
end
|
15
|
-
|
16
|
-
def real_method_with_path
|
17
|
-
"#{@method}\t#{@path}"
|
18
|
-
end
|
19
|
-
|
20
|
-
def schemas_of_possible_responses(status:)
|
21
|
-
return nil unless @schema
|
22
|
-
|
23
|
-
@schema.find_responses(status: status).map do |response|
|
24
|
-
response['body']
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def within_prefix?(prefix)
|
29
|
-
@path.start_with?(prefix)
|
30
|
-
end
|
31
|
-
|
32
|
-
def ignored?(ignore_list)
|
33
|
-
ignore_list.any? do |regexp|
|
34
|
-
regexp.match(@path)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'json-schema'
|
2
|
-
|
3
|
-
module Fitting
|
4
|
-
class Response
|
5
|
-
class FullyValidates < Array
|
6
|
-
def self.craft(schemas, body, strict)
|
7
|
-
if schemas
|
8
|
-
new(schemas.inject([]) do |res, schema|
|
9
|
-
res.push(fully_validate(schema, body, strict))
|
10
|
-
end)
|
11
|
-
else
|
12
|
-
@valid = false
|
13
|
-
new
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def valid?
|
18
|
-
@valid ||= any? { |fully_validate| fully_validate == [] }
|
19
|
-
end
|
20
|
-
|
21
|
-
def to_s
|
22
|
-
@to_s ||= join("\n\n")
|
23
|
-
end
|
24
|
-
|
25
|
-
class << self
|
26
|
-
def fully_validate(schema, body, strict)
|
27
|
-
JSON::Validator.fully_validate(schema, body, strict: strict)
|
28
|
-
rescue JSON::Schema::UriError
|
29
|
-
[]
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
data/lib/fitting/response.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'fitting/request'
|
2
|
-
require 'fitting/response/fully_validates'
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
module Fitting
|
6
|
-
class Response
|
7
|
-
attr_reader :body
|
8
|
-
|
9
|
-
def initialize(env_response, tomogram)
|
10
|
-
@request = Fitting::Request.new(env_response.request, tomogram)
|
11
|
-
@status = env_response.status
|
12
|
-
@body = env_response.body
|
13
|
-
@schemas = @request.schemas_of_possible_responses(status: @status)
|
14
|
-
end
|
15
|
-
|
16
|
-
def within_prefix?(prefix)
|
17
|
-
@request.within_prefix?(prefix)
|
18
|
-
end
|
19
|
-
|
20
|
-
def fully_validates
|
21
|
-
@fully_validates ||= Fitting::Response::FullyValidates.craft(@schemas, @body, false)
|
22
|
-
end
|
23
|
-
|
24
|
-
def strict_fully_validates
|
25
|
-
@strict_fully_validates ||= Fitting::Response::FullyValidates.craft(@schemas, @body, true)
|
26
|
-
end
|
27
|
-
|
28
|
-
def documented?
|
29
|
-
@schemas&.present?
|
30
|
-
end
|
31
|
-
|
32
|
-
def route
|
33
|
-
index.map do |i|
|
34
|
-
"#{@request.route} #{@status} #{i}"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def strict_route
|
39
|
-
strict_index.map do |i|
|
40
|
-
"#{@request.route} #{@status} #{i}"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def real_request_with_status
|
45
|
-
"#{@request.real_method_with_path} #{@status}"
|
46
|
-
end
|
47
|
-
|
48
|
-
def got
|
49
|
-
JSON.pretty_generate(JSON.parse(@body))
|
50
|
-
end
|
51
|
-
|
52
|
-
def expected
|
53
|
-
@expected ||= @schemas.inject([]) do |res, schema|
|
54
|
-
res.push(JSON.pretty_generate(schema).to_s)
|
55
|
-
end.join("\n\n")
|
56
|
-
end
|
57
|
-
|
58
|
-
def json_schema
|
59
|
-
@schemas[index.first]
|
60
|
-
end
|
61
|
-
|
62
|
-
def ignored?(ignore_list)
|
63
|
-
@request.ignored?(ignore_list)
|
64
|
-
end
|
65
|
-
|
66
|
-
private
|
67
|
-
|
68
|
-
def index
|
69
|
-
return @index_res if @index_res
|
70
|
-
|
71
|
-
@index_res = []
|
72
|
-
@schemas.size.times do |i|
|
73
|
-
@index_res.push(i) if fully_validates[i] == []
|
74
|
-
end
|
75
|
-
@index_res
|
76
|
-
end
|
77
|
-
|
78
|
-
def strict_index
|
79
|
-
return @strict_index_res if @strict_index_res
|
80
|
-
|
81
|
-
@strict_index_res = []
|
82
|
-
@schemas.size.times do |i|
|
83
|
-
@strict_index_res.push(i) if strict_fully_validates[i] == []
|
84
|
-
end
|
85
|
-
@strict_index_res
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'fitting/statistics/lists'
|
2
|
-
require 'fitting/statistics/requests_stats'
|
3
|
-
require 'fitting/statistics/responses_stats'
|
4
|
-
require 'fitting/statistics/great'
|
5
|
-
require 'fitting/statistics/not_covered_responses'
|
6
|
-
|
7
|
-
module Fitting
|
8
|
-
class Statistics
|
9
|
-
class Analysis
|
10
|
-
def initialize(measurement, depth)
|
11
|
-
@measurement = measurement
|
12
|
-
@depth = depth
|
13
|
-
end
|
14
|
-
|
15
|
-
def to_s
|
16
|
-
[
|
17
|
-
Fitting::Statistics::Lists.new(@measurement, @depth).to_s,
|
18
|
-
Fitting::Statistics::RequestsStats.new(@measurement).to_s,
|
19
|
-
Fitting::Statistics::ResponsesStats.new(@measurement).to_s,
|
20
|
-
Fitting::Statistics::Great.new(@measurement).to_s
|
21
|
-
].compact.join("\n\n")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module Fitting
|
2
|
-
class Statistics
|
3
|
-
class CoverError
|
4
|
-
def initialize(request_unit)
|
5
|
-
@request_unit = request_unit
|
6
|
-
end
|
7
|
-
|
8
|
-
def to_s
|
9
|
-
res = ''
|
10
|
-
@request_unit.map do |request|
|
11
|
-
request.responses.map do |response|
|
12
|
-
next unless response.tested_bodies != []
|
13
|
-
|
14
|
-
response.json_schemas.map do |json_schema|
|
15
|
-
json_schema.combinations.map do |combination|
|
16
|
-
next unless combination.valid_bodies == []
|
17
|
-
|
18
|
-
res += "request method: #{request.method}\nrequest path: #{request.path}\n"\
|
19
|
-
"response status: #{response.status}\nsource json-schema: #{json_schema.json_schema}\n"\
|
20
|
-
"combination: #{combination.description}\nnew json-schema: #{combination.json_schema}\n\n"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
res
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
module Fitting
|
2
|
-
class Statistics
|
3
|
-
class CoverErrorEnum
|
4
|
-
def initialize(request_unit)
|
5
|
-
@request_unit = request_unit
|
6
|
-
end
|
7
|
-
|
8
|
-
def to_s
|
9
|
-
res = ''
|
10
|
-
@request_unit.map do |request|
|
11
|
-
request.responses.map do |response|
|
12
|
-
next unless response.tested_bodies != []
|
13
|
-
|
14
|
-
response.json_schemas.map do |json_schema|
|
15
|
-
json_schema.combinations_with_enum.map do |combination|
|
16
|
-
next unless combination.valid_bodies == []
|
17
|
-
|
18
|
-
res += "request method: #{request.method}\nrequest path: #{request.path}\n"\
|
19
|
-
"response status: #{response.status}\nsource json-schema: #{json_schema.json_schema}\n"\
|
20
|
-
"combination: #{combination.description}\nnew json-schema: #{combination.json_schema}\n\n"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
res
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|