fitting 2.13.1 → 2.14.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 +5 -5
- data/.rubocop.yml +1 -1
- data/.ruby-version +1 -1
- data/.tool-versions +1 -1
- data/.travis.yml +1 -1
- data/CHANGELOG.md +23 -0
- data/README.md +127 -84
- data/lib/fitting/records/spherical/requests.rb +3 -1
- data/lib/fitting/report/action.rb +53 -0
- data/lib/fitting/report/actions.rb +55 -0
- data/lib/fitting/report/combination.rb +37 -0
- data/lib/fitting/report/combinations.rb +47 -0
- data/lib/fitting/report/console.rb +41 -0
- data/lib/fitting/report/prefix.rb +53 -0
- data/lib/fitting/report/prefixes.rb +44 -0
- data/lib/fitting/report/response.rb +71 -0
- data/lib/fitting/report/responses.rb +48 -0
- data/lib/fitting/report/test.rb +61 -0
- data/lib/fitting/report/tests.rb +62 -0
- data/lib/fitting/tests.rb +0 -1
- data/lib/fitting/version.rb +1 -1
- data/lib/tasks/fitting.rake +65 -31
- data/lib/templates/bomboniere/.gitignore +21 -0
- data/lib/templates/bomboniere/.tool-versions +1 -0
- data/lib/templates/bomboniere/README.md +19 -0
- data/lib/templates/bomboniere/dist/css/app.62e086ac.css +1 -0
- data/lib/templates/bomboniere/dist/css/chunk-vendors.ec5f6c3f.css +1 -0
- data/lib/templates/bomboniere/dist/favicon.ico +0 -0
- data/lib/templates/bomboniere/dist/index.html +1 -0
- data/lib/templates/bomboniere/dist/js/app.4356d509.js +2 -0
- data/lib/templates/bomboniere/dist/js/app.4356d509.js.map +1 -0
- data/lib/templates/bomboniere/dist/js/chunk-vendors.90aeb613.js +13 -0
- data/lib/templates/bomboniere/dist/js/chunk-vendors.90aeb613.js.map +1 -0
- data/lib/templates/bomboniere/package-lock.json +9263 -0
- data/lib/templates/bomboniere/package.json +25 -0
- data/lib/templates/bomboniere/public/favicon.ico +0 -0
- data/lib/templates/bomboniere/public/index.html +17 -0
- data/lib/templates/bomboniere/src/App.vue +102 -0
- data/lib/templates/bomboniere/src/assets/logo.png +0 -0
- data/lib/templates/bomboniere/src/components/HelloWorld.vue +188 -0
- data/lib/templates/bomboniere/src/main.js +10 -0
- data/lib/templates/bomboniere/src/router/index.js +31 -0
- data/lib/templates/bomboniere/src/views/About.vue +5 -0
- data/lib/templates/bomboniere/src/views/Action.vue +154 -0
- data/lib/templates/bomboniere/src/views/Home.vue +17 -0
- data/lib/templates/bomboniere/vue.config.js +3 -0
- metadata +38 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 036f174c7154d494520197fefae664cf6086fb47feaad76f091d25f194016ce8
|
4
|
+
data.tar.gz: 339e5f12a4a85e86f10bb112bdf23231d9f0af5bbc6a2fba0145f344a37802da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dde3886c4f56bcab60b00f91f0a3c129676f430b2c3c5c3687a08fe28c207474e3076d21780e8f9adb2a2c6f6e0bc02f490a4101d77394ed2d92ec5f9687f9cd
|
7
|
+
data.tar.gz: f2d6bc93bed0cfe10d0fadb3bb528e837cb4b9867e479991e2f71f772f961113a937c9559903435b55b64d3c2993a275872b804f31fb09c077d252db7d9fb8b2
|
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.3.0
|
data/.tool-versions
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby 2.
|
1
|
+
ruby 2.3.0
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,28 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
### 2.14.0 - 2020-09-18
|
4
|
+
|
5
|
+
* features
|
6
|
+
* save tests for all prefixes [#35](https://github.com/funbox/fitting/issues/35)
|
7
|
+
* prefix checking [#37](https://github.com/funbox/fitting/issues/37)
|
8
|
+
* html view for prefix checking [#39](https://github.com/funbox/fitting/issues/39)
|
9
|
+
* add actions join in new html report [#41](https://github.com/funbox/fitting/issues/41)
|
10
|
+
* add responses join in new report [#43](https://github.com/funbox/fitting/issues/43)
|
11
|
+
* add combinations join in new report [#47](https://github.com/funbox/fitting/issues/47)
|
12
|
+
* add action page [#49](https://github.com/funbox/fitting/issues/49)
|
13
|
+
* show more information in new report [#51](https://github.com/funbox/fitting/issues/51)
|
14
|
+
* add accordion for prefixes [#55](https://github.com/funbox/fitting/issues/55)
|
15
|
+
* move json-schemas to separate files [#57](https://github.com/funbox/fitting/issues/57)
|
16
|
+
* add method for tests without actions [#61](https://github.com/funbox/fitting/issues/61)
|
17
|
+
* show tests without responses [#63](https://github.com/funbox/fitting/issues/63)
|
18
|
+
* add console output for new report [#69](https://github.com/funbox/fitting/issues/69)
|
19
|
+
* check test in new console [#71](https://github.com/funbox/fitting/issues/71)
|
20
|
+
* fixes
|
21
|
+
* fix vulnerability CVE-2020-7660 [#53](https://github.com/funbox/fitting/issues/53)
|
22
|
+
* fix cover if response without combinations [#59](https://github.com/funbox/fitting/issues/59)
|
23
|
+
* fix cover if combinations without tests [#66](https://github.com/funbox/fitting/issues/66)
|
24
|
+
* do not check tests without combinations [#73](https://github.com/funbox/fitting/issues/73)
|
25
|
+
|
3
26
|
### 2.13.1 - 2020-04-17
|
4
27
|
|
5
28
|
* fixes
|
data/README.md
CHANGED
@@ -1,42 +1,42 @@
|
|
1
1
|
# Fitting
|
2
2
|
|
3
|
-
<a href="https://funbox.ru">
|
4
|
-
<img src="https://funbox.ru/badges/sponsored_by_funbox_compact.svg" alt="Sponsored by FunBox" width=250 />
|
5
|
-
</a>
|
6
|
-
|
7
3
|
[](https://badge.fury.io/rb/fitting)
|
8
4
|
[](https://travis-ci.org/funbox/fitting)
|
9
5
|
|
10
6
|
This gem will help you implement your API in strict accordance to the documentation in [API Blueprint](https://apiblueprint.org/) format.
|
11
|
-
To do this, when you run your RSpec tests on controllers, it automatically searches for the corresponding
|
7
|
+
To do this, when you run your RSpec tests on controllers, it automatically searches for the corresponding JSON-schemas in the documentation and then validates responses with them.
|
12
8
|
|
13
9
|
## Installation
|
14
10
|
|
15
11
|
First you need to install [drafter](https://github.com/apiaryio/drafter).
|
16
12
|
|
17
|
-
|
13
|
+
Then add this line to your application's Gemfile:
|
18
14
|
|
19
15
|
```ruby
|
20
16
|
gem 'fitting'
|
21
17
|
```
|
22
18
|
|
23
|
-
|
19
|
+
After that execute:
|
24
20
|
|
25
|
-
|
21
|
+
```bash
|
22
|
+
$ bundle
|
23
|
+
```
|
26
24
|
|
27
|
-
Or install
|
25
|
+
Or install the gem by yourself:
|
28
26
|
|
29
|
-
|
27
|
+
```bash
|
28
|
+
$ gem install fitting
|
29
|
+
```
|
30
30
|
|
31
31
|
## Usage
|
32
32
|
|
33
|
-
|
33
|
+
Add this to your `.fitting.yml`:
|
34
34
|
|
35
35
|
```yaml
|
36
36
|
apib_path: /path/to/doc.apib
|
37
37
|
```
|
38
38
|
|
39
|
-
|
39
|
+
And this to your `spec_helper.rb`:
|
40
40
|
|
41
41
|
```ruby
|
42
42
|
require 'fitting'
|
@@ -44,11 +44,11 @@ require 'fitting'
|
|
44
44
|
Fitting.save_test_data
|
45
45
|
```
|
46
46
|
|
47
|
-
The files will be created in
|
47
|
+
The result files will be created in `./fitting_tests/` folder.
|
48
48
|
|
49
|
-
|
49
|
+
Output example:
|
50
50
|
|
51
|
-
```
|
51
|
+
```json
|
52
52
|
[
|
53
53
|
{
|
54
54
|
"method": "GET",
|
@@ -75,30 +75,45 @@ Example:
|
|
75
75
|
},
|
76
76
|
"title": "/spec/controllers/api/v1/books_controller_spec.rb:22",
|
77
77
|
"group": "/spec/controllers/api/v1/books_controller_spec.rb"
|
78
|
-
}
|
79
|
-
|
78
|
+
}
|
79
|
+
]
|
80
80
|
```
|
81
81
|
|
82
|
+
## Documentation coverage
|
83
|
+
|
84
|
+
To match routes and validate JSON-schemas run:
|
82
85
|
|
83
|
-
|
86
|
+
```bash
|
87
|
+
rake fitting:documentation_responses[report_size]
|
88
|
+
```
|
84
89
|
|
85
|
-
|
90
|
+
There are four types (or `report_size`) of reports available:
|
91
|
+
|
92
|
+
- `xs` — the smallest report;
|
93
|
+
- `s` — includes coverage for `required` fields;
|
94
|
+
- `m` — includes coverage for `required` and `enum` fields;
|
95
|
+
- `l` — includes coverage for `required`, `enum` and `oneOf` fields.
|
86
96
|
|
87
|
-
|
97
|
+
E.g. for `xs` size:
|
88
98
|
|
89
|
-
|
90
|
-
```
|
99
|
+
```bash
|
91
100
|
rake fitting:documentation_responses[xs]
|
92
101
|
```
|
93
102
|
|
94
|
-
|
95
|
-
|
103
|
+
**Note**: In zsh you should add quotes around the task:
|
104
|
+
|
105
|
+
```bash
|
96
106
|
rake 'fitting:documentation_responses[xs]'
|
97
107
|
```
|
98
108
|
|
99
|
-
|
109
|
+
Also you can use `documentation_responses_error` to get more detailed errors description.
|
110
|
+
Check the examples below.
|
100
111
|
|
101
|
-
|
112
|
+
### Examples
|
113
|
+
|
114
|
+
`xs` size:
|
115
|
+
|
116
|
+
```text
|
102
117
|
Fully conforming requests:
|
103
118
|
DELETE /api/v1/book ✔ 200 ✔ 201 ✔ 404
|
104
119
|
DELETE /api/v1/book/{id} ✔ 200 ✔ 201 ✔ 404
|
@@ -122,11 +137,9 @@ API responses conforming to the blueprint: 16 (64.00% of 25).
|
|
122
137
|
API responses with validation errors or untested: 9 (36.00% of 25).
|
123
138
|
```
|
124
139
|
|
125
|
-
|
126
|
-
|
127
|
-
In addition to the previous comand, you will learn the coverage(required) json-schemas with task `rake fitting:documentation_responses[s]`
|
140
|
+
`s` size:
|
128
141
|
|
129
|
-
```
|
142
|
+
```text
|
130
143
|
Fully conforming requests:
|
131
144
|
DELETE /api/v1/book 100% 200 100% 201 100% 404
|
132
145
|
DELETE /api/v1/book/{id} 100% 200 100% 201 100% 404
|
@@ -150,7 +163,7 @@ API responses conforming to the blueprint: 16 (64.00% of 25).
|
|
150
163
|
API responses with validation errors or untested: 9 (36.00% of 25).
|
151
164
|
```
|
152
165
|
|
153
|
-
|
166
|
+
`documentation_responses_error[s]` example:
|
154
167
|
|
155
168
|
```
|
156
169
|
request method: GET
|
@@ -161,68 +174,79 @@ combination: ["required", "pages"]
|
|
161
174
|
new json-schema: {"$schema"=>"http://json-schema.org/draft-04/schema#", "type"=>"object", ...}
|
162
175
|
```
|
163
176
|
|
164
|
-
###
|
177
|
+
### Experimental report
|
165
178
|
|
166
|
-
|
167
|
-
For details `rake fitting:documentation_responses_error[m]`
|
179
|
+
This report will be available and properly documented in the next major update, but you already can try it by running:
|
168
180
|
|
169
|
-
|
181
|
+
```bash
|
182
|
+
bundle e rake fitting:report
|
183
|
+
```
|
170
184
|
|
171
|
-
|
172
|
-
|
185
|
+
Using this you can document API prefixes.
|
186
|
+
The task will create JSON (`fitting/report.json`) and HTML (`fitting/index.html`) reports.
|
173
187
|
|
174
|
-
##
|
188
|
+
## Tests coverage
|
175
189
|
|
176
|
-
|
190
|
+
Only `xs` size is available for tests coverage:
|
177
191
|
|
178
|
-
|
192
|
+
```bash
|
193
|
+
rake fitting:tests_responses[xs]
|
194
|
+
```
|
179
195
|
|
180
196
|
## Config
|
181
197
|
|
182
|
-
You can specify the settings either in a
|
183
|
-
If your project uses several prefixes, for each one you
|
198
|
+
You can specify the settings either in a YAML file `.fitting.yml` or in a config.
|
199
|
+
If your project uses several prefixes, for each one you should create a separate YAML file in the folder `fitting` (`fitting/*.yml`).
|
200
|
+
|
201
|
+
All the available config options are described below.
|
184
202
|
|
185
|
-
### apib_path
|
203
|
+
### `apib_path`
|
186
204
|
|
187
|
-
Path to API Blueprint v3 documentation.
|
205
|
+
Path to API Blueprint v3 documentation.
|
206
|
+
There must be an installed [drafter](https://github.com/apiaryio/drafter) to parse it.
|
188
207
|
|
189
|
-
### drafter_yaml_path
|
208
|
+
### `drafter_yaml_path`
|
190
209
|
|
191
|
-
Path to API Blueprint v3 documentation pre-parsed with `drafter` and saved to a YAML file.
|
210
|
+
Path to API Blueprint v3 documentation, pre-parsed with `drafter` and saved to a YAML file.
|
192
211
|
|
193
|
-
### drafter_4_apib_path
|
212
|
+
### `drafter_4_apib_path`
|
194
213
|
|
195
|
-
Path to API Blueprint v4 documentation.
|
214
|
+
Path to API Blueprint v4 documentation.
|
215
|
+
There must be an installed [drafter](https://github.com/apiaryio/drafter) to parse it.
|
196
216
|
|
197
|
-
### drafter_4_yaml_path
|
217
|
+
### `drafter_4_yaml_path`
|
198
218
|
|
199
|
-
Path to API Blueprint v4 documentation pre-parsed with `drafter` and saved to a YAML file.
|
219
|
+
Path to API Blueprint v4 documentation, pre-parsed with `drafter` and saved to a YAML file.
|
200
220
|
|
201
|
-
### crafter_apib_path
|
221
|
+
### `crafter_apib_path`
|
202
222
|
|
203
223
|
Path to API Blueprint v4 documentation.
|
204
224
|
|
205
|
-
### crafter_yaml_path
|
225
|
+
### `crafter_yaml_path`
|
206
226
|
|
207
|
-
Path to API Blueprint v4 documentation pre-parsed with `crafter` and saved to a YAML file.
|
227
|
+
Path to API Blueprint v4 documentation, pre-parsed with `crafter` and saved to a YAML file.
|
208
228
|
|
209
|
-
### tomogram_json_path
|
229
|
+
### `tomogram_json_path`
|
210
230
|
|
211
|
-
Path to Tomogram documentation pre-parsed with [tomograph](https://github.com/funbox/tomograph) and saved to a JSON file.
|
231
|
+
Path to Tomogram documentation, pre-parsed with [tomograph](https://github.com/funbox/tomograph) and saved to a JSON file.
|
212
232
|
|
213
|
-
### strict
|
233
|
+
### `strict`
|
214
234
|
|
215
|
-
Default `false
|
235
|
+
Default: `false`
|
216
236
|
|
217
|
-
|
237
|
+
When `true` all properties are considered to have `"required": true` and all objects are considered to have `"additionalProperties": false`.
|
218
238
|
|
219
|
-
|
239
|
+
### `prefix`
|
220
240
|
|
221
|
-
|
241
|
+
Prefix for API requests. E.g. `'/api'`. Validation will not be performed if the request path does not start with a prefix.
|
222
242
|
|
223
|
-
|
224
|
-
|
225
|
-
|
243
|
+
### `white_list`
|
244
|
+
|
245
|
+
Default: all paths
|
246
|
+
|
247
|
+
This is an array of paths that are mandatory for implementation.
|
248
|
+
The list does not affect the work of the matcher.
|
249
|
+
It's used for the CLI report only.
|
226
250
|
|
227
251
|
```yaml
|
228
252
|
white_list:
|
@@ -237,13 +261,15 @@ white_list:
|
|
237
261
|
/sessions: []
|
238
262
|
```
|
239
263
|
|
240
|
-
Empty array `[]` means all methods.
|
264
|
+
Empty array (`[]`) means all methods.
|
241
265
|
|
242
|
-
### resource_white_list
|
266
|
+
### `resource_white_list`
|
243
267
|
|
244
|
-
Default: all resources
|
245
|
-
|
246
|
-
This
|
268
|
+
Default: all resources
|
269
|
+
|
270
|
+
This is an array of resources that are mandatory for implementation.
|
271
|
+
The list does not affect the work of the matcher.
|
272
|
+
It's used for the CLI report only.
|
247
273
|
|
248
274
|
```yaml
|
249
275
|
resource_white_list:
|
@@ -257,31 +283,35 @@ resource_white_list:
|
|
257
283
|
/sessions: []
|
258
284
|
```
|
259
285
|
|
260
|
-
Empty array `[]` means all methods.
|
286
|
+
Empty array (`[]`) means all methods.
|
287
|
+
|
288
|
+
### `json_schema_cover`
|
289
|
+
|
290
|
+
Default: false
|
261
291
|
|
262
|
-
|
292
|
+
JSON-schema covering becomes mandatory.
|
293
|
+
However, if you don't use `Fitting.statistics` you can call `responses.statistics.cover_save`.
|
263
294
|
|
264
|
-
|
265
|
-
Or you can call `responses.statistics.cover_save` if you don't use call `Fitting.statistics`.
|
295
|
+
### `include_resources`
|
266
296
|
|
267
|
-
|
297
|
+
Default: all resources (but only when `include_resources` and `include_actions` are not defined)
|
268
298
|
|
269
|
-
Default: all resources if `include_resources` and `include_actions` is not used.
|
270
299
|
This is an array of resources that are mandatory for implementation.
|
271
|
-
|
272
|
-
|
300
|
+
The list does not affect the work of the matcher.
|
301
|
+
It's used for the CLI report only.
|
273
302
|
|
274
303
|
```yaml
|
275
304
|
include_resources:
|
276
305
|
- /sessions
|
277
306
|
```
|
278
307
|
|
279
|
-
### include_actions
|
308
|
+
### `include_actions`
|
309
|
+
|
310
|
+
Default: all paths (but only when `include_resources` and `include_actions` are not defined)
|
280
311
|
|
281
|
-
Default: all paths if `include_resources` and `include_actions` is not used.
|
282
312
|
This is an array of paths that are mandatory for implementation.
|
283
|
-
|
284
|
-
|
313
|
+
The list does not affect the work of the matcher.
|
314
|
+
It's used for the CLI report only.
|
285
315
|
|
286
316
|
```yaml
|
287
317
|
include_actions:
|
@@ -292,9 +322,9 @@ include_actions:
|
|
292
322
|
- GET /users/{id}/employees
|
293
323
|
```
|
294
324
|
|
295
|
-
### ignore_list
|
325
|
+
### `ignore_list`
|
296
326
|
|
297
|
-
You can use ignore list
|
327
|
+
You can use ignore list to omit checks with matchers.
|
298
328
|
|
299
329
|
```yaml
|
300
330
|
ignore_list:
|
@@ -302,12 +332,25 @@ ignore_list:
|
|
302
332
|
- %r{/api/v1/comments}
|
303
333
|
```
|
304
334
|
|
305
|
-
It works only for match_schema
|
335
|
+
It works only for `match_schema` and **not** for `strictly_match_schema`.
|
336
|
+
|
337
|
+
### `prefixes`
|
338
|
+
|
339
|
+
Example:
|
340
|
+
|
341
|
+
```yaml
|
342
|
+
prefixes:
|
343
|
+
- name: /api/v1
|
344
|
+
- name: /api/v2
|
345
|
+
```
|
306
346
|
|
307
347
|
## Contributing
|
308
348
|
|
309
|
-
Bug reports and pull requests are welcome on GitHub at
|
349
|
+
Bug reports and pull requests are welcome on GitHub at [github.com/funbox/fitting](https://github.com/funbox/fitting).
|
350
|
+
This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
310
351
|
|
311
352
|
## License
|
312
353
|
|
313
354
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
355
|
+
|
356
|
+
[](https://funbox.ru)
|
@@ -13,7 +13,9 @@ module Fitting
|
|
13
13
|
array += JSON.load(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
|
+
next res unless request.path.to_s.start_with?(Fitting.configuration.prefix)
|
18
|
+
res.push(request)
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'fitting/report/responses'
|
2
|
+
|
3
|
+
module Fitting
|
4
|
+
module Report
|
5
|
+
class Action
|
6
|
+
def initialize(action)
|
7
|
+
@action = action
|
8
|
+
@tests = Fitting::Report::Tests.new([])
|
9
|
+
@responses = Fitting::Report::Responses.new(@action.responses)
|
10
|
+
end
|
11
|
+
|
12
|
+
def method
|
13
|
+
@action.method
|
14
|
+
end
|
15
|
+
|
16
|
+
def path
|
17
|
+
@action.path.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def responses
|
21
|
+
@responses
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_test(test)
|
25
|
+
@tests.push(test)
|
26
|
+
end
|
27
|
+
|
28
|
+
def path_match(find_path)
|
29
|
+
regexp =~ find_path
|
30
|
+
end
|
31
|
+
|
32
|
+
def regexp
|
33
|
+
return @regexp if @regexp
|
34
|
+
|
35
|
+
str = Regexp.escape(path)
|
36
|
+
str = str.gsub(/\\{\w+\\}/, '[^&=\/]+')
|
37
|
+
str = "\\A#{str}\\z"
|
38
|
+
@regexp = Regexp.new(str)
|
39
|
+
end
|
40
|
+
|
41
|
+
def tests
|
42
|
+
@tests
|
43
|
+
end
|
44
|
+
|
45
|
+
def details
|
46
|
+
{
|
47
|
+
tests_without_responses: @tests.without_responses,
|
48
|
+
responses_details: @responses.to_a.map { |r| {method: r.status, tests_size: r.tests.size, json_schema: r.id, combinations: r.details} }
|
49
|
+
}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|