fitting 2.18.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -11
  3. data/CHANGELOG.md +21 -0
  4. data/README.md +46 -6
  5. data/fitting.gemspec +3 -1
  6. data/lib/fitting/configuration.rb +11 -41
  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/combinations.rb +1 -1
  17. data/lib/fitting/report/console.rb +35 -15
  18. data/lib/fitting/report/prefix.rb +20 -41
  19. data/lib/fitting/report/prefixes.rb +7 -8
  20. data/lib/fitting/report/response.rb +0 -3
  21. data/lib/fitting/report/tests.rb +23 -10
  22. data/lib/fitting/storage/responses.rb +5 -9
  23. data/lib/fitting/tests.rb +12 -4
  24. data/lib/fitting/version.rb +1 -1
  25. data/lib/fitting.rb +38 -43
  26. data/lib/tasks/fitting.rake +3 -186
  27. data/lib/tasks/fitting_outgoing.rake +91 -0
  28. metadata +28 -45
  29. data/lib/fitting/configuration/legacy.rb +0 -61
  30. data/lib/fitting/configuration/yaml.rb +0 -89
  31. data/lib/fitting/cover/response.rb +0 -37
  32. data/lib/fitting/documentation.rb +0 -56
  33. data/lib/fitting/matchers/response_matcher.rb +0 -96
  34. data/lib/fitting/records/realized_unit.rb +0 -52
  35. data/lib/fitting/records/test_unit/request.rb +0 -98
  36. data/lib/fitting/records/unit/combination.rb +0 -27
  37. data/lib/fitting/records/unit/json_schema.rb +0 -111
  38. data/lib/fitting/records/unit/request.rb +0 -37
  39. data/lib/fitting/records/unit/response.rb +0 -32
  40. data/lib/fitting/request.rb +0 -38
  41. data/lib/fitting/response/fully_validates.rb +0 -34
  42. data/lib/fitting/response.rb +0 -88
  43. data/lib/fitting/statistics/analysis.rb +0 -25
  44. data/lib/fitting/statistics/cover_error.rb +0 -29
  45. data/lib/fitting/statistics/cover_error_enum.rb +0 -29
  46. data/lib/fitting/statistics/cover_error_one_of.rb +0 -29
  47. data/lib/fitting/statistics/great.rb +0 -13
  48. data/lib/fitting/statistics/list.rb +0 -55
  49. data/lib/fitting/statistics/lists.rb +0 -53
  50. data/lib/fitting/statistics/measurement.rb +0 -92
  51. data/lib/fitting/statistics/measurement_cover.rb +0 -92
  52. data/lib/fitting/statistics/measurement_cover_enum.rb +0 -92
  53. data/lib/fitting/statistics/measurement_cover_one_of.rb +0 -92
  54. data/lib/fitting/statistics/not_covered_responses.rb +0 -13
  55. data/lib/fitting/statistics/percent.rb +0 -20
  56. data/lib/fitting/statistics/requests_stats.rb +0 -40
  57. data/lib/fitting/statistics/responses_stats.rb +0 -32
  58. data/lib/fitting/statistics/template.rb +0 -117
  59. data/lib/fitting/statistics/template_cover_error.rb +0 -50
  60. data/lib/fitting/statistics/template_cover_error_enum.rb +0 -50
  61. data/lib/fitting/statistics/template_cover_error_one_of.rb +0 -50
  62. data/lib/fitting/statistics.rb +0 -25
  63. data/lib/fitting/storage/white_list.rb +0 -158
  64. data/lib/fitting/templates/realized_template.rb +0 -49
  65. data/lib/fitting/view/report.html.haml +0 -16
  66. data/lib/fitting/view/style.css +0 -47
@@ -1,158 +0,0 @@
1
- require 'tomograph'
2
-
3
- module Fitting
4
- module Storage
5
- class WhiteList
6
- def initialize(prefix, white_list, resource_white_list, include_resources, include_actions, resources)
7
- @prefix = prefix
8
- @white_list = white_list
9
- @resource_white_list = resource_white_list
10
- @include_resources = include_resources
11
- @include_actions = include_actions
12
- @resources = resources
13
- @warnings = []
14
- end
15
-
16
- def to_a
17
- return nil if @white_list == nil && @resource_white_list == nil && @include_resources == nil && @include_actions == nil
18
- return @white_list if @white_list
19
- return @white_list = transformation if @resource_white_list
20
-
21
- @white_list = {}
22
- @white_list.merge!(new_transformation) if @include_resources
23
- @white_list.merge!(postnew_transformation) if @include_actions
24
- @white_list
25
- end
26
-
27
- def without_group
28
- return @without_group_list if @without_group_list
29
-
30
- @without_group_list = @resource_white_list.inject([]) do |all_requests, resource|
31
- resource_selection(resource, all_requests)
32
- end.flatten.uniq
33
- puts_warnings
34
- @without_group_list
35
- end
36
-
37
- def resource_selection(resource, all_requests)
38
- if resource[1] == []
39
- find_warnings(resource[0])
40
- requests(@resources[resource[0]], all_requests)
41
- else
42
- requests(resource[1], all_requests)
43
- end
44
- end
45
-
46
- def find_warnings(resource)
47
- return nil if @resources[resource]
48
-
49
- @warnings.push(
50
- "FITTING WARNING: In the documentation there isn't resource from the resource_white_list #{resource}"
51
- )
52
- end
53
-
54
- def puts_warnings
55
- return nil if @warnings == []
56
-
57
- warnings_string = @warnings.join("\n")
58
- puts "\n#{warnings_string}"
59
- end
60
-
61
- def requests(resource, all_requests)
62
- return all_requests unless resource
63
-
64
- resource.map do |request|
65
- all_requests.push(request_hash(request))
66
- end
67
- all_requests
68
- end
69
-
70
- def transformation
71
- result = without_group.group_by { |action| action[:path] }
72
- result.inject({}) do |res, group|
73
- methods = group.last.map { |gr| gr[:method] }
74
- res.merge(group.first => methods)
75
- end
76
- end
77
-
78
- def request_hash(request)
79
- array = request.split(' ')
80
- {
81
- method: array[0],
82
- path: Tomograph::Path.new(array[1]).to_s
83
- }
84
- end
85
-
86
- def new_transformation
87
- @new_resources = {}
88
- @resources.map do |key, value|
89
- @new_resources.merge!(Tomograph::Path.new(key).to_s => value)
90
- end
91
- result = new_without_group.group_by { |action| action[:path] }
92
- result.inject({}) do |res, group|
93
- methods = group.last.map { |gr| gr[:method] }
94
- res.merge(group.first => methods)
95
- end
96
- end
97
-
98
- def new_without_group
99
- return @newwithout_group_list if @newwithout_group_list
100
-
101
- @newwithout_group_list = @include_resources.inject([]) do |all_requests, resource|
102
- if resource[0] == '/'
103
- new_resource_selection(resource, all_requests)
104
- else
105
- new_resource_selection("/#{resource}", all_requests)
106
- end
107
- end.flatten.uniq
108
- puts_warnings
109
- @newwithout_group_list
110
- end
111
-
112
- def new_resource_selection(resource, all_requests)
113
- new_find_warnings(resource)
114
- new_requests(@new_resources[resource], all_requests)
115
- end
116
-
117
- def new_requests(resource, all_requests)
118
- return all_requests unless resource
119
-
120
- resource.map do |request|
121
- all_requests.push(request_hash(request))
122
- end
123
- all_requests
124
- end
125
-
126
- def new_find_warnings(resource)
127
- return nil if @new_resources[resource]
128
-
129
- @warnings.push(
130
- "FITTING WARNING: In the documentation there isn't resource from the resource_white_list #{resource}"
131
- )
132
- end
133
-
134
- def postnew_transformation
135
- result = postnew_without_group.group_by { |action| action[:path] }
136
- result.inject({}) do |res, group|
137
- methods = group.last.map { |gr| gr[:method] }
138
- res.merge(group.first => methods)
139
- end
140
- end
141
-
142
- def postnew_without_group
143
- return @postnewwithout_group_list if @postnewwithout_group_list
144
-
145
- @postnewwithout_group_list = @include_actions.inject([]) do |all_requests, resource|
146
- method, path = resource.split(' ')
147
- if path[0] == '/'
148
- new_requests(["#{method} #{@prefix}#{path}"], all_requests)
149
- else
150
- new_requests(["#{method} #{@prefix}/#{path}"], all_requests)
151
- end
152
- end.flatten.uniq
153
- puts_warnings
154
- @postnewwithout_group_list
155
- end
156
- end
157
- end
158
- end
@@ -1,49 +0,0 @@
1
- module Fitting
2
- class Templates
3
- class RealizedTemplate
4
- def initialize(realized_unit)
5
- @realized_unit = realized_unit
6
- end
7
-
8
- def to_s
9
- res = ''
10
- res += "1. Find request method and path:\n"
11
- @realized_unit.test_file_paths.each do |key, requests|
12
- all_good = requests.all?(&:documented?)
13
- res += "file: #{key} #{all_good ? '✔' : '✖'}\n"
14
- end
15
- res += "\n2. Find response status code:\n"
16
- @realized_unit.test_file_paths.each do |key, requests|
17
- all_good = requests.all?(&:response_documented?)
18
- res += "file: #{key} #{all_good ? '✔' : '✖'}\n"
19
- end
20
- res += "\n3. Find response json-schemas:\n"
21
- @realized_unit.test_file_paths.each do |key, requests|
22
- all_good = requests.all?(&:response_json_schemas?)
23
- res += "file: #{key} #{all_good ? '✔' : '✖'}\n"
24
- end
25
- res += "\n4. Check valid json-schemas:\n"
26
- @realized_unit.test_file_paths.each do |key, requests|
27
- all_good = requests.all?(&:valid_json_schemas?)
28
- res += "path: #{key} #{all_good ? '✔' : '✖'}\n"
29
- next if all_good
30
-
31
- requests.map do |request|
32
- next if request.valid_json_schemas?
33
-
34
- res += " full path: #{request.test_path} ✖\n"
35
- res += " request.method #{request.method}\n"
36
- res += " request.path #{request.path}\n"
37
- res += " request.response.status #{request.response.status}\n"
38
- res += " request.response.body #{request.response.body}\n\n"
39
- request.invalid_json_schemas.map do |schema|
40
- res += " json_schemas: #{schema[:json_schema]}\n"
41
- res += " fully_validate: #{schema[:fully_validate]}\n\n"
42
- end
43
- end
44
- end
45
- res
46
- end
47
- end
48
- end
49
- end
@@ -1,16 +0,0 @@
1
- !!! 5
2
- %html
3
- %head
4
- %title= Time.now
5
- %meta{charset: "utf-8"}
6
- %body
7
- - @to_hash.each do |key, value|
8
- %details
9
- %summary{class: "collapse #{value['type']}"}
10
- = "#{key} #{value['cover']}"
11
- %div{class: 'group'}
12
- %div{class: 'section'}
13
- %div
14
- %b main json-schema
15
- %xmp
16
- = value['json_schema']
@@ -1,47 +0,0 @@
1
- summary {
2
- margin: 10px;
3
- }
4
-
5
- summary:hover {
6
- background: #e1e1e1;
7
- }
8
-
9
- .passed {
10
- color: green;
11
- }
12
-
13
- .failed {
14
- color: red;
15
- }
16
-
17
- .pending {
18
- color: orange;
19
- }
20
-
21
- .collapse {
22
- cursor: pointer;
23
- display: block;
24
- background: white;
25
- }
26
-
27
- .collapse + input {
28
- display: none; /* hide the checkboxes */
29
- }
30
-
31
- .collapse + input + div {
32
- display: none;
33
- }
34
-
35
- .collapse + input:checked + div {
36
- display: block;
37
- }
38
-
39
- .section {
40
- padding-top: 10px;
41
- }
42
-
43
- .group {
44
- border: 1px solid black;
45
- margin: 5px 0px;
46
- padding: 0px 5px;
47
- }