fitting 2.15.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/.github/workflows/ruby.yml +3 -3
- data/.rubocop.yml +31 -3
- data/CHANGELOG.md +21 -0
- data/README.md +96 -281
- data/fitting.gemspec +10 -10
- data/images/example.png +0 -0
- data/images/example2.png +0 -0
- data/images/logo.png +0 -0
- 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 +8 -10
- data/lib/fitting/report/combination.rb +1 -15
- data/lib/fitting/report/combinations.rb +5 -6
- data/lib/fitting/report/console.rb +5 -4
- data/lib/fitting/report/prefix.rb +46 -20
- data/lib/fitting/report/prefixes.rb +17 -5
- data/lib/fitting/report/response.rb +19 -20
- 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
- data/lib/templates/bomboniere/package-lock.json +91 -70
- data/lib/templates/bomboniere/package.json +2 -1
- data/lib/templates/bomboniere/src/components/HelloWorld.vue +3 -0
- metadata +34 -56
@@ -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
|
@@ -3,11 +3,7 @@ require 'fitting/report/action'
|
|
3
3
|
module Fitting
|
4
4
|
module Report
|
5
5
|
class Actions
|
6
|
-
def initialize(
|
7
|
-
actions = Tomograph::Tomogram.new(
|
8
|
-
prefix: prefix,
|
9
|
-
tomogram_json_path: tomogram_json_path
|
10
|
-
)
|
6
|
+
def initialize(actions)
|
11
7
|
@actions = []
|
12
8
|
actions.to_a.map do |action|
|
13
9
|
@actions.push(Fitting::Report::Action.new(action))
|
@@ -20,14 +16,14 @@ module Fitting
|
|
20
16
|
|
21
17
|
def join(tests)
|
22
18
|
tests.to_a.map do |test|
|
23
|
-
if
|
19
|
+
if there_a_suitable_action?(test)
|
24
20
|
cram_into_the_appropriate_action(test)
|
25
21
|
test.mark_action
|
26
22
|
end
|
27
23
|
end
|
28
24
|
end
|
29
25
|
|
30
|
-
def
|
26
|
+
def there_a_suitable_action?(test)
|
31
27
|
@actions.map do |action|
|
32
28
|
return true if test.method == action.method && action.path_match(test.path)
|
33
29
|
end
|
@@ -39,15 +35,17 @@ module Fitting
|
|
39
35
|
@actions.map do |action|
|
40
36
|
if test.method == action.method && action.path_match(test.path)
|
41
37
|
action.add_test(test)
|
42
|
-
|
38
|
+
break
|
43
39
|
end
|
44
40
|
end
|
45
41
|
end
|
46
42
|
|
47
43
|
def details(prefix)
|
48
44
|
{
|
49
|
-
|
50
|
-
|
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
|
51
49
|
}
|
52
50
|
end
|
53
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
|
@@ -15,7 +15,7 @@ module Fitting
|
|
15
15
|
@tests_without_actions += prefix_details[:actions][:tests_without_actions]
|
16
16
|
res += prefix_details[:actions][:actions_details].inject('') do |res_actions, action|
|
17
17
|
res_actions += "#{action[:method]}\t#{action[:path]}"
|
18
|
-
tab = "\t" * (
|
18
|
+
tab = "\t" * (8 - action[:path].size / 8)
|
19
19
|
@tests_without_responses += action[:responses][:tests_without_responses]
|
20
20
|
res_actions += tab + action[:responses][:responses_details].inject('') do |res_responses, response|
|
21
21
|
@good = false if response[:combinations][:cover_percent] != '100%'
|
@@ -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
|
@@ -3,44 +3,70 @@ require 'fitting/report/actions'
|
|
3
3
|
module Fitting
|
4
4
|
module Report
|
5
5
|
class Prefix
|
6
|
-
def initialize(name,
|
6
|
+
def initialize(name: '', openapi2_json_path: nil, openapi3_yaml_path: nil,
|
7
|
+
drafter_yaml_path: nil, tomogram_json_path: nil, crafter_yaml_path: nil, skip: false)
|
7
8
|
@name = name
|
8
9
|
@tomogram_json_path = tomogram_json_path
|
9
10
|
@tests = Fitting::Report::Tests.new([])
|
10
11
|
@skip = skip
|
11
|
-
|
12
|
-
@actions = Fitting::Report::Actions.new(name, tomogram_json_path)
|
13
|
-
end
|
14
|
-
end
|
12
|
+
return if skip
|
15
13
|
|
16
|
-
|
17
|
-
|
14
|
+
@actions = if openapi2_json_path
|
15
|
+
Fitting::Report::Actions.new(
|
16
|
+
Tomograph::Tomogram.new(
|
17
|
+
prefix: name,
|
18
|
+
openapi2_json_path: openapi2_json_path
|
19
|
+
)
|
20
|
+
)
|
21
|
+
elsif openapi3_yaml_path
|
22
|
+
Fitting::Report::Actions.new(
|
23
|
+
Tomograph::Tomogram.new(
|
24
|
+
prefix: name,
|
25
|
+
openapi3_yaml_path: openapi3_yaml_path
|
26
|
+
)
|
27
|
+
)
|
28
|
+
elsif drafter_yaml_path
|
29
|
+
Fitting::Report::Actions.new(
|
30
|
+
Tomograph::Tomogram.new(
|
31
|
+
prefix: name,
|
32
|
+
drafter_yaml_path: drafter_yaml_path
|
33
|
+
)
|
34
|
+
)
|
35
|
+
elsif crafter_yaml_path
|
36
|
+
Fitting::Report::Actions.new(
|
37
|
+
Tomograph::Tomogram.new(
|
38
|
+
prefix: name,
|
39
|
+
crafter_yaml_path: crafter_yaml_path
|
40
|
+
)
|
41
|
+
)
|
42
|
+
else
|
43
|
+
Fitting::Report::Actions.new(
|
44
|
+
Tomograph::Tomogram.new(
|
45
|
+
prefix: name,
|
46
|
+
tomogram_json_path: tomogram_json_path
|
47
|
+
)
|
48
|
+
)
|
49
|
+
end
|
18
50
|
end
|
19
51
|
|
20
|
-
|
21
|
-
@tests
|
22
|
-
end
|
52
|
+
attr_reader :name, :tests, :actions
|
23
53
|
|
24
54
|
def skip?
|
25
55
|
@skip
|
26
56
|
end
|
27
57
|
|
28
|
-
def actions
|
29
|
-
@actions
|
30
|
-
end
|
31
|
-
|
32
58
|
def details
|
33
59
|
if @skip
|
34
60
|
{
|
35
|
-
|
36
|
-
|
37
|
-
|
61
|
+
name: @name,
|
62
|
+
tests_size: @tests.size,
|
63
|
+
actions: { tests_without_actions: [], actions_details: [] }
|
38
64
|
}
|
39
65
|
else
|
40
66
|
{
|
41
|
-
|
42
|
-
|
43
|
-
|
67
|
+
name: @name,
|
68
|
+
tests_size: @tests.size,
|
69
|
+
actions: @actions.details(self)
|
44
70
|
}
|
45
71
|
end
|
46
72
|
end
|
@@ -6,12 +6,24 @@ module Fitting
|
|
6
6
|
def initialize(config_path)
|
7
7
|
@prefixes = []
|
8
8
|
YAML.safe_load(File.read(config_path))['prefixes'].map do |prefix|
|
9
|
-
@prefixes.push(
|
9
|
+
@prefixes.push(
|
10
|
+
Fitting::Report::Prefix.new(
|
11
|
+
name: prefix['name'],
|
12
|
+
openapi2_json_path: prefix['openapi2_json_path'],
|
13
|
+
openapi3_yaml_path: prefix['openapi3_yaml_path'],
|
14
|
+
drafter_yaml_path: prefix['drafter_yaml_path'],
|
15
|
+
tomogram_json_path: prefix['tomogram_json_path'],
|
16
|
+
crafter_yaml_path: prefix['crafter_yaml_path'],
|
17
|
+
skip: prefix['skip']
|
18
|
+
)
|
19
|
+
)
|
10
20
|
end
|
11
21
|
end
|
12
22
|
|
13
|
-
def
|
23
|
+
def there_a_suitable_prefix?(test_path)
|
14
24
|
@prefixes.map do |prefix|
|
25
|
+
return true if prefix.name.nil?
|
26
|
+
return true if prefix.name == ''
|
15
27
|
return true if test_path[0..prefix.name.size - 1] == prefix.name
|
16
28
|
end
|
17
29
|
|
@@ -20,16 +32,16 @@ module Fitting
|
|
20
32
|
|
21
33
|
def cram_into_the_appropriate_prefix(test)
|
22
34
|
@prefixes.map do |prefix|
|
23
|
-
if test.path[0..prefix.name.size - 1] == prefix.name
|
35
|
+
if prefix.name.nil? || prefix.name == '' || test.path[0..prefix.name.size - 1] == prefix.name
|
24
36
|
prefix.add_test(test)
|
25
|
-
|
37
|
+
break
|
26
38
|
end
|
27
39
|
end
|
28
40
|
end
|
29
41
|
|
30
42
|
def join(tests)
|
31
43
|
tests.to_a.map do |test|
|
32
|
-
if
|
44
|
+
if there_a_suitable_prefix?(test.path)
|
33
45
|
cram_into_the_appropriate_prefix(test)
|
34
46
|
test.mark_prefix
|
35
47
|
end
|