@redocly/openapi-core 1.0.0-beta.126 → 1.0.0-beta.128

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.
Files changed (289) hide show
  1. package/lib/bundle.js +21 -4
  2. package/lib/config/all.js +1 -0
  3. package/lib/config/config-resolvers.js +8 -2
  4. package/lib/config/minimal.js +1 -0
  5. package/lib/config/recommended.js +1 -0
  6. package/lib/config/types.d.ts +1 -1
  7. package/lib/config/utils.js +15 -1
  8. package/lib/lint.js +17 -2
  9. package/lib/rules/common/spec-strict-refs.d.ts +2 -0
  10. package/lib/rules/common/spec-strict-refs.js +30 -0
  11. package/lib/rules/common/spec.js +1 -0
  12. package/lib/rules/oas2/index.d.ts +1 -0
  13. package/lib/rules/oas2/index.js +2 -0
  14. package/lib/rules/oas2/request-mime-type.d.ts +1 -1
  15. package/lib/rules/oas2/response-mime-type.d.ts +1 -1
  16. package/lib/rules/oas3/index.js +2 -0
  17. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +2 -2
  18. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +3 -3
  19. package/lib/rules/oas3/request-mime-type.d.ts +1 -1
  20. package/lib/rules/oas3/response-mime-type.d.ts +1 -1
  21. package/lib/rules/oas3/spec-components-invalid-map-name.js +0 -5
  22. package/lib/types/redocly-yaml.js +6 -1
  23. package/lib/walk.d.ts +6 -5
  24. package/lib/walk.js +26 -31
  25. package/package.json +1 -1
  26. package/__tests__/utils.ts +0 -88
  27. package/src/__tests__/__snapshots__/bundle.test.ts.snap +0 -437
  28. package/src/__tests__/bundle.test.ts +0 -236
  29. package/src/__tests__/codeframes.test.ts +0 -530
  30. package/src/__tests__/fixtures/.redocly.lint-ignore.yaml +0 -5
  31. package/src/__tests__/fixtures/extension.js +0 -24
  32. package/src/__tests__/fixtures/refs/definitions.yaml +0 -3
  33. package/src/__tests__/fixtures/refs/examples.yaml +0 -8
  34. package/src/__tests__/fixtures/refs/external-request-body.yaml +0 -13
  35. package/src/__tests__/fixtures/refs/externalref.yaml +0 -35
  36. package/src/__tests__/fixtures/refs/hosted.yaml +0 -35
  37. package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
  38. package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
  39. package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +0 -18
  40. package/src/__tests__/fixtures/refs/param-b.yaml +0 -1
  41. package/src/__tests__/fixtures/refs/param-c.yaml +0 -1
  42. package/src/__tests__/fixtures/refs/rename.yaml +0 -1
  43. package/src/__tests__/fixtures/refs/requestBody.yaml +0 -9
  44. package/src/__tests__/fixtures/refs/schema-a.yaml +0 -1
  45. package/src/__tests__/fixtures/refs/simple.yaml +0 -1
  46. package/src/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
  47. package/src/__tests__/fixtures/resolve/External.yaml +0 -10
  48. package/src/__tests__/fixtures/resolve/External2.yaml +0 -4
  49. package/src/__tests__/fixtures/resolve/description.md +0 -3
  50. package/src/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
  51. package/src/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
  52. package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
  53. package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
  54. package/src/__tests__/fixtures/resolve/openapi.yaml +0 -28
  55. package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
  56. package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
  57. package/src/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
  58. package/src/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
  59. package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
  60. package/src/__tests__/format.test.ts +0 -76
  61. package/src/__tests__/js-yaml.test.ts +0 -73
  62. package/src/__tests__/lint.test.ts +0 -388
  63. package/src/__tests__/logger-browser.test.ts +0 -53
  64. package/src/__tests__/logger.test.ts +0 -47
  65. package/src/__tests__/login.test.ts +0 -17
  66. package/src/__tests__/normalizeVisitors.test.ts +0 -151
  67. package/src/__tests__/output-browser.test.ts +0 -18
  68. package/src/__tests__/output.test.ts +0 -15
  69. package/src/__tests__/ref-utils.test.ts +0 -120
  70. package/src/__tests__/resolve-http.test.ts +0 -77
  71. package/src/__tests__/resolve.test.ts +0 -430
  72. package/src/__tests__/utils-browser.test.ts +0 -11
  73. package/src/__tests__/utils.test.ts +0 -144
  74. package/src/__tests__/walk.test.ts +0 -1545
  75. package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
  76. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
  77. package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
  78. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -35
  79. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
  80. package/src/benchmark/benches/rebilly.yaml +0 -32275
  81. package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
  82. package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
  83. package/src/benchmark/benchmark.js +0 -311
  84. package/src/benchmark/colors.js +0 -29
  85. package/src/benchmark/fork.js +0 -83
  86. package/src/benchmark/utils.ts +0 -36
  87. package/src/bundle.ts +0 -399
  88. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -161
  89. package/src/config/__tests__/__snapshots__/config.test.ts.snap +0 -144
  90. package/src/config/__tests__/config-resolvers.test.ts +0 -491
  91. package/src/config/__tests__/config.test.ts +0 -307
  92. package/src/config/__tests__/fixtures/ingore-file.ts +0 -8
  93. package/src/config/__tests__/fixtures/load-redocly.yaml +0 -2
  94. package/src/config/__tests__/fixtures/plugin-config.yaml +0 -2
  95. package/src/config/__tests__/fixtures/plugin.js +0 -56
  96. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -11
  97. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -69
  98. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -7
  99. package/src/config/__tests__/fixtures/resolve-config/local-config-with-custom-function.yaml +0 -17
  100. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -18
  101. package/src/config/__tests__/fixtures/resolve-config/local-config-with-wrong-custom-function.yaml +0 -15
  102. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -9
  103. package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -80
  104. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -3
  105. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -4
  106. package/src/config/__tests__/load.test.ts +0 -167
  107. package/src/config/__tests__/resolve-plugins.test.ts +0 -27
  108. package/src/config/__tests__/utils.test.ts +0 -204
  109. package/src/config/all.ts +0 -73
  110. package/src/config/builtIn.ts +0 -37
  111. package/src/config/config-resolvers.ts +0 -465
  112. package/src/config/config.ts +0 -330
  113. package/src/config/index.ts +0 -7
  114. package/src/config/load.ts +0 -144
  115. package/src/config/minimal.ts +0 -60
  116. package/src/config/recommended.ts +0 -60
  117. package/src/config/rules.ts +0 -54
  118. package/src/config/types.ts +0 -216
  119. package/src/config/utils.ts +0 -333
  120. package/src/decorators/__tests__/filter-in.test.ts +0 -310
  121. package/src/decorators/__tests__/filter-out.test.ts +0 -335
  122. package/src/decorators/__tests__/media-type-examples-override.test.ts +0 -665
  123. package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
  124. package/src/decorators/__tests__/resources/request.yaml +0 -3
  125. package/src/decorators/__tests__/resources/response.yaml +0 -3
  126. package/src/decorators/common/filters/filter-helper.ts +0 -72
  127. package/src/decorators/common/filters/filter-in.ts +0 -18
  128. package/src/decorators/common/filters/filter-out.ts +0 -18
  129. package/src/decorators/common/info-description-override.ts +0 -24
  130. package/src/decorators/common/info-override.ts +0 -15
  131. package/src/decorators/common/media-type-examples-override.ts +0 -79
  132. package/src/decorators/common/operation-description-override.ts +0 -30
  133. package/src/decorators/common/registry-dependencies.ts +0 -25
  134. package/src/decorators/common/remove-x-internal.ts +0 -59
  135. package/src/decorators/common/tag-description-override.ts +0 -25
  136. package/src/decorators/oas2/index.ts +0 -20
  137. package/src/decorators/oas3/index.ts +0 -22
  138. package/src/env.ts +0 -5
  139. package/src/format/codeframes.ts +0 -216
  140. package/src/format/format.ts +0 -375
  141. package/src/index.ts +0 -71
  142. package/src/js-yaml/index.ts +0 -14
  143. package/src/lint.ts +0 -130
  144. package/src/logger.ts +0 -34
  145. package/src/oas-types.ts +0 -57
  146. package/src/output.ts +0 -7
  147. package/src/redocly/__tests__/redocly-client.test.ts +0 -146
  148. package/src/redocly/index.ts +0 -187
  149. package/src/redocly/redocly-client-types.ts +0 -10
  150. package/src/redocly/registry-api-types.ts +0 -32
  151. package/src/redocly/registry-api.ts +0 -149
  152. package/src/ref-utils.ts +0 -85
  153. package/src/resolve.ts +0 -417
  154. package/src/rules/__tests__/fixtures/code-sample.php +0 -9
  155. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
  156. package/src/rules/__tests__/fixtures/ref.yaml +0 -1
  157. package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -257
  158. package/src/rules/__tests__/utils.test.ts +0 -160
  159. package/src/rules/ajv.ts +0 -102
  160. package/src/rules/common/__tests__/info-license.test.ts +0 -62
  161. package/src/rules/common/__tests__/license-url.test.ts +0 -63
  162. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
  163. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -210
  164. package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
  165. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
  166. package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -192
  167. package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -231
  168. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
  169. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
  170. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
  171. package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
  172. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
  173. package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
  174. package/src/rules/common/__tests__/path-params-defined.test.ts +0 -202
  175. package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
  176. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +0 -264
  177. package/src/rules/common/__tests__/security-defined.test.ts +0 -175
  178. package/src/rules/common/__tests__/spec.test.ts +0 -555
  179. package/src/rules/common/__tests__/tag-description.test.ts +0 -65
  180. package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
  181. package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -869
  182. package/src/rules/common/assertions/__tests__/index.test.ts +0 -100
  183. package/src/rules/common/assertions/__tests__/utils.test.ts +0 -236
  184. package/src/rules/common/assertions/asserts.ts +0 -357
  185. package/src/rules/common/assertions/index.ts +0 -56
  186. package/src/rules/common/assertions/utils.ts +0 -331
  187. package/src/rules/common/info-contact.ts +0 -15
  188. package/src/rules/common/info-license-url.ts +0 -10
  189. package/src/rules/common/info-license.ts +0 -15
  190. package/src/rules/common/no-ambiguous-paths.ts +0 -50
  191. package/src/rules/common/no-enum-type-mismatch.ts +0 -52
  192. package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
  193. package/src/rules/common/no-identical-paths.ts +0 -24
  194. package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
  195. package/src/rules/common/no-invalid-schema-examples.ts +0 -27
  196. package/src/rules/common/no-path-trailing-slash.ts +0 -15
  197. package/src/rules/common/operation-2xx-response.ts +0 -24
  198. package/src/rules/common/operation-4xx-response.ts +0 -24
  199. package/src/rules/common/operation-description.ts +0 -13
  200. package/src/rules/common/operation-operationId-unique.ts +0 -21
  201. package/src/rules/common/operation-operationId-url-safe.ts +0 -19
  202. package/src/rules/common/operation-operationId.ts +0 -17
  203. package/src/rules/common/operation-parameters-unique.ts +0 -48
  204. package/src/rules/common/operation-singular-tag.ts +0 -17
  205. package/src/rules/common/operation-summary.ts +0 -13
  206. package/src/rules/common/operation-tag-defined.ts +0 -26
  207. package/src/rules/common/parameter-description.ts +0 -22
  208. package/src/rules/common/path-declaration-must-exist.ts +0 -15
  209. package/src/rules/common/path-excludes-patterns.ts +0 -23
  210. package/src/rules/common/path-http-verbs-order.ts +0 -30
  211. package/src/rules/common/path-not-include-query.ts +0 -17
  212. package/src/rules/common/path-params-defined.ts +0 -65
  213. package/src/rules/common/path-segment-plural.ts +0 -31
  214. package/src/rules/common/paths-kebab-case.ts +0 -19
  215. package/src/rules/common/required-string-property-missing-min-length.ts +0 -44
  216. package/src/rules/common/response-contains-header.ts +0 -35
  217. package/src/rules/common/scalar-property-missing-example.ts +0 -58
  218. package/src/rules/common/security-defined.ts +0 -65
  219. package/src/rules/common/spec.ts +0 -174
  220. package/src/rules/common/tag-description.ts +0 -10
  221. package/src/rules/common/tags-alphabetical.ts +0 -20
  222. package/src/rules/no-unresolved-refs.ts +0 -51
  223. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
  224. package/src/rules/oas2/__tests__/response-contains-header.test.ts +0 -174
  225. package/src/rules/oas2/__tests__/response-contains-property.test.ts +0 -155
  226. package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
  227. package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
  228. package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
  229. package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
  230. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -35
  231. package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
  232. package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
  233. package/src/rules/oas2/index.ts +0 -89
  234. package/src/rules/oas2/remove-unused-components.ts +0 -81
  235. package/src/rules/oas2/request-mime-type.ts +0 -17
  236. package/src/rules/oas2/response-contains-property.ts +0 -36
  237. package/src/rules/oas2/response-mime-type.ts +0 -17
  238. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
  239. package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
  240. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
  241. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
  242. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -473
  243. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
  244. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
  245. package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
  246. package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +0 -145
  247. package/src/rules/oas3/__tests__/response-contains-header.test.ts +0 -389
  248. package/src/rules/oas3/__tests__/response-contains-property.test.ts +0 -403
  249. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
  250. package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
  251. package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
  252. package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
  253. package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
  254. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
  255. package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -505
  256. package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -298
  257. package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
  258. package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +0 -305
  259. package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
  260. package/src/rules/oas3/index.ts +0 -109
  261. package/src/rules/oas3/no-empty-servers.ts +0 -22
  262. package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
  263. package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -49
  264. package/src/rules/oas3/no-server-example.com.ts +0 -14
  265. package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
  266. package/src/rules/oas3/no-server-variables-empty-enum.ts +0 -66
  267. package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
  268. package/src/rules/oas3/no-unused-components.ts +0 -75
  269. package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +0 -36
  270. package/src/rules/oas3/remove-unused-components.ts +0 -95
  271. package/src/rules/oas3/request-mime-type.ts +0 -31
  272. package/src/rules/oas3/response-contains-property.ts +0 -38
  273. package/src/rules/oas3/response-mime-type.ts +0 -31
  274. package/src/rules/oas3/spec-components-invalid-map-name.ts +0 -74
  275. package/src/rules/other/stats.ts +0 -73
  276. package/src/rules/utils.ts +0 -191
  277. package/src/types/index.ts +0 -149
  278. package/src/types/oas2.ts +0 -478
  279. package/src/types/oas3.ts +0 -597
  280. package/src/types/oas3_1.ts +0 -258
  281. package/src/types/redocly-yaml.ts +0 -1010
  282. package/src/typings/common.ts +0 -17
  283. package/src/typings/openapi.ts +0 -298
  284. package/src/typings/swagger.ts +0 -236
  285. package/src/utils.ts +0 -276
  286. package/src/visitors.ts +0 -491
  287. package/src/walk.ts +0 -453
  288. package/tsconfig.json +0 -8
  289. package/tsconfig.tsbuildinfo +0 -1
@@ -1,131 +0,0 @@
1
- import { outdent } from 'outdent';
2
- import { lintDocument } from '../../../lint';
3
- import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils';
4
- import { BaseResolver } from '../../../resolve';
5
-
6
- describe('Oas3 no-unused-components', () => {
7
- it('should report unused components', async () => {
8
- const document = parseYamlToDocument(
9
- outdent`
10
- openapi: "3.0.0"
11
- paths:
12
- /pets:
13
- get:
14
- summary: List all pets
15
- operationId: listPets
16
- parameters:
17
- - $ref: '#/components/parameters/used'
18
- components:
19
- parameters:
20
- used:
21
- name: used
22
- unused:
23
- name: unused
24
- responses:
25
- unused: {}
26
- examples:
27
- unused: {}
28
- requestBodies:
29
- unused: {}
30
- headers:
31
- unused: {}
32
- schemas:
33
- Unused:
34
- type: integer
35
- enum:
36
- - 1
37
- - 2
38
- `,
39
- 'foobar.yaml'
40
- );
41
-
42
- const results = await lintDocument({
43
- externalRefResolver: new BaseResolver(),
44
- document,
45
- config: await makeConfig({ 'no-unused-components': 'error' }),
46
- });
47
-
48
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
49
- Array [
50
- Object {
51
- "location": Array [
52
- Object {
53
- "pointer": "#/components/parameters/unused",
54
- "reportOnKey": true,
55
- "source": "foobar.yaml",
56
- },
57
- ],
58
- "message": "Component: \\"unused\\" is never used.",
59
- "ruleId": "no-unused-components",
60
- "severity": "error",
61
- "suggest": Array [],
62
- },
63
- Object {
64
- "location": Array [
65
- Object {
66
- "pointer": "#/components/schemas/Unused",
67
- "reportOnKey": true,
68
- "source": "foobar.yaml",
69
- },
70
- ],
71
- "message": "Component: \\"Unused\\" is never used.",
72
- "ruleId": "no-unused-components",
73
- "severity": "error",
74
- "suggest": Array [],
75
- },
76
- Object {
77
- "location": Array [
78
- Object {
79
- "pointer": "#/components/responses/unused",
80
- "reportOnKey": true,
81
- "source": "foobar.yaml",
82
- },
83
- ],
84
- "message": "Component: \\"unused\\" is never used.",
85
- "ruleId": "no-unused-components",
86
- "severity": "error",
87
- "suggest": Array [],
88
- },
89
- Object {
90
- "location": Array [
91
- Object {
92
- "pointer": "#/components/examples/unused",
93
- "reportOnKey": true,
94
- "source": "foobar.yaml",
95
- },
96
- ],
97
- "message": "Component: \\"unused\\" is never used.",
98
- "ruleId": "no-unused-components",
99
- "severity": "error",
100
- "suggest": Array [],
101
- },
102
- Object {
103
- "location": Array [
104
- Object {
105
- "pointer": "#/components/requestBodies/unused",
106
- "reportOnKey": true,
107
- "source": "foobar.yaml",
108
- },
109
- ],
110
- "message": "Component: \\"unused\\" is never used.",
111
- "ruleId": "no-unused-components",
112
- "severity": "error",
113
- "suggest": Array [],
114
- },
115
- Object {
116
- "location": Array [
117
- Object {
118
- "pointer": "#/components/headers/unused",
119
- "reportOnKey": true,
120
- "source": "foobar.yaml",
121
- },
122
- ],
123
- "message": "Component: \\"unused\\" is never used.",
124
- "ruleId": "no-unused-components",
125
- "severity": "error",
126
- "suggest": Array [],
127
- },
128
- ]
129
- `);
130
- });
131
- });
@@ -1,145 +0,0 @@
1
- import { outdent } from 'outdent';
2
- import { lintDocument } from '../../../lint';
3
- import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils';
4
- import { BaseResolver } from '../../../resolve';
5
-
6
- describe('Oas3 operation-4xx-problem-details-rfc7807', () => {
7
- it('should report `4xx` must have content type `application/problem+json` ', async () => {
8
- const document = parseYamlToDocument(
9
- outdent`
10
- openapi: "3.0.0"
11
- paths:
12
- /pets:
13
- get:
14
- summary: List all pets
15
- operationId: listPets
16
- responses:
17
- '400':
18
- description: Test
19
- content:
20
- application/json:
21
- schema:
22
- type: object
23
- properties:
24
- type:
25
- type: string
26
- title:
27
- type: string
28
- `,
29
- 'foobar.yaml'
30
- );
31
-
32
- const results = await lintDocument({
33
- externalRefResolver: new BaseResolver(),
34
- document,
35
- config: await makeConfig({ 'operation-4xx-problem-details-rfc7807': 'error' }),
36
- });
37
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
38
- Array [
39
- Object {
40
- "location": Array [
41
- Object {
42
- "pointer": "#/paths/~1pets/get/responses/400",
43
- "reportOnKey": true,
44
- "source": "foobar.yaml",
45
- },
46
- ],
47
- "message": "Response \`4xx\` must have content-type \`application/problem+json\`.",
48
- "ruleId": "operation-4xx-problem-details-rfc7807",
49
- "severity": "error",
50
- "suggest": Array [],
51
- },
52
- ]
53
- `);
54
- });
55
-
56
- it('should report `application/problem+json` must have `type` property', async () => {
57
- const document = parseYamlToDocument(
58
- outdent`
59
- openapi: "3.0.0"
60
- paths:
61
- /pets:
62
- get:
63
- summary: List all pets
64
- operationId: listPets
65
- responses:
66
- '400':
67
- description: Test
68
- content:
69
- application/problem+json:
70
- schema:
71
- type: object
72
- properties:
73
- title:
74
- type: string
75
- `,
76
- 'foobar.yaml'
77
- );
78
-
79
- const results = await lintDocument({
80
- externalRefResolver: new BaseResolver(),
81
- document,
82
- config: await makeConfig({ 'operation-4xx-problem-details-rfc7807': 'error' }),
83
- });
84
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
85
- Array [
86
- Object {
87
- "location": Array [
88
- Object {
89
- "pointer": "#/paths/~1pets/get/responses/400/content/application~1problem+json/schema/properties/type",
90
- "reportOnKey": true,
91
- "source": "foobar.yaml",
92
- },
93
- ],
94
- "message": "SchemaProperties object should contain \`type\` field.",
95
- "ruleId": "operation-4xx-problem-details-rfc7807",
96
- "severity": "error",
97
- "suggest": Array [],
98
- },
99
- ]
100
- `);
101
- });
102
-
103
- it('should report `application/problem+json` must have `schema` property', async () => {
104
- const document = parseYamlToDocument(
105
- outdent`
106
- openapi: "3.0.0"
107
- paths:
108
- /pets:
109
- get:
110
- summary: List all pets
111
- operationId: listPets
112
- responses:
113
- '400':
114
- description: Test
115
- content:
116
- application/problem+json:
117
- example: asd
118
- `,
119
- 'foobar.yaml'
120
- );
121
-
122
- const results = await lintDocument({
123
- externalRefResolver: new BaseResolver(),
124
- document,
125
- config: await makeConfig({ 'operation-4xx-problem-details-rfc7807': 'error' }),
126
- });
127
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
128
- Array [
129
- Object {
130
- "location": Array [
131
- Object {
132
- "pointer": "#/paths/~1pets/get/responses/400/content/application~1problem+json/schema",
133
- "reportOnKey": true,
134
- "source": "foobar.yaml",
135
- },
136
- ],
137
- "message": "MediaType object should contain \`schema\` field.",
138
- "ruleId": "operation-4xx-problem-details-rfc7807",
139
- "severity": "error",
140
- "suggest": Array [],
141
- },
142
- ]
143
- `);
144
- });
145
- });
@@ -1,389 +0,0 @@
1
- import { outdent } from 'outdent';
2
- import { lintDocument } from '../../../lint';
3
- import { parseYamlToDocument, makeConfig } from '../../../../__tests__/utils';
4
- import { BaseResolver } from '../../../resolve';
5
-
6
- describe('Oas3 response-contains-header', () => {
7
- it('should report a response object not containing the header', async () => {
8
- const document = parseYamlToDocument(outdent`
9
- openapi: 3.0.3
10
- info:
11
- version: 3.0.0
12
- paths:
13
- /store/subscribe:
14
- post:
15
- responses:
16
- '200':
17
- description: successful operation
18
- headers:
19
- X-Rate-Limit:
20
- description: calls per hour allowed by the user
21
- schema:
22
- type: integer
23
- format: int32
24
- `);
25
-
26
- const results = await lintDocument({
27
- externalRefResolver: new BaseResolver(),
28
- document,
29
- config: await makeConfig({
30
- 'response-contains-header': {
31
- severity: 'error',
32
- names: { '200': ['Content-Length'] },
33
- },
34
- }),
35
- });
36
- expect(results).toMatchInlineSnapshot(`
37
- Array [
38
- Object {
39
- "location": Array [
40
- Object {
41
- "pointer": "#/paths/~1store~1subscribe/post/responses/200/headers",
42
- "reportOnKey": true,
43
- "source": Source {
44
- "absoluteRef": "",
45
- "body": "openapi: 3.0.3
46
- info:
47
- version: 3.0.0
48
- paths:
49
- /store/subscribe:
50
- post:
51
- responses:
52
- '200':
53
- description: successful operation
54
- headers:
55
- X-Rate-Limit:
56
- description: calls per hour allowed by the user
57
- schema:
58
- type: integer
59
- format: int32",
60
- "mimeType": undefined,
61
- },
62
- },
63
- ],
64
- "message": "Response object must contain a \\"Content-Length\\" header.",
65
- "ruleId": "response-contains-header",
66
- "severity": "error",
67
- "suggest": Array [],
68
- },
69
- ]
70
- `);
71
- });
72
-
73
- it('should report response objects not containing headers for a subset of status codes', async () => {
74
- const document = parseYamlToDocument(outdent`
75
- openapi: 3.0.3
76
- info:
77
- version: 3.0.0
78
- paths:
79
- /store/subscribe:
80
- post:
81
- responses:
82
- '200':
83
- description: successful operation
84
- headers:
85
- X-Rate-Limit:
86
- description: calls per hour allowed by the user
87
- schema:
88
- type: integer
89
- format: int32
90
- 400:
91
- description: error
92
- headers:
93
- AccessForbidden:
94
- description: Access forbidden
95
- content:
96
- application/json:
97
- schema:
98
- type: object
99
- properties:
100
- status:
101
- type: integer
102
- description: The HTTP status code.
103
- error:
104
- type: string
105
- `);
106
- const results = await lintDocument({
107
- externalRefResolver: new BaseResolver(),
108
- document,
109
- config: await makeConfig({
110
- 'response-contains-header': {
111
- severity: 'error',
112
- names: {
113
- '2XX': ['x-request-id'],
114
- '400': ['Content-Length'],
115
- },
116
- },
117
- }),
118
- });
119
- expect(results).toMatchInlineSnapshot(`
120
- Array [
121
- Object {
122
- "location": Array [
123
- Object {
124
- "pointer": "#/paths/~1store~1subscribe/post/responses/200/headers",
125
- "reportOnKey": true,
126
- "source": Source {
127
- "absoluteRef": "",
128
- "body": "openapi: 3.0.3
129
- info:
130
- version: 3.0.0
131
- paths:
132
- /store/subscribe:
133
- post:
134
- responses:
135
- '200':
136
- description: successful operation
137
- headers:
138
- X-Rate-Limit:
139
- description: calls per hour allowed by the user
140
- schema:
141
- type: integer
142
- format: int32
143
- 400:
144
- description: error
145
- headers:
146
- AccessForbidden:
147
- description: Access forbidden
148
- content:
149
- application/json:
150
- schema:
151
- type: object
152
- properties:
153
- status:
154
- type: integer
155
- description: The HTTP status code.
156
- error:
157
- type: string",
158
- "mimeType": undefined,
159
- },
160
- },
161
- ],
162
- "message": "Response object must contain a \\"x-request-id\\" header.",
163
- "ruleId": "response-contains-header",
164
- "severity": "error",
165
- "suggest": Array [],
166
- },
167
- Object {
168
- "location": Array [
169
- Object {
170
- "pointer": "#/paths/~1store~1subscribe/post/responses/400/headers",
171
- "reportOnKey": true,
172
- "source": Source {
173
- "absoluteRef": "",
174
- "body": "openapi: 3.0.3
175
- info:
176
- version: 3.0.0
177
- paths:
178
- /store/subscribe:
179
- post:
180
- responses:
181
- '200':
182
- description: successful operation
183
- headers:
184
- X-Rate-Limit:
185
- description: calls per hour allowed by the user
186
- schema:
187
- type: integer
188
- format: int32
189
- 400:
190
- description: error
191
- headers:
192
- AccessForbidden:
193
- description: Access forbidden
194
- content:
195
- application/json:
196
- schema:
197
- type: object
198
- properties:
199
- status:
200
- type: integer
201
- description: The HTTP status code.
202
- error:
203
- type: string",
204
- "mimeType": undefined,
205
- },
206
- },
207
- ],
208
- "message": "Response object must contain a \\"Content-Length\\" header.",
209
- "ruleId": "response-contains-header",
210
- "severity": "error",
211
- "suggest": Array [],
212
- },
213
- ]
214
- `);
215
- });
216
-
217
- it('should not report response objects containing specified headers', async () => {
218
- const document = parseYamlToDocument(outdent`
219
- openapi: 3.0.3
220
- info:
221
- version: 3.0.0
222
- paths:
223
- /store/subscribe:
224
- post:
225
- responses:
226
- '200':
227
- description: successful operation
228
- headers:
229
- X-Rate-Limit:
230
- description: calls per hour allowed by the user
231
- schema:
232
- type: integer
233
- format: int32
234
- x-request-id:
235
- description: Request ID
236
- schema:
237
- type: string
238
- 400:
239
- description: error
240
- headers:
241
- AccessForbidden:
242
- description: Access forbidden
243
- content:
244
- application/json:
245
- schema:
246
- type: object
247
- properties:
248
- status:
249
- type: integer
250
- description: The HTTP status code.
251
- error:
252
- type: string
253
- Content-Length:
254
- description: The number of bytes in the file
255
- schema:
256
- type: integer
257
- `);
258
- const results = await lintDocument({
259
- externalRefResolver: new BaseResolver(),
260
- document,
261
- config: await makeConfig({
262
- 'response-contains-header': {
263
- severity: 'error',
264
- names: {
265
- '2xx': ['x-request-id'],
266
- '400': ['Content-Length'],
267
- },
268
- },
269
- }),
270
- });
271
- expect(results).toMatchInlineSnapshot(`Array []`);
272
- });
273
-
274
- it('should not report response object containing header name upper cased', async () => {
275
- const document = parseYamlToDocument(outdent`
276
- openapi: 3.0.3
277
- info:
278
- version: 3.0.0
279
- paths:
280
- /store/subscribe:
281
- post:
282
- responses:
283
- '200':
284
- description: successful operation
285
- headers:
286
- X-Test-Header:
287
- description: calls per hour allowed by the user
288
- schema:
289
- type: integer
290
- format: int32
291
- `);
292
-
293
- const results = await lintDocument({
294
- externalRefResolver: new BaseResolver(),
295
- document,
296
- config: await makeConfig({
297
- 'response-contains-header': {
298
- severity: 'error',
299
- names: { '2XX': ['x-test-header'] },
300
- },
301
- }),
302
- });
303
- expect(results).toMatchInlineSnapshot(`Array []`);
304
- });
305
-
306
- it('should not report response object containing header name in the rule upper cased', async () => {
307
- const document = parseYamlToDocument(outdent`
308
- openapi: 3.0.3
309
- info:
310
- version: 3.0.0
311
- paths:
312
- /store/subscribe:
313
- post:
314
- responses:
315
- '200':
316
- description: successful operation
317
- headers:
318
- x-test-header:
319
- description: calls per hour allowed by the user
320
- schema:
321
- type: integer
322
- format: int32
323
- `);
324
-
325
- const results = await lintDocument({
326
- externalRefResolver: new BaseResolver(),
327
- document,
328
- config: await makeConfig({
329
- 'response-contains-header': {
330
- severity: 'error',
331
- names: { '2XX': ['X-Test-Header'] },
332
- },
333
- }),
334
- });
335
- expect(results).toMatchInlineSnapshot(`Array []`);
336
- });
337
-
338
- it('should report even if the response is null', async () => {
339
- const document = parseYamlToDocument(
340
- outdent`
341
- openapi: 3.0.0
342
- paths:
343
- '/test/':
344
- put:
345
- responses:
346
- '200': null
347
- `,
348
- 'foobar.yaml'
349
- );
350
-
351
- const results = await lintDocument({
352
- externalRefResolver: new BaseResolver(),
353
- document,
354
- config: await makeConfig({
355
- 'response-contains-header': {
356
- severity: 'error',
357
- names: { '2XX': ['X-Test-Header'] },
358
- },
359
- }),
360
- });
361
-
362
- expect(results).toMatchInlineSnapshot(`
363
- Array [
364
- Object {
365
- "location": Array [
366
- Object {
367
- "pointer": "#/paths/~1test~1/put/responses/200/headers",
368
- "reportOnKey": true,
369
- "source": Source {
370
- "absoluteRef": "foobar.yaml",
371
- "body": "openapi: 3.0.0
372
- paths:
373
- '/test/':
374
- put:
375
- responses:
376
- '200': null",
377
- "mimeType": undefined,
378
- },
379
- },
380
- ],
381
- "message": "Response object must contain a \\"X-Test-Header\\" header.",
382
- "ruleId": "response-contains-header",
383
- "severity": "error",
384
- "suggest": Array [],
385
- },
386
- ]
387
- `);
388
- });
389
- });