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
data/lib/tasks/fitting.rake
CHANGED
@@ -22,29 +22,33 @@ namespace :fitting do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
prefixes.to_a.map do |prefix|
|
25
|
+
next if prefix.skip?
|
26
|
+
|
25
27
|
prefix.actions.to_a.map do |action|
|
26
28
|
action.responses.join(action.tests)
|
27
|
-
end
|
29
|
+
end
|
28
30
|
end
|
29
31
|
|
30
32
|
prefixes.to_a.map do |prefix|
|
33
|
+
next if prefix.skip?
|
34
|
+
|
31
35
|
prefix.actions.to_a.map do |action|
|
32
36
|
action.responses.to_a.map do |response|
|
33
37
|
response.combinations.join(response.tests)
|
34
38
|
end
|
35
|
-
end
|
39
|
+
end
|
36
40
|
end
|
37
41
|
|
38
42
|
report = JSON.pretty_generate(
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
+
{
|
44
|
+
tests_without_prefixes: tests.without_prefixes,
|
45
|
+
prefixes_details: prefixes.to_a.map(&:details)
|
46
|
+
}
|
43
47
|
)
|
44
48
|
|
45
49
|
destination = 'fitting'
|
46
50
|
FileUtils.mkdir_p(destination)
|
47
|
-
FileUtils.rm_r Dir.glob("#{destination}/*"), :
|
51
|
+
FileUtils.rm_r Dir.glob("#{destination}/*"), force: true
|
48
52
|
File.open('fitting/report.json', 'w') { |file| file.write(report) }
|
49
53
|
|
50
54
|
gem_path = $LOAD_PATH.find { |i| i.include?('fitting') }
|
@@ -54,6 +58,8 @@ namespace :fitting do
|
|
54
58
|
json_schemas = {}
|
55
59
|
combinations = {}
|
56
60
|
prefixes.to_a.map do |prefix|
|
61
|
+
next if prefix.skip?
|
62
|
+
|
57
63
|
prefix.actions.to_a.map do |action|
|
58
64
|
action.responses.to_a.map do |response|
|
59
65
|
json_schemas.merge!(response.id => response.body)
|
@@ -61,24 +67,24 @@ namespace :fitting do
|
|
61
67
|
combinations.merge!(combination.id => combination.json_schema)
|
62
68
|
end
|
63
69
|
end
|
64
|
-
end
|
70
|
+
end
|
65
71
|
end
|
66
72
|
File.open('fitting/json_schemas.json', 'w') { |file| file.write(JSON.pretty_generate(json_schemas)) }
|
67
73
|
File.open('fitting/combinations.json', 'w') { |file| file.write(JSON.pretty_generate(combinations)) }
|
68
74
|
File.open('fitting/tests.json', 'w') { |file| file.write(JSON.pretty_generate(tests.to_h)) }
|
69
75
|
|
70
|
-
js_path = Dir["#{destination}/js/*"].find { |f| f[0..14] == 'fitting/js/app.' and f[-3
|
76
|
+
js_path = Dir["#{destination}/js/*"].find { |f| f[0..14] == 'fitting/js/app.' and f[-3..] == '.js' }
|
71
77
|
js_file = File.read(js_path)
|
72
|
-
new_js_file = js_file.gsub(
|
73
|
-
new_js_file = new_js_file.gsub(
|
74
|
-
new_js_file = new_js_file.gsub(
|
75
|
-
new_js_file = new_js_file.gsub(
|
76
|
-
new_js_file = new_js_file.gsub(
|
78
|
+
new_js_file = js_file.gsub('{stub:"prefixes report"}', report)
|
79
|
+
new_js_file = new_js_file.gsub('{stub:"for action page"}', report)
|
80
|
+
new_js_file = new_js_file.gsub('{stub:"json-schemas"}', JSON.pretty_generate(json_schemas))
|
81
|
+
new_js_file = new_js_file.gsub('{stub:"combinations"}', JSON.pretty_generate(combinations))
|
82
|
+
new_js_file = new_js_file.gsub('{stub:"tests"}', JSON.pretty_generate(tests.to_h))
|
77
83
|
File.open(js_path, 'w') { |file| file.write(new_js_file) }
|
78
84
|
|
79
85
|
console = Fitting::Report::Console.new(
|
80
|
-
|
81
|
-
|
86
|
+
tests.without_prefixes,
|
87
|
+
prefixes.to_a.map(&:details)
|
82
88
|
)
|
83
89
|
|
84
90
|
puts console.output
|
@@ -88,53 +94,53 @@ namespace :fitting do
|
|
88
94
|
exit 0
|
89
95
|
|
90
96
|
actions.map do |action|
|
91
|
-
action.to_hash[
|
97
|
+
action.to_hash['responses'].map do |response|
|
92
98
|
response['combination'] ||= []
|
93
|
-
combinations = Fitting::Cover::JSONSchema.new(response['body']).combi +
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
99
|
+
combinations = Fitting::Cover::JSONSchema.new(response['body']).combi +
|
100
|
+
Fitting::Cover::JSONSchemaEnum.new(response['body']).combi +
|
101
|
+
Fitting::Cover::JSONSchemaOneOf.new(response['body']).combi
|
102
|
+
next unless combinations != []
|
103
|
+
|
104
|
+
combinations.map do |combination|
|
105
|
+
response['combination'].push(
|
106
|
+
{
|
107
|
+
'json_schema' => combination[0],
|
108
|
+
'type' => combination[1][0],
|
109
|
+
'combination' => combination[1][1],
|
110
|
+
'tests' => [],
|
111
|
+
'error' => []
|
112
|
+
}
|
113
|
+
)
|
106
114
|
end
|
107
115
|
end
|
108
116
|
end
|
109
117
|
|
110
118
|
actions.map do |action|
|
111
|
-
action.to_hash[
|
119
|
+
action.to_hash['responses'].map do |response|
|
112
120
|
response['tests'] ||= []
|
113
121
|
response['tests'].map do |test|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
end
|
125
|
-
rescue JSON::Schema::SchemaError => error
|
126
|
-
combination['error'].push({test: test, error: error})
|
127
|
-
end
|
122
|
+
next unless response['combination'][0]
|
123
|
+
|
124
|
+
response['combination'].map do |combination|
|
125
|
+
res = JSON::Validator.fully_validate(combination['json_schema'], test['response']['body'])
|
126
|
+
if res == []
|
127
|
+
combination['tests'].push(test)
|
128
|
+
response['tests'] = response['tests'] - [test]
|
129
|
+
next
|
130
|
+
else
|
131
|
+
combination['error'].push({ test: test, error: res })
|
128
132
|
end
|
133
|
+
rescue JSON::Schema::SchemaError => e
|
134
|
+
combination['error'].push({ test: test, error: e })
|
129
135
|
end
|
130
136
|
end
|
131
137
|
end
|
132
138
|
end
|
133
139
|
|
134
|
-
actions_test = {actions: actions, tests: tests}
|
140
|
+
actions_test = { actions: actions, tests: tests }
|
135
141
|
|
136
142
|
makedirs('fitting')
|
137
|
-
File.open('fitting/old_report.json', 'w') { |file| file.write(
|
143
|
+
File.open('fitting/old_report.json', 'w') { |file| file.write(JSON.dump(actions_test)) }
|
138
144
|
end
|
139
145
|
|
140
146
|
# deprecated
|
@@ -154,7 +160,8 @@ namespace :fitting do
|
|
154
160
|
|
155
161
|
desc 'Fitting documentation responses cover'
|
156
162
|
task :documentation_responses, [:size] => :environment do |_, args|
|
157
|
-
|
163
|
+
case args.size
|
164
|
+
when 'xs'
|
158
165
|
documented_unit = Fitting::Statistics::Template.new(
|
159
166
|
Fitting::Records::Spherical::Requests.new,
|
160
167
|
Fitting.configuration
|
@@ -165,7 +172,7 @@ namespace :fitting do
|
|
165
172
|
puts 'Not all responses from the whitelist are covered!'
|
166
173
|
exit 1
|
167
174
|
end
|
168
|
-
|
175
|
+
when 's'
|
169
176
|
documented_unit = Fitting::Statistics::Template.new(
|
170
177
|
Fitting::Records::Spherical::Requests.new,
|
171
178
|
Fitting.configuration,
|
@@ -177,7 +184,7 @@ namespace :fitting do
|
|
177
184
|
puts 'Not all responses from the whitelist are covered!'
|
178
185
|
exit 1
|
179
186
|
end
|
180
|
-
|
187
|
+
when 'm'
|
181
188
|
documented_unit = Fitting::Statistics::Template.new(
|
182
189
|
Fitting::Records::Spherical::Requests.new,
|
183
190
|
Fitting.configuration,
|
@@ -189,7 +196,7 @@ namespace :fitting do
|
|
189
196
|
puts 'Not all responses from the whitelist are covered!'
|
190
197
|
exit 1
|
191
198
|
end
|
192
|
-
|
199
|
+
when 'l'
|
193
200
|
documented_unit = Fitting::Statistics::Template.new(
|
194
201
|
Fitting::Records::Spherical::Requests.new,
|
195
202
|
Fitting.configuration,
|
@@ -208,19 +215,20 @@ namespace :fitting do
|
|
208
215
|
|
209
216
|
desc 'Fitting documentation responses cover error'
|
210
217
|
task :documentation_responses_error, [:size] => :environment do |_, args|
|
211
|
-
|
218
|
+
case args.size
|
219
|
+
when 's'
|
212
220
|
documented_unit = Fitting::Statistics::TemplateCoverError.new(
|
213
221
|
Fitting::Records::Spherical::Requests.new,
|
214
222
|
Fitting.configuration
|
215
223
|
)
|
216
224
|
puts documented_unit.stats
|
217
|
-
|
225
|
+
when 'm'
|
218
226
|
documented_unit = Fitting::Statistics::TemplateCoverErrorEnum.new(
|
219
227
|
Fitting::Records::Spherical::Requests.new,
|
220
228
|
Fitting.configuration
|
221
229
|
)
|
222
230
|
puts documented_unit.stats
|
223
|
-
|
231
|
+
when 'l'
|
224
232
|
documented_unit = Fitting::Statistics::TemplateCoverErrorOneOf.new(
|
225
233
|
Fitting::Records::Spherical::Requests.new,
|
226
234
|
Fitting.configuration
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fitting
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- d.efimov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09-
|
11
|
+
date: 2021-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json-schema
|
@@ -30,20 +30,6 @@ dependencies:
|
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 2.6.2
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: multi_json
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '1.11'
|
40
|
-
type: :runtime
|
41
|
-
prerelease: false
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - "~>"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '1.11'
|
47
33
|
- !ruby/object:Gem::Dependency
|
48
34
|
name: tomograph
|
49
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,100 +70,82 @@ dependencies:
|
|
84
70
|
requirements:
|
85
71
|
- - "~>"
|
86
72
|
- !ruby/object:Gem::Version
|
87
|
-
version: '
|
73
|
+
version: '11.1'
|
88
74
|
- - ">="
|
89
75
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
76
|
+
version: 11.1.3
|
91
77
|
type: :development
|
92
78
|
prerelease: false
|
93
79
|
version_requirements: !ruby/object:Gem::Requirement
|
94
80
|
requirements:
|
95
81
|
- - "~>"
|
96
82
|
- !ruby/object:Gem::Version
|
97
|
-
version: '
|
83
|
+
version: '11.1'
|
98
84
|
- - ">="
|
99
85
|
- !ruby/object:Gem::Version
|
100
|
-
version:
|
86
|
+
version: 11.1.3
|
101
87
|
- !ruby/object:Gem::Dependency
|
102
88
|
name: rake
|
103
89
|
requirement: !ruby/object:Gem::Requirement
|
104
90
|
requirements:
|
105
91
|
- - "~>"
|
106
92
|
- !ruby/object:Gem::Version
|
107
|
-
version: '
|
93
|
+
version: '13.0'
|
108
94
|
- - ">="
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
96
|
+
version: 13.0.6
|
111
97
|
type: :development
|
112
98
|
prerelease: false
|
113
99
|
version_requirements: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
101
|
- - "~>"
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
103
|
+
version: '13.0'
|
118
104
|
- - ">="
|
119
105
|
- !ruby/object:Gem::Version
|
120
|
-
version:
|
106
|
+
version: 13.0.6
|
121
107
|
- !ruby/object:Gem::Dependency
|
122
108
|
name: rspec
|
123
109
|
requirement: !ruby/object:Gem::Requirement
|
124
110
|
requirements:
|
125
|
-
- - ">="
|
126
|
-
- !ruby/object:Gem::Version
|
127
|
-
version: 3.4.0
|
128
111
|
- - "~>"
|
129
112
|
- !ruby/object:Gem::Version
|
130
|
-
version: '3.
|
113
|
+
version: '3.10'
|
131
114
|
type: :development
|
132
115
|
prerelease: false
|
133
116
|
version_requirements: !ruby/object:Gem::Requirement
|
134
117
|
requirements:
|
135
|
-
- - ">="
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version: 3.4.0
|
138
118
|
- - "~>"
|
139
119
|
- !ruby/object:Gem::Version
|
140
|
-
version: '3.
|
120
|
+
version: '3.10'
|
141
121
|
- !ruby/object:Gem::Dependency
|
142
122
|
name: rubocop
|
143
123
|
requirement: !ruby/object:Gem::Requirement
|
144
124
|
requirements:
|
145
|
-
- - ">="
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
version: 0.49.1
|
148
125
|
- - "~>"
|
149
126
|
- !ruby/object:Gem::Version
|
150
|
-
version:
|
127
|
+
version: 1.22.0
|
151
128
|
type: :development
|
152
129
|
prerelease: false
|
153
130
|
version_requirements: !ruby/object:Gem::Requirement
|
154
131
|
requirements:
|
155
|
-
- - ">="
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: 0.49.1
|
158
132
|
- - "~>"
|
159
133
|
- !ruby/object:Gem::Version
|
160
|
-
version:
|
134
|
+
version: 1.22.0
|
161
135
|
- !ruby/object:Gem::Dependency
|
162
136
|
name: simplecov
|
163
137
|
requirement: !ruby/object:Gem::Requirement
|
164
138
|
requirements:
|
165
139
|
- - "~>"
|
166
140
|
- !ruby/object:Gem::Version
|
167
|
-
version: '0.
|
168
|
-
- - ">="
|
169
|
-
- !ruby/object:Gem::Version
|
170
|
-
version: 0.11.2
|
141
|
+
version: '0.21'
|
171
142
|
type: :development
|
172
143
|
prerelease: false
|
173
144
|
version_requirements: !ruby/object:Gem::Requirement
|
174
145
|
requirements:
|
175
146
|
- - "~>"
|
176
147
|
- !ruby/object:Gem::Version
|
177
|
-
version: '0.
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: 0.11.2
|
148
|
+
version: '0.21'
|
181
149
|
description: Coverage API Blueprint, Swagger and OpenAPI with RSpec for easily make
|
182
150
|
high-quality API and documenatiton
|
183
151
|
email:
|
@@ -304,7 +272,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
304
272
|
requirements:
|
305
273
|
- - ">="
|
306
274
|
- !ruby/object:Gem::Version
|
307
|
-
version:
|
275
|
+
version: 2.6.0
|
308
276
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
309
277
|
requirements:
|
310
278
|
- - ">="
|