fitting 2.17.0 → 2.18.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 +4 -4
- data/.rubocop.yml +31 -3
- data/CHANGELOG.md +5 -0
- data/fitting.gemspec +7 -7
- data/lib/fitting/configuration/legacy.rb +6 -5
- data/lib/fitting/configuration/yaml.rb +2 -2
- data/lib/fitting/cover/json_schema.rb +3 -2
- data/lib/fitting/cover/json_schema_enum.rb +1 -1
- data/lib/fitting/cover/json_schema_one_of.rb +1 -1
- data/lib/fitting/cover/response.rb +1 -5
- data/lib/fitting/documentation.rb +0 -2
- data/lib/fitting/matchers/response_matcher.rb +2 -1
- data/lib/fitting/records/documented/request.rb +1 -0
- data/lib/fitting/records/realized_unit.rb +13 -15
- data/lib/fitting/records/spherical/request.rb +1 -1
- data/lib/fitting/records/spherical/requests.rb +2 -1
- data/lib/fitting/records/spherical/response.rb +2 -2
- data/lib/fitting/records/test_unit/request.rb +4 -0
- data/lib/fitting/records/tested/request.rb +1 -1
- data/lib/fitting/records/unit/combination.rb +5 -6
- data/lib/fitting/records/unit/json_schema.rb +38 -33
- data/lib/fitting/records/unit/request.rb +1 -0
- data/lib/fitting/records/unit/response.rb +1 -0
- data/lib/fitting/report/action.rb +6 -9
- data/lib/fitting/report/actions.rb +7 -5
- data/lib/fitting/report/combination.rb +1 -15
- data/lib/fitting/report/combinations.rb +5 -6
- data/lib/fitting/report/console.rb +4 -3
- data/lib/fitting/report/prefix.rb +42 -51
- data/lib/fitting/report/prefixes.rb +3 -3
- data/lib/fitting/report/response.rb +17 -18
- data/lib/fitting/report/responses.rb +9 -8
- data/lib/fitting/report/test.rb +9 -11
- data/lib/fitting/report/tests.rb +10 -13
- data/lib/fitting/request.rb +0 -1
- data/lib/fitting/response.rb +4 -3
- data/lib/fitting/statistics/cover_error.rb +2 -0
- data/lib/fitting/statistics/cover_error_enum.rb +2 -0
- data/lib/fitting/statistics/cover_error_one_of.rb +2 -0
- data/lib/fitting/statistics/list.rb +5 -4
- data/lib/fitting/statistics/not_covered_responses.rb +1 -1
- data/lib/fitting/statistics/percent.rb +2 -1
- data/lib/fitting/statistics/template.rb +10 -8
- data/lib/fitting/storage/white_list.rb +7 -0
- data/lib/fitting/templates/realized_template.rb +2 -0
- data/lib/fitting/tests.rb +1 -1
- data/lib/fitting/version.rb +1 -1
- data/lib/fitting.rb +5 -2
- data/lib/tasks/fitting.rake +62 -54
- metadata +17 -49
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86988a5ed3f114df581b0d6c6550867e2f9864f05808b6ec66a063f2ad573c93
|
4
|
+
data.tar.gz: 0b1c58784f5838caea3942d022f9dfaa4196912a7f30119e0b3e1b71080f9e43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8f5d03f52a1332fc7483f17c8bbfde3c3a751a1c8f539f65637137e8b6ef95d251574105b5cecd9f4292f47f3a951ad45d9a9c914cfbee450b2d1eee8f1e25e
|
7
|
+
data.tar.gz: d40fe0ae76fa5a381e19c1444d84ae90262571cbf2ab9d3198d299b71333f042ccd1a637f150c28403b2a4ccb96b7abf230d9638ffb4ef645700244c4d8194db
|
data/.rubocop.yml
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
AllCops:
|
2
|
-
TargetRubyVersion: 2.
|
2
|
+
TargetRubyVersion: 2.6
|
3
3
|
|
4
|
-
|
5
|
-
Max:
|
4
|
+
Layout/LineLength:
|
5
|
+
Max: 130
|
6
6
|
|
7
7
|
Style/Documentation:
|
8
8
|
Enabled: false
|
@@ -18,3 +18,31 @@ Style/CaseEquality:
|
|
18
18
|
|
19
19
|
Style/NilComparison:
|
20
20
|
Enabled: false
|
21
|
+
|
22
|
+
Naming/MemoizedInstanceVariableName:
|
23
|
+
Enabled: false
|
24
|
+
|
25
|
+
Lint/UnreachableCode:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
Metrics/MethodLength:
|
29
|
+
Max: 50
|
30
|
+
|
31
|
+
# FIXME
|
32
|
+
Metrics/AbcSize:
|
33
|
+
Max: 50
|
34
|
+
|
35
|
+
Metrics/PerceivedComplexity:
|
36
|
+
Max: 20
|
37
|
+
|
38
|
+
Metrics/CyclomaticComplexity:
|
39
|
+
Max: 20
|
40
|
+
|
41
|
+
Metrics/ParameterLists:
|
42
|
+
Max: 7
|
43
|
+
|
44
|
+
Metrics/ClassLength:
|
45
|
+
Max: 150
|
46
|
+
|
47
|
+
Lint/UselessAssignment:
|
48
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
data/fitting.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
lib = File.expand_path('
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
require 'fitting/version'
|
4
4
|
|
@@ -18,13 +18,13 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
+
spec.required_ruby_version = '>= 2.6.0'
|
21
22
|
spec.add_runtime_dependency 'json-schema', '~> 2.6', '>= 2.6.2'
|
22
|
-
spec.add_runtime_dependency 'multi_json', '~> 1.11'
|
23
23
|
spec.add_runtime_dependency 'tomograph', '~> 3.1', '>= 3.1.0'
|
24
24
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
25
|
-
spec.add_development_dependency 'byebug', '~>
|
26
|
-
spec.add_development_dependency 'rake', '~>
|
27
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
28
|
-
spec.add_development_dependency 'rubocop', '~>
|
29
|
-
spec.add_development_dependency 'simplecov', '~> 0.
|
25
|
+
spec.add_development_dependency 'byebug', '~> 11.1', '>= 11.1.3'
|
26
|
+
spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
|
27
|
+
spec.add_development_dependency 'rspec', '~> 3.10'
|
28
|
+
spec.add_development_dependency 'rubocop', '~> 1.22.0'
|
29
|
+
spec.add_development_dependency 'simplecov', '~> 0.21'
|
30
30
|
end
|
@@ -36,11 +36,12 @@ module Fitting
|
|
36
36
|
drafter_4_apib_path: @drafter_4_apib_path,
|
37
37
|
drafter_4_yaml_path: @drafter_4_yaml_path
|
38
38
|
)
|
39
|
-
else
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
else
|
40
|
+
Tomograph::Tomogram.new(
|
41
|
+
prefix: @prefix,
|
42
|
+
apib_path: @apib_path,
|
43
|
+
drafter_yaml_path: @drafter_yaml_path
|
44
|
+
)
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
@@ -43,13 +43,13 @@ module Fitting
|
|
43
43
|
Tomograph::Tomogram.new(
|
44
44
|
prefix: @prefix,
|
45
45
|
crafter_apib_path: @crafter_apib_path,
|
46
|
-
crafter_yaml_path: @crafter_yaml_path
|
46
|
+
crafter_yaml_path: @crafter_yaml_path
|
47
47
|
)
|
48
48
|
elsif @drafter_4_apib_path || @drafter_4_yaml_path
|
49
49
|
Tomograph::Tomogram.new(
|
50
50
|
prefix: @prefix,
|
51
51
|
drafter_4_apib_path: @drafter_4_apib_path,
|
52
|
-
drafter_4_yaml_path: @drafter_4_yaml_path
|
52
|
+
drafter_4_yaml_path: @drafter_4_yaml_path
|
53
53
|
)
|
54
54
|
else
|
55
55
|
Tomograph::Tomogram.new(
|
@@ -15,17 +15,18 @@ module Fitting
|
|
15
15
|
|
16
16
|
def inception(json_schema, combinations)
|
17
17
|
json_schema.each do |key, value|
|
18
|
-
if key == 'properties'
|
18
|
+
if (key == 'properties') && (json_schema['required'] != value.keys)
|
19
19
|
schema = json_schema.dup
|
20
20
|
one_of = schema.delete('required') || []
|
21
21
|
schema['properties'].each_key do |property|
|
22
22
|
next if one_of.include?(property)
|
23
|
+
|
23
24
|
combinations.push([schema.merge('required' => one_of + [property]), "required.#{property}"])
|
24
25
|
end
|
25
26
|
elsif value.is_a?(Hash)
|
26
27
|
com = inception(value, [])
|
27
28
|
com.each do |combination|
|
28
|
-
combination[0] = { key => value.merge(combination[0])}
|
29
|
+
combination[0] = { key => value.merge(combination[0]) }
|
29
30
|
combination[1] = "#{key}.#{combination[1]}"
|
30
31
|
end
|
31
32
|
combinations += com
|
@@ -24,7 +24,7 @@ module Fitting
|
|
24
24
|
elsif value.is_a?(Hash)
|
25
25
|
com = inception(value, [])
|
26
26
|
com.each do |combination|
|
27
|
-
combination[0] = { key => value.merge(combination[0])}
|
27
|
+
combination[0] = { key => value.merge(combination[0]) }
|
28
28
|
combination[1] = "#{key}.#{combination[1]}"
|
29
29
|
end
|
30
30
|
combinations += com
|
@@ -24,7 +24,7 @@ module Fitting
|
|
24
24
|
elsif value.is_a?(Hash)
|
25
25
|
com = inception(value, [])
|
26
26
|
com.each do |combination|
|
27
|
-
combination[0] = { key => value.merge(combination[0])}
|
27
|
+
combination[0] = { key => value.merge(combination[0]) }
|
28
28
|
combination[1] = "#{key}.#{combination[1]}"
|
29
29
|
end
|
30
30
|
combinations += com
|
@@ -9,27 +9,25 @@ module Fitting
|
|
9
9
|
end
|
10
10
|
|
11
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
|
+
|
12
17
|
test_file_paths.each do |_key, requests|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
all_good = requests.all?(&:response_documented?)
|
18
|
-
return false unless all_good
|
19
|
-
end
|
20
|
-
test_file_paths.each do |_key, requests|
|
21
|
-
all_good = requests.all?(&:response_json_schemas?)
|
22
|
-
return false unless all_good
|
23
|
-
end
|
24
|
-
test_file_paths.each do |_key, requests|
|
25
|
-
all_good = requests.all?(&:valid_json_schemas?)
|
26
|
-
return false unless all_good
|
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?)
|
27
22
|
end
|
28
|
-
|
23
|
+
|
24
|
+
all_good_documented && all_good_response_documented &&
|
25
|
+
all_good_response_json_schemas && all_good_valid_json_schemas
|
29
26
|
end
|
30
27
|
|
31
28
|
def test_file_paths
|
32
29
|
return @test_file_paths if @test_file_paths
|
30
|
+
|
33
31
|
@test_file_paths = {}
|
34
32
|
white_unit.map do |request|
|
35
33
|
@test_file_paths[request.test_file_path] ||= []
|
@@ -10,11 +10,12 @@ module Fitting
|
|
10
10
|
|
11
11
|
array = []
|
12
12
|
Dir['fitting_tests/*.json'].each do |file|
|
13
|
-
array += JSON.
|
13
|
+
array += JSON.parse(File.read(file))
|
14
14
|
end
|
15
15
|
@to_a = array.inject([]) do |res, tested_request|
|
16
16
|
request = Fitting::Records::Spherical::Request.load(tested_request)
|
17
17
|
next res unless request.path.to_s.start_with?(Fitting.configuration.prefix)
|
18
|
+
|
18
19
|
res.push(request)
|
19
20
|
end
|
20
21
|
end
|
@@ -14,7 +14,7 @@ module Fitting
|
|
14
14
|
def to_hash
|
15
15
|
{
|
16
16
|
status: status,
|
17
|
-
body: JSON.
|
17
|
+
body: JSON.parse(body)
|
18
18
|
}
|
19
19
|
rescue JSON::ParserError
|
20
20
|
{
|
@@ -23,7 +23,7 @@ module Fitting
|
|
23
23
|
}
|
24
24
|
end
|
25
25
|
|
26
|
-
def to_json
|
26
|
+
def to_json(*_args)
|
27
27
|
JSON.dump(to_hash)
|
28
28
|
end
|
29
29
|
|
@@ -37,6 +37,7 @@ module Fitting
|
|
37
37
|
@documented_requests ||= @all_documented_requests.inject([]) do |res, documented_request|
|
38
38
|
next res unless @tested_request.method == documented_request.method &&
|
39
39
|
documented_request.path.match(@tested_request.path.to_s)
|
40
|
+
|
40
41
|
res.push(documented_request)
|
41
42
|
end
|
42
43
|
end
|
@@ -49,6 +50,7 @@ module Fitting
|
|
49
50
|
@documented_responses ||= documented_requests.inject([]) do |res, documented_request|
|
50
51
|
documented_request.responses.map do |documented_response|
|
51
52
|
next unless documented_response['status'] == response.status.to_s
|
53
|
+
|
52
54
|
res.push(documented_response)
|
53
55
|
end
|
54
56
|
end.flatten.compact
|
@@ -71,6 +73,7 @@ module Fitting
|
|
71
73
|
def valid_json_schemas
|
72
74
|
@valid_json_schemas ||= response_json_schemas.inject([]) do |res, json_schema|
|
73
75
|
next res unless JSON::Validator.validate(json_schema, response.body)
|
76
|
+
|
74
77
|
res.push(json_schema)
|
75
78
|
end.flatten
|
76
79
|
end
|
@@ -78,6 +81,7 @@ module Fitting
|
|
78
81
|
def invalid_json_schemas
|
79
82
|
@invalid_json_schemas ||= response_json_schemas.inject([]) do |res, json_schema|
|
80
83
|
next res if JSON::Validator.validate(json_schema, response.body)
|
84
|
+
|
81
85
|
res.push(
|
82
86
|
json_schema: json_schema,
|
83
87
|
fully_validate: JSON::Validator.fully_validate(json_schema, response.body)
|
@@ -28,7 +28,7 @@ module Fitting
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_path
|
31
|
-
@test_path ||= @test_title[
|
31
|
+
@test_path ||= @test_title[/\\(\\.(.*?)\\)/m, 1] || @test_title[/\\.(.*?)\\"/m, 1]
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_file_path
|
@@ -14,12 +14,11 @@ module Fitting
|
|
14
14
|
|
15
15
|
def valid_bodies
|
16
16
|
@valid_bodies ||= @bodies.inject([]) do |res, tested_body|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
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)
|
23
22
|
end
|
24
23
|
end
|
25
24
|
end
|
@@ -17,50 +17,55 @@ module Fitting
|
|
17
17
|
|
18
18
|
def bodies
|
19
19
|
@bodies ||= @tested_bodies.inject([]) do |res, tested_body|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
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)
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
29
28
|
def combinations
|
30
29
|
return @combinations if @combinations
|
30
|
+
|
31
31
|
@combinations = []
|
32
32
|
cover_json_schema = Fitting::Cover::JSONSchema.new(@json_schema)
|
33
33
|
cover_json_schema.combi.map do |comb|
|
34
34
|
@combinations.push(Fitting::Records::Unit::Combination.new(
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
comb,
|
36
|
+
bodies
|
37
|
+
))
|
38
38
|
end
|
39
39
|
@combinations
|
40
40
|
end
|
41
41
|
|
42
42
|
def combinations_with_enum
|
43
43
|
return @combinations_with_enum if @combinations_with_enum
|
44
|
+
|
44
45
|
@combinations_with_enum = []
|
45
|
-
qwe = Fitting::Cover::JSONSchema.new(@json_schema).combi +
|
46
|
+
qwe = Fitting::Cover::JSONSchema.new(@json_schema).combi +
|
47
|
+
Fitting::Cover::JSONSchemaEnum.new(@json_schema).combi
|
46
48
|
qwe.map do |comb|
|
47
49
|
@combinations_with_enum.push(Fitting::Records::Unit::Combination.new(
|
48
|
-
|
49
|
-
|
50
|
-
|
50
|
+
comb,
|
51
|
+
bodies
|
52
|
+
))
|
51
53
|
end
|
52
54
|
@combinations_with_enum
|
53
55
|
end
|
54
56
|
|
55
57
|
def combinations_with_one_of
|
56
58
|
return @combinations_with_one_of if @combinations_with_one_of
|
59
|
+
|
57
60
|
@combinations_with_one_of = []
|
58
|
-
qwe = Fitting::Cover::JSONSchema.new(@json_schema).combi +
|
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
|
59
64
|
qwe.map do |comb|
|
60
65
|
@combinations_with_one_of.push(Fitting::Records::Unit::Combination.new(
|
61
|
-
|
62
|
-
|
63
|
-
|
66
|
+
comb,
|
67
|
+
bodies
|
68
|
+
))
|
64
69
|
end
|
65
70
|
@combinations_with_one_of
|
66
71
|
end
|
@@ -79,26 +84,26 @@ module Fitting
|
|
79
84
|
|
80
85
|
def cover_enum
|
81
86
|
@cover_enum ||= if bodies == []
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
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
|
90
95
|
end
|
91
96
|
|
92
97
|
def cover_one_of
|
93
98
|
@cover_one_of ||= if bodies == []
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
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
|
102
107
|
end
|
103
108
|
end
|
104
109
|
end
|
@@ -27,6 +27,7 @@ module Fitting
|
|
27
27
|
@tested_responses ||= @tested_requests.to_a.inject([]) do |res, tested_request|
|
28
28
|
next res unless @documented_request.method == tested_request.method &&
|
29
29
|
@documented_request.path.match(tested_request.path.to_s)
|
30
|
+
|
30
31
|
res.push(tested_request.response)
|
31
32
|
end
|
32
33
|
end
|
@@ -17,9 +17,7 @@ module Fitting
|
|
17
17
|
@action.path.to_s
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
@responses
|
22
|
-
end
|
20
|
+
attr_reader :responses, :tests
|
23
21
|
|
24
22
|
def add_test(test)
|
25
23
|
@tests.push(test)
|
@@ -38,14 +36,13 @@ module Fitting
|
|
38
36
|
@regexp = Regexp.new(str)
|
39
37
|
end
|
40
38
|
|
41
|
-
def tests
|
42
|
-
@tests
|
43
|
-
end
|
44
|
-
|
45
39
|
def details
|
46
40
|
{
|
47
|
-
|
48
|
-
|
41
|
+
tests_without_responses: @tests.without_responses,
|
42
|
+
responses_details: @responses.to_a.map do |r|
|
43
|
+
{ method: r.status, tests_size: r.tests.size, json_schema: r.id,
|
44
|
+
combinations: r.details }
|
45
|
+
end
|
49
46
|
}
|
50
47
|
end
|
51
48
|
end
|
@@ -16,14 +16,14 @@ module Fitting
|
|
16
16
|
|
17
17
|
def join(tests)
|
18
18
|
tests.to_a.map do |test|
|
19
|
-
if
|
19
|
+
if there_a_suitable_action?(test)
|
20
20
|
cram_into_the_appropriate_action(test)
|
21
21
|
test.mark_action
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
26
|
+
def there_a_suitable_action?(test)
|
27
27
|
@actions.map do |action|
|
28
28
|
return true if test.method == action.method && action.path_match(test.path)
|
29
29
|
end
|
@@ -35,15 +35,17 @@ module Fitting
|
|
35
35
|
@actions.map do |action|
|
36
36
|
if test.method == action.method && action.path_match(test.path)
|
37
37
|
action.add_test(test)
|
38
|
-
|
38
|
+
break
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
def details(prefix)
|
44
44
|
{
|
45
|
-
|
46
|
-
|
45
|
+
tests_without_actions: prefix.tests.without_actions,
|
46
|
+
actions_details: @actions.map do |a|
|
47
|
+
{ method: a.method, path: a.path, tests_size: a.tests.size, responses: a.details }
|
48
|
+
end
|
47
49
|
}
|
48
50
|
end
|
49
51
|
end
|
@@ -9,26 +9,12 @@ module Fitting
|
|
9
9
|
@id = SecureRandom.hex
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
@json_schema
|
14
|
-
end
|
15
|
-
|
16
|
-
def id
|
17
|
-
@id
|
18
|
-
end
|
19
|
-
|
20
|
-
def type
|
21
|
-
@type
|
22
|
-
end
|
12
|
+
attr_reader :json_schema, :id, :type, :tests
|
23
13
|
|
24
14
|
def name
|
25
15
|
@combination
|
26
16
|
end
|
27
17
|
|
28
|
-
def tests
|
29
|
-
@tests
|
30
|
-
end
|
31
|
-
|
32
18
|
def add_test(test)
|
33
19
|
@tests.push(test)
|
34
20
|
end
|
@@ -14,20 +14,21 @@ module Fitting
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def size_with_tests
|
17
|
-
@combinations.count { |c| c.tests.
|
17
|
+
@combinations.count { |c| !c.tests.empty? }
|
18
18
|
end
|
19
19
|
|
20
20
|
def join(tests)
|
21
21
|
tests.to_a.map do |test|
|
22
|
-
if
|
22
|
+
if there_a_suitable_combination?(test)
|
23
23
|
cram_into_the_appropriate_combinations(test)
|
24
24
|
test.mark_combination
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
29
|
+
def there_a_suitable_combination?(test)
|
30
30
|
return false if @combinations.nil?
|
31
|
+
|
31
32
|
@combinations.map do |combination|
|
32
33
|
return true if JSON::Validator.fully_validate(combination.json_schema, test.body) == []
|
33
34
|
end
|
@@ -37,9 +38,7 @@ module Fitting
|
|
37
38
|
|
38
39
|
def cram_into_the_appropriate_combinations(test)
|
39
40
|
@combinations.map do |combination|
|
40
|
-
if JSON::Validator.fully_validate(combination.json_schema, test.body) == []
|
41
|
-
combination.add_test(test)
|
42
|
-
end
|
41
|
+
combination.add_test(test) if JSON::Validator.fully_validate(combination.json_schema, test.body) == []
|
43
42
|
end
|
44
43
|
end
|
45
44
|
end
|
@@ -31,9 +31,10 @@ module Fitting
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def good?
|
34
|
-
return false
|
35
|
-
return false
|
36
|
-
return false
|
34
|
+
return false unless @tests_without_prefixes.empty?
|
35
|
+
return false unless @tests_without_actions.empty?
|
36
|
+
return false unless @tests_without_responses.empty?
|
37
|
+
|
37
38
|
@good
|
38
39
|
end
|
39
40
|
end
|