fitting 2.18.3 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -11
  3. data/CHANGELOG.md +6 -0
  4. data/README.md +46 -6
  5. data/fitting.gemspec +1 -1
  6. data/lib/fitting/configuration.rb +12 -6
  7. data/lib/fitting/cover/json_schema.rb +4 -2
  8. data/lib/fitting/cover/json_schema_enum.rb +4 -2
  9. data/lib/fitting/cover/json_schema_one_of.rb +4 -2
  10. data/lib/fitting/railtie.rb +1 -0
  11. data/lib/fitting/records/documented/request.rb +1 -15
  12. data/lib/fitting/records/spherical/requests.rb +1 -1
  13. data/lib/fitting/records/tested/request.rb +11 -11
  14. data/lib/fitting/records/tested/response.rb +4 -4
  15. data/lib/fitting/report/actions.rb +4 -0
  16. data/lib/fitting/report/prefix.rb +20 -41
  17. data/lib/fitting/report/prefixes.rb +7 -8
  18. data/lib/fitting/report/response.rb +0 -3
  19. data/lib/fitting/report/tests.rb +23 -10
  20. data/lib/fitting/storage/responses.rb +5 -9
  21. data/lib/fitting/tests.rb +12 -4
  22. data/lib/fitting/version.rb +1 -1
  23. data/lib/fitting.rb +38 -43
  24. data/lib/tasks/fitting.rake +2 -186
  25. data/lib/tasks/fitting_outgoing.rake +91 -0
  26. metadata +5 -41
  27. data/lib/fitting/configuration/yaml.rb +0 -89
  28. data/lib/fitting/cover/response.rb +0 -37
  29. data/lib/fitting/documentation.rb +0 -56
  30. data/lib/fitting/matchers/response_matcher.rb +0 -88
  31. data/lib/fitting/records/realized_unit.rb +0 -52
  32. data/lib/fitting/records/test_unit/request.rb +0 -98
  33. data/lib/fitting/records/unit/combination.rb +0 -27
  34. data/lib/fitting/records/unit/json_schema.rb +0 -111
  35. data/lib/fitting/records/unit/request.rb +0 -37
  36. data/lib/fitting/records/unit/response.rb +0 -32
  37. data/lib/fitting/request.rb +0 -38
  38. data/lib/fitting/response/fully_validates.rb +0 -34
  39. data/lib/fitting/response.rb +0 -88
  40. data/lib/fitting/statistics/analysis.rb +0 -25
  41. data/lib/fitting/statistics/cover_error.rb +0 -29
  42. data/lib/fitting/statistics/cover_error_enum.rb +0 -29
  43. data/lib/fitting/statistics/cover_error_one_of.rb +0 -29
  44. data/lib/fitting/statistics/great.rb +0 -13
  45. data/lib/fitting/statistics/list.rb +0 -55
  46. data/lib/fitting/statistics/lists.rb +0 -53
  47. data/lib/fitting/statistics/measurement.rb +0 -92
  48. data/lib/fitting/statistics/measurement_cover.rb +0 -92
  49. data/lib/fitting/statistics/measurement_cover_enum.rb +0 -92
  50. data/lib/fitting/statistics/measurement_cover_one_of.rb +0 -92
  51. data/lib/fitting/statistics/not_covered_responses.rb +0 -13
  52. data/lib/fitting/statistics/percent.rb +0 -20
  53. data/lib/fitting/statistics/requests_stats.rb +0 -40
  54. data/lib/fitting/statistics/responses_stats.rb +0 -32
  55. data/lib/fitting/statistics/template.rb +0 -117
  56. data/lib/fitting/statistics/template_cover_error.rb +0 -50
  57. data/lib/fitting/statistics/template_cover_error_enum.rb +0 -50
  58. data/lib/fitting/statistics/template_cover_error_one_of.rb +0 -50
  59. data/lib/fitting/statistics.rb +0 -25
  60. data/lib/fitting/storage/white_list.rb +0 -158
  61. data/lib/fitting/templates/realized_template.rb +0 -49
  62. data/lib/fitting/view/report.html.haml +0 -16
  63. data/lib/fitting/view/style.css +0 -47
data/lib/fitting.rb CHANGED
@@ -1,73 +1,68 @@
1
1
  require 'fitting/version'
2
2
  require 'fitting/configuration'
3
- require 'fitting/matchers/response_matcher'
4
- require 'fitting/documentation'
3
+
5
4
  require 'fitting/storage/responses'
5
+ require 'fitting/tests'
6
+ require 'fitting/cover/json_schema_enum'
7
+ require 'fitting/cover/json_schema_one_of'
8
+ require 'fitting/records/documented/request'
6
9
  require 'fitting/railtie' if defined?(Rails)
7
10
 
8
11
  module Fitting
9
12
  class << self
10
- def configure
11
- yield configuration
12
- end
13
-
14
13
  def configuration
15
- @configuration ||= Configuration.craft
14
+ yaml = YAML.safe_load(File.read('.fitting.yml'))
15
+ @configuration ||= Configuration.new(yaml)
16
16
  end
17
17
 
18
- def statistics
19
- responses = Fitting::Storage::Responses.new
20
-
21
- RSpec.configure do |config|
22
- config.after(:each, type: :controller) do
23
- responses.add(response, inspect)
24
- end
25
-
26
- config.after(:suite) do
27
- responses.statistics.save
28
- end
29
- end
18
+ def configure
19
+ yield(configuration)
30
20
  end
31
21
 
32
- extend Gem::Deprecate
33
- deprecate :statistics, :save_test_data, 2022, 1
22
+ def clear_tests_directory
23
+ FileUtils.rm_r Dir.glob(configuration.rspec_json_path), force: true
24
+ FileUtils.rm_r Dir.glob(configuration.webmock_json_path), force: true
25
+ end
34
26
 
35
27
  def save_test_data
36
- responses = Fitting::Storage::Responses.new
28
+ clear_tests_directory
37
29
 
38
- FileUtils.rm_r Dir.glob('fitting_tests/*'), force: true
30
+ outgoing_responses = Fitting::Storage::Responses.new
31
+ responses = Fitting::Storage::Responses.new
39
32
 
40
33
  RSpec.configure do |config|
34
+ if defined?(WebMock)
35
+ config.before(:each) do |example|
36
+ WebMock.after_request do |request_signature, response|
37
+ env = Rack::MockRequest.env_for(request_signature.uri, { method: request_signature.method })
38
+ # Парсим в тот формат с которым работает fitting
39
+ mock_request = ActionDispatch::Request.new(env)
40
+ mock_response = ActionDispatch::Response.create(response.status.first || 200, response.headers || {},
41
+ response.body || {})
42
+ mock_response.instance_variable_set(:@request, mock_request)
43
+
44
+ outgoing_responses.add(mock_response, example)
45
+ end
46
+ end
47
+ end
48
+
41
49
  config.after(:each, type: :request) do |example|
42
- responses.add(response, example.metadata)
50
+ responses.add(response, example)
43
51
  end
44
52
 
45
53
  config.after(:each, type: :controller) do |example|
46
- responses.add(response, example.metadata)
54
+ responses.add(response, example)
55
+ end
56
+
57
+ config.after(:each) do
58
+ WebMock::CallbackRegistry.reset
47
59
  end
48
60
 
49
61
  config.after(:suite) do
50
62
  responses.tests.save
63
+ outgoing_responses.tests.outgoing_save
51
64
  end
52
65
  end
53
66
  end
54
67
  end
55
-
56
- def self.loaded_tasks=(val)
57
- @loaded_tasks = val
58
- end
59
-
60
- def self.loaded_tasks
61
- @loaded_tasks
62
- end
63
-
64
- def self.load_tasks
65
- return if loaded_tasks
66
-
67
- self.loaded_tasks = true
68
-
69
- Dir[File.join(File.dirname(__FILE__), 'tasks', '**/*.rake')].each do |rake|
70
- load rake
71
- end
72
- end
73
68
  end
@@ -1,10 +1,4 @@
1
1
  require 'fitting/records/spherical/requests'
2
- require 'fitting/configuration'
3
- require 'fitting/records/realized_unit'
4
- require 'fitting/templates/realized_template'
5
- require 'fitting/statistics/template_cover_error'
6
- require 'fitting/statistics/template_cover_error_enum'
7
- require 'fitting/statistics/template_cover_error_one_of'
8
2
  require 'fitting/cover/json_schema'
9
3
  require 'fitting/report/prefixes'
10
4
  require 'fitting/report/tests'
@@ -12,8 +6,8 @@ require 'fitting/report/console'
12
6
 
13
7
  namespace :fitting do
14
8
  task :report do
15
- tests = Fitting::Report::Tests.new_from_config('fitting_tests/*.json')
16
- prefixes = Fitting::Report::Prefixes.new('.fitting.yml')
9
+ tests = Fitting::Report::Tests.new_from_config
10
+ prefixes = Fitting::Report::Prefixes.new(Fitting.configuration.prefixes)
17
11
 
18
12
  prefixes.join(tests)
19
13
 
@@ -93,183 +87,5 @@ namespace :fitting do
93
87
  exit 1 unless console.good?
94
88
 
95
89
  exit 0
96
-
97
- actions.map do |action|
98
- action.to_hash['responses'].map do |response|
99
- response['combination'] ||= []
100
- combinations = Fitting::Cover::JSONSchema.new(response['body']).combi +
101
- Fitting::Cover::JSONSchemaEnum.new(response['body']).combi +
102
- Fitting::Cover::JSONSchemaOneOf.new(response['body']).combi
103
- next unless combinations != []
104
-
105
- combinations.map do |combination|
106
- response['combination'].push(
107
- {
108
- 'json_schema' => combination[0],
109
- 'type' => combination[1][0],
110
- 'combination' => combination[1][1],
111
- 'tests' => [],
112
- 'error' => []
113
- }
114
- )
115
- end
116
- end
117
- end
118
-
119
- actions.map do |action|
120
- action.to_hash['responses'].map do |response|
121
- response['tests'] ||= []
122
- response['tests'].map do |test|
123
- next unless response['combination'][0]
124
-
125
- response['combination'].map do |combination|
126
- res = JSON::Validator.fully_validate(combination['json_schema'], test['response']['body'])
127
- if res == []
128
- combination['tests'].push(test)
129
- response['tests'] = response['tests'] - [test]
130
- next
131
- else
132
- combination['error'].push({ test: test, error: res })
133
- end
134
- rescue JSON::Schema::SchemaError => e
135
- combination['error'].push({ test: test, error: e })
136
- end
137
- end
138
- end
139
- end
140
-
141
- actions_test = { actions: actions, tests: tests }
142
-
143
- makedirs('fitting')
144
- File.open('fitting/old_report.json', 'w') { |file| file.write(JSON.dump(actions_test)) }
145
- end
146
-
147
- # deprecated
148
- desc 'Fitting documentation'
149
- task :documentation do
150
- documented_unit = Fitting::Statistics::Template.new(
151
- Fitting::Records::Spherical::Requests.new,
152
- Fitting.configuration
153
- )
154
- puts documented_unit.stats
155
-
156
- unless documented_unit.not_covered == "\n"
157
- puts 'Not all responses from the whitelist are covered!'
158
- exit 1
159
- end
160
- end
161
-
162
- desc 'Fitting documentation responses cover'
163
- task :documentation_responses, [:size] => :environment do |_, args|
164
- case args.size
165
- when 'xs'
166
- documented_unit = Fitting::Statistics::Template.new(
167
- Fitting::Records::Spherical::Requests.new,
168
- Fitting.configuration
169
- )
170
- puts documented_unit.stats
171
-
172
- unless documented_unit.not_covered == "\n"
173
- puts 'Not all responses from the whitelist are covered!'
174
- exit 1
175
- end
176
- when 's'
177
- documented_unit = Fitting::Statistics::Template.new(
178
- Fitting::Records::Spherical::Requests.new,
179
- Fitting.configuration,
180
- 'cover'
181
- )
182
- puts documented_unit.stats
183
-
184
- unless documented_unit.not_covered == "\n"
185
- puts 'Not all responses from the whitelist are covered!'
186
- exit 1
187
- end
188
- when 'm'
189
- documented_unit = Fitting::Statistics::Template.new(
190
- Fitting::Records::Spherical::Requests.new,
191
- Fitting.configuration,
192
- 'cover_enum'
193
- )
194
- puts documented_unit.stats
195
-
196
- unless documented_unit.not_covered == "\n"
197
- puts 'Not all responses from the whitelist are covered!'
198
- exit 1
199
- end
200
- when 'l'
201
- documented_unit = Fitting::Statistics::Template.new(
202
- Fitting::Records::Spherical::Requests.new,
203
- Fitting.configuration,
204
- 'cover_one_of'
205
- )
206
- puts documented_unit.stats
207
-
208
- unless documented_unit.not_covered == "\n"
209
- puts 'Not all responses from the whitelist are covered!'
210
- exit 1
211
- end
212
- else
213
- puts 'need key xs, s, m or l'
214
- end
215
- end
216
-
217
- desc 'Fitting documentation responses cover error'
218
- task :documentation_responses_error, [:size] => :environment do |_, args|
219
- case args.size
220
- when 's'
221
- documented_unit = Fitting::Statistics::TemplateCoverError.new(
222
- Fitting::Records::Spherical::Requests.new,
223
- Fitting.configuration
224
- )
225
- puts documented_unit.stats
226
- when 'm'
227
- documented_unit = Fitting::Statistics::TemplateCoverErrorEnum.new(
228
- Fitting::Records::Spherical::Requests.new,
229
- Fitting.configuration
230
- )
231
- puts documented_unit.stats
232
- when 'l'
233
- documented_unit = Fitting::Statistics::TemplateCoverErrorOneOf.new(
234
- Fitting::Records::Spherical::Requests.new,
235
- Fitting.configuration
236
- )
237
- puts documented_unit.stats
238
- else
239
- puts 'need key s, m or l'
240
- end
241
- end
242
-
243
- # deprecated
244
- desc 'Fitting tests'
245
- task :tests do
246
- realized_unit = Fitting::Records::RealizedUnit.new(
247
- Fitting::Records::Spherical::Requests.new,
248
- Fitting.configuration.tomogram
249
- )
250
- puts Fitting::Templates::RealizedTemplate.new(realized_unit).to_s
251
-
252
- unless realized_unit.fully_covered?
253
- puts 'Not all responses from the whitelist are covered!'
254
- exit 1
255
- end
256
- end
257
-
258
- desc 'Fitting tests'
259
- task :tests_responses, [:size] => :environment do |_, args|
260
- if args.size == 'xs'
261
- realized_unit = Fitting::Records::RealizedUnit.new(
262
- Fitting::Records::Spherical::Requests.new,
263
- Fitting.configuration.tomogram
264
- )
265
- puts Fitting::Templates::RealizedTemplate.new(realized_unit).to_s
266
-
267
- unless realized_unit.fully_covered?
268
- puts 'Not all responses from the whitelist are covered!'
269
- exit 1
270
- end
271
- else
272
- puts 'need key xs'
273
- end
274
90
  end
275
91
  end
@@ -0,0 +1,91 @@
1
+ require 'fitting/records/spherical/requests'
2
+ require 'fitting/cover/json_schema'
3
+ require 'fitting/report/prefixes'
4
+ require 'fitting/report/tests'
5
+ require 'fitting/report/console'
6
+
7
+ namespace :fitting_out do
8
+ task :report do
9
+ tests = Fitting::Report::Tests.new_from_outgoing_config
10
+ prefixes = Fitting::Report::Prefixes.new(Fitting.configuration.prefixes)
11
+
12
+ prefixes.join(tests)
13
+
14
+ prefixes.to_a.map do |prefix|
15
+ prefix.actions.join(prefix.tests) unless prefix.skip?
16
+ end
17
+
18
+ prefixes.to_a.map do |prefix|
19
+ next if prefix.skip?
20
+
21
+ prefix.actions.to_a.map do |action|
22
+ action.responses.join(action.tests)
23
+ end
24
+ end
25
+
26
+ prefixes.to_a.map do |prefix|
27
+ next if prefix.skip?
28
+
29
+ prefix.actions.to_a.map do |action|
30
+ action.responses.to_a.map do |response|
31
+ response.combinations.join(response.tests)
32
+ end
33
+ end
34
+ end
35
+
36
+ report = JSON.pretty_generate(
37
+ {
38
+ tests_without_prefixes: tests.without_prefixes,
39
+ prefixes_details: prefixes.to_a.map(&:details)
40
+ }
41
+ )
42
+
43
+ destination = 'fitting'
44
+ FileUtils.mkdir_p(destination)
45
+ FileUtils.rm_r Dir.glob("#{destination}/*"), force: true
46
+ File.open('fitting/report.json', 'w') { |file| file.write(report) }
47
+
48
+ gem_path = $LOAD_PATH.find { |i| i.include?('fitting') }
49
+ source_path = "#{gem_path}/templates/bomboniere/dist"
50
+ FileUtils.copy_entry source_path, destination
51
+
52
+ json_schemas = {}
53
+ combinations = {}
54
+ prefixes.to_a.map do |prefix|
55
+ next if prefix.skip?
56
+
57
+ prefix.actions.to_a.map do |action|
58
+ action.responses.to_a.map do |response|
59
+ json_schemas[response.id] = response.body
60
+ response.combinations.to_a.map do |combination|
61
+ combinations.merge!(combination.id => combination.json_schema)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ File.open('fitting/json_schemas.json', 'w') { |file| file.write(JSON.pretty_generate(json_schemas)) }
67
+ File.open('fitting/combinations.json', 'w') { |file| file.write(JSON.pretty_generate(combinations)) }
68
+ File.open('fitting/tests.json', 'w') { |file| file.write(JSON.pretty_generate(tests.to_h)) }
69
+
70
+ js_path = Dir["#{destination}/js/*"].find { |f| f[0..14] == 'fitting/js/app.' and f[-3..] == '.js' }
71
+ js_file = File.read(js_path)
72
+ new_js_file = js_file.gsub('{stub:"prefixes report"}', report)
73
+ new_js_file = new_js_file.gsub('{stub:"for action page"}', report)
74
+ new_js_file = new_js_file.gsub('{stub:"json-schemas"}', JSON.pretty_generate(json_schemas))
75
+ new_js_file = new_js_file.gsub('{stub:"combinations"}', JSON.pretty_generate(combinations))
76
+ new_js_file = new_js_file.gsub('{stub:"tests"}', JSON.pretty_generate(tests.to_h))
77
+ File.open(js_path, 'w') { |file| file.write(new_js_file) }
78
+
79
+ console = Fitting::Report::Console.new(
80
+ tests.without_prefixes,
81
+ prefixes.to_a.map(&:details)
82
+ )
83
+
84
+ puts console.output
85
+ puts console.output_sum
86
+
87
+ exit 1 unless console.good?
88
+
89
+ exit 0
90
+ end
91
+ end
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.18.3
4
+ version: 3.0.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-11-12 00:00:00.000000000 Z
11
+ date: 2021-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema
@@ -142,14 +142,14 @@ dependencies:
142
142
  name: rubocop
143
143
  requirement: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - "~>"
145
+ - - ">="
146
146
  - !ruby/object:Gem::Version
147
147
  version: 1.22.0
148
148
  type: :development
149
149
  prerelease: false
150
150
  version_requirements: !ruby/object:Gem::Requirement
151
151
  requirements:
152
- - - "~>"
152
+ - - ">="
153
153
  - !ruby/object:Gem::Version
154
154
  version: 1.22.0
155
155
  - !ruby/object:Gem::Dependency
@@ -193,26 +193,16 @@ files:
193
193
  - images/logo.png
194
194
  - lib/fitting.rb
195
195
  - lib/fitting/configuration.rb
196
- - lib/fitting/configuration/yaml.rb
197
196
  - lib/fitting/cover/json_schema.rb
198
197
  - lib/fitting/cover/json_schema_enum.rb
199
198
  - lib/fitting/cover/json_schema_one_of.rb
200
- - lib/fitting/cover/response.rb
201
- - lib/fitting/documentation.rb
202
- - lib/fitting/matchers/response_matcher.rb
203
199
  - lib/fitting/railtie.rb
204
200
  - lib/fitting/records/documented/request.rb
205
- - lib/fitting/records/realized_unit.rb
206
201
  - lib/fitting/records/spherical/request.rb
207
202
  - lib/fitting/records/spherical/requests.rb
208
203
  - lib/fitting/records/spherical/response.rb
209
- - lib/fitting/records/test_unit/request.rb
210
204
  - lib/fitting/records/tested/request.rb
211
205
  - lib/fitting/records/tested/response.rb
212
- - lib/fitting/records/unit/combination.rb
213
- - lib/fitting/records/unit/json_schema.rb
214
- - lib/fitting/records/unit/request.rb
215
- - lib/fitting/records/unit/response.rb
216
206
  - lib/fitting/report/action.rb
217
207
  - lib/fitting/report/actions.rb
218
208
  - lib/fitting/report/combination.rb
@@ -224,37 +214,11 @@ files:
224
214
  - lib/fitting/report/responses.rb
225
215
  - lib/fitting/report/test.rb
226
216
  - lib/fitting/report/tests.rb
227
- - lib/fitting/request.rb
228
- - lib/fitting/response.rb
229
- - lib/fitting/response/fully_validates.rb
230
- - lib/fitting/statistics.rb
231
- - lib/fitting/statistics/analysis.rb
232
- - lib/fitting/statistics/cover_error.rb
233
- - lib/fitting/statistics/cover_error_enum.rb
234
- - lib/fitting/statistics/cover_error_one_of.rb
235
- - lib/fitting/statistics/great.rb
236
- - lib/fitting/statistics/list.rb
237
- - lib/fitting/statistics/lists.rb
238
- - lib/fitting/statistics/measurement.rb
239
- - lib/fitting/statistics/measurement_cover.rb
240
- - lib/fitting/statistics/measurement_cover_enum.rb
241
- - lib/fitting/statistics/measurement_cover_one_of.rb
242
- - lib/fitting/statistics/not_covered_responses.rb
243
- - lib/fitting/statistics/percent.rb
244
- - lib/fitting/statistics/requests_stats.rb
245
- - lib/fitting/statistics/responses_stats.rb
246
- - lib/fitting/statistics/template.rb
247
- - lib/fitting/statistics/template_cover_error.rb
248
- - lib/fitting/statistics/template_cover_error_enum.rb
249
- - lib/fitting/statistics/template_cover_error_one_of.rb
250
217
  - lib/fitting/storage/responses.rb
251
- - lib/fitting/storage/white_list.rb
252
- - lib/fitting/templates/realized_template.rb
253
218
  - lib/fitting/tests.rb
254
219
  - lib/fitting/version.rb
255
- - lib/fitting/view/report.html.haml
256
- - lib/fitting/view/style.css
257
220
  - lib/tasks/fitting.rake
221
+ - lib/tasks/fitting_outgoing.rake
258
222
  - lib/templates/bomboniere/.gitignore
259
223
  - lib/templates/bomboniere/.tool-versions
260
224
  - lib/templates/bomboniere/README.md
@@ -1,89 +0,0 @@
1
- require 'tomograph'
2
-
3
- module Fitting
4
- class Configuration
5
- class Yaml
6
- attr_reader :title
7
- attr_accessor :apib_path,
8
- :drafter_yaml_path,
9
- :crafter_apib_path,
10
- :crafter_yaml_path,
11
- :drafter_4_apib_path,
12
- :drafter_4_yaml_path,
13
- :tomogram_json_path,
14
- :strict,
15
- :prefix,
16
- :white_list,
17
- :resource_white_list,
18
- :ignore_list,
19
- :include_resources,
20
- :include_actions
21
-
22
- def initialize(yaml, title = 'fitting')
23
- @apib_path = yaml['apib_path']
24
- @drafter_yaml_path = yaml['drafter_yaml_path']
25
- @crafter_apib_path = yaml['crafter_apib_path']
26
- @crafter_yaml_path = yaml['crafter_yaml_path']
27
- @drafter_4_apib_path = yaml['drafter_4_apib_path']
28
- @drafter_4_yaml_path = yaml['drafter_4_yaml_path']
29
- @tomogram_json_path = yaml['tomogram_json_path']
30
- @strict = yaml['strict']
31
- @prefix = yaml['prefix']
32
- @white_list = yaml['white_list']
33
- @resource_white_list = yaml['resource_white_list']
34
- @ignore_list = yaml['ignore_list']
35
- @include_resources = yaml['include_resources']
36
- @include_actions = yaml['include_actions']
37
- @title = title
38
- default
39
- end
40
-
41
- def tomogram
42
- @tomogram ||= if crafter_yaml_path || crafter_apib_path
43
- Tomograph::Tomogram.new(
44
- prefix: prefix,
45
- crafter_apib_path: crafter_apib_path,
46
- crafter_yaml_path: crafter_yaml_path
47
- )
48
- elsif drafter_4_apib_path || drafter_4_yaml_path
49
- Tomograph::Tomogram.new(
50
- prefix: prefix,
51
- drafter_4_apib_path: drafter_4_apib_path,
52
- drafter_4_yaml_path: drafter_4_yaml_path
53
- )
54
- else
55
- Tomograph::Tomogram.new(
56
- prefix: prefix,
57
- apib_path: apib_path,
58
- drafter_yaml_path: drafter_yaml_path,
59
- tomogram_json_path: tomogram_json_path
60
- )
61
- end
62
- end
63
-
64
- def stats_path
65
- if @title == 'fitting'
66
- 'fitting/stats'
67
- else
68
- "fitting/#{@title}/stats"
69
- end
70
- end
71
-
72
- def not_covered_path
73
- if @title == 'fitting'
74
- 'fitting/not_covered'
75
- else
76
- "fitting/#{@title}/not_covered"
77
- end
78
- end
79
-
80
- private
81
-
82
- def default
83
- @strict ||= false if strict.nil?
84
- @prefix ||= ''
85
- @ignore_list ||= []
86
- end
87
- end
88
- end
89
- end
@@ -1,37 +0,0 @@
1
- require 'fitting/cover/json_schema'
2
- require 'json-schema'
3
-
4
- module Fitting
5
- class Cover
6
- class Response
7
- def initialize(response)
8
- @cover_json_schemas = Fitting::Cover::JSONSchema.new(response.json_schema)
9
- @json_schemas = @cover_json_schemas.json_schemas + [response.json_schema]
10
- @combinations = @cover_json_schemas.combinations
11
- @flags = @cover_json_schemas.json_schemas.map do |json_schema|
12
- JSON::Validator.validate(json_schema, response.body)
13
- end
14
- end
15
-
16
- attr_reader :json_schemas, :combinations, :flags
17
-
18
- def update(response)
19
- index = 0
20
- @cover_json_schemas.json_schemas.map do |json_schema|
21
- flag = JSON::Validator.validate(json_schema, response.body)
22
- @flags[index] = @flags[index] || flag
23
- index += 1
24
- end
25
- self
26
- end
27
-
28
- def to_hash
29
- {
30
- 'json_schemas' => json_schemas,
31
- 'combinations' => combinations,
32
- 'flags' => flags
33
- }
34
- end
35
- end
36
- end
37
- end
@@ -1,56 +0,0 @@
1
- module Fitting
2
- class Documentation
3
- def initialize(tomogram, white_list)
4
- @tomogram = tomogram
5
- @white_list = white_list
6
- end
7
-
8
- def black
9
- if @white_list
10
- all.select do |response|
11
- black?(response)
12
- end
13
- else
14
- []
15
- end
16
- end
17
-
18
- def white
19
- if @white_list
20
- all.select do |response|
21
- white?(response)
22
- end
23
- else
24
- all
25
- end
26
- end
27
-
28
- def all
29
- @all ||= @tomogram.to_hash.each_with_object([]) do |request, routes|
30
- responses(request).map do |status, indexes|
31
- indexes.times do |index|
32
- route = "#{request['method']}\t#{request['path']} #{status} #{index}"
33
- routes.push(route)
34
- end
35
- end
36
- end.uniq
37
- end
38
-
39
- def responses(request)
40
- request['responses'].each_with_object({}) do |response, responses|
41
- responses[response['status']] ||= 0
42
- responses[response['status']] += 1
43
- end
44
- end
45
-
46
- def black?(response)
47
- data = response.split(' ')
48
- data[1] && !@white_list[data[1]] || (@white_list[data[1]] != [] && !@white_list[data[1]].include?(data[0]))
49
- end
50
-
51
- def white?(response)
52
- data = response.split(' ')
53
- data[1] && @white_list[data[1]] && (@white_list[data[1]] == [] || @white_list[data[1]].include?(data[0]))
54
- end
55
- end
56
- end