@redocly/openapi-core 1.0.0-beta.125 → 1.0.0-beta.127
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.
- package/lib/bundle.js +5 -2
- package/lib/config/all.js +8 -1
- package/lib/resolve.js +5 -1
- package/lib/rules/common/required-string-property-missing-min-length.d.ts +1 -1
- package/lib/rules/common/required-string-property-missing-min-length.js +3 -3
- package/lib/rules/common/spec.js +1 -0
- package/lib/rules/oas2/index.js +1 -1
- package/lib/rules/oas2/request-mime-type.d.ts +1 -1
- package/lib/rules/oas2/response-mime-type.d.ts +1 -1
- package/lib/rules/oas3/index.js +1 -1
- package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +2 -2
- package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +3 -3
- package/lib/rules/oas3/request-mime-type.d.ts +1 -1
- package/lib/rules/oas3/response-mime-type.d.ts +1 -1
- package/lib/walk.d.ts +6 -5
- package/lib/walk.js +23 -27
- package/package.json +1 -1
- package/__tests__/utils.ts +0 -88
- package/src/__tests__/__snapshots__/bundle.test.ts.snap +0 -437
- package/src/__tests__/bundle.test.ts +0 -236
- package/src/__tests__/codeframes.test.ts +0 -530
- package/src/__tests__/fixtures/.redocly.lint-ignore.yaml +0 -5
- package/src/__tests__/fixtures/extension.js +0 -24
- package/src/__tests__/fixtures/refs/definitions.yaml +0 -3
- package/src/__tests__/fixtures/refs/examples.yaml +0 -8
- package/src/__tests__/fixtures/refs/external-request-body.yaml +0 -13
- package/src/__tests__/fixtures/refs/externalref.yaml +0 -35
- package/src/__tests__/fixtures/refs/hosted.yaml +0 -35
- package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
- package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
- package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +0 -18
- package/src/__tests__/fixtures/refs/param-b.yaml +0 -1
- package/src/__tests__/fixtures/refs/param-c.yaml +0 -1
- package/src/__tests__/fixtures/refs/rename.yaml +0 -1
- package/src/__tests__/fixtures/refs/requestBody.yaml +0 -9
- package/src/__tests__/fixtures/refs/schema-a.yaml +0 -1
- package/src/__tests__/fixtures/refs/simple.yaml +0 -1
- package/src/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
- package/src/__tests__/fixtures/resolve/External.yaml +0 -10
- package/src/__tests__/fixtures/resolve/External2.yaml +0 -4
- package/src/__tests__/fixtures/resolve/description.md +0 -3
- package/src/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
- package/src/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
- package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
- package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
- package/src/__tests__/fixtures/resolve/openapi.yaml +0 -28
- package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
- package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
- package/src/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
- package/src/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
- package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
- package/src/__tests__/format.test.ts +0 -76
- package/src/__tests__/js-yaml.test.ts +0 -73
- package/src/__tests__/lint.test.ts +0 -388
- package/src/__tests__/logger-browser.test.ts +0 -53
- package/src/__tests__/logger.test.ts +0 -47
- package/src/__tests__/login.test.ts +0 -17
- package/src/__tests__/normalizeVisitors.test.ts +0 -151
- package/src/__tests__/output-browser.test.ts +0 -18
- package/src/__tests__/output.test.ts +0 -15
- package/src/__tests__/ref-utils.test.ts +0 -120
- package/src/__tests__/resolve-http.test.ts +0 -77
- package/src/__tests__/resolve.test.ts +0 -408
- package/src/__tests__/utils-browser.test.ts +0 -11
- package/src/__tests__/utils.test.ts +0 -144
- package/src/__tests__/walk.test.ts +0 -1545
- package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
- package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
- package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
- package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -35
- package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
- package/src/benchmark/benches/rebilly.yaml +0 -32275
- package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
- package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
- package/src/benchmark/benchmark.js +0 -311
- package/src/benchmark/colors.js +0 -29
- package/src/benchmark/fork.js +0 -83
- package/src/benchmark/utils.ts +0 -36
- package/src/bundle.ts +0 -399
- package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -161
- package/src/config/__tests__/__snapshots__/config.test.ts.snap +0 -144
- package/src/config/__tests__/config-resolvers.test.ts +0 -491
- package/src/config/__tests__/config.test.ts +0 -307
- package/src/config/__tests__/fixtures/ingore-file.ts +0 -8
- package/src/config/__tests__/fixtures/load-redocly.yaml +0 -2
- package/src/config/__tests__/fixtures/plugin-config.yaml +0 -2
- package/src/config/__tests__/fixtures/plugin.js +0 -56
- package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -11
- package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -69
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -7
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-custom-function.yaml +0 -17
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -18
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-wrong-custom-function.yaml +0 -15
- package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -9
- package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -80
- package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -3
- package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -4
- package/src/config/__tests__/load.test.ts +0 -167
- package/src/config/__tests__/resolve-plugins.test.ts +0 -27
- package/src/config/__tests__/utils.test.ts +0 -204
- package/src/config/all.ts +0 -66
- package/src/config/builtIn.ts +0 -37
- package/src/config/config-resolvers.ts +0 -465
- package/src/config/config.ts +0 -330
- package/src/config/index.ts +0 -7
- package/src/config/load.ts +0 -144
- package/src/config/minimal.ts +0 -60
- package/src/config/recommended.ts +0 -60
- package/src/config/rules.ts +0 -54
- package/src/config/types.ts +0 -216
- package/src/config/utils.ts +0 -333
- package/src/decorators/__tests__/filter-in.test.ts +0 -310
- package/src/decorators/__tests__/filter-out.test.ts +0 -335
- package/src/decorators/__tests__/media-type-examples-override.test.ts +0 -665
- package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
- package/src/decorators/__tests__/resources/request.yaml +0 -3
- package/src/decorators/__tests__/resources/response.yaml +0 -3
- package/src/decorators/common/filters/filter-helper.ts +0 -72
- package/src/decorators/common/filters/filter-in.ts +0 -18
- package/src/decorators/common/filters/filter-out.ts +0 -18
- package/src/decorators/common/info-description-override.ts +0 -24
- package/src/decorators/common/info-override.ts +0 -15
- package/src/decorators/common/media-type-examples-override.ts +0 -79
- package/src/decorators/common/operation-description-override.ts +0 -30
- package/src/decorators/common/registry-dependencies.ts +0 -25
- package/src/decorators/common/remove-x-internal.ts +0 -59
- package/src/decorators/common/tag-description-override.ts +0 -25
- package/src/decorators/oas2/index.ts +0 -20
- package/src/decorators/oas3/index.ts +0 -22
- package/src/env.ts +0 -5
- package/src/format/codeframes.ts +0 -216
- package/src/format/format.ts +0 -375
- package/src/index.ts +0 -71
- package/src/js-yaml/index.ts +0 -14
- package/src/lint.ts +0 -130
- package/src/logger.ts +0 -34
- package/src/oas-types.ts +0 -57
- package/src/output.ts +0 -7
- package/src/redocly/__tests__/redocly-client.test.ts +0 -146
- package/src/redocly/index.ts +0 -187
- package/src/redocly/redocly-client-types.ts +0 -10
- package/src/redocly/registry-api-types.ts +0 -32
- package/src/redocly/registry-api.ts +0 -149
- package/src/ref-utils.ts +0 -85
- package/src/resolve.ts +0 -412
- package/src/rules/__tests__/fixtures/code-sample.php +0 -9
- package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
- package/src/rules/__tests__/fixtures/ref.yaml +0 -1
- package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -257
- package/src/rules/__tests__/utils.test.ts +0 -160
- package/src/rules/ajv.ts +0 -102
- package/src/rules/common/__tests__/info-license.test.ts +0 -62
- package/src/rules/common/__tests__/license-url.test.ts +0 -63
- package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
- package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -210
- package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
- package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
- package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -192
- package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -231
- package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
- package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
- package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
- package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
- package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
- package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
- package/src/rules/common/__tests__/path-params-defined.test.ts +0 -202
- package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
- package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +0 -264
- package/src/rules/common/__tests__/security-defined.test.ts +0 -175
- package/src/rules/common/__tests__/spec.test.ts +0 -555
- package/src/rules/common/__tests__/tag-description.test.ts +0 -65
- package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
- package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -869
- package/src/rules/common/assertions/__tests__/index.test.ts +0 -100
- package/src/rules/common/assertions/__tests__/utils.test.ts +0 -236
- package/src/rules/common/assertions/asserts.ts +0 -357
- package/src/rules/common/assertions/index.ts +0 -56
- package/src/rules/common/assertions/utils.ts +0 -331
- package/src/rules/common/info-contact.ts +0 -15
- package/src/rules/common/info-license-url.ts +0 -10
- package/src/rules/common/info-license.ts +0 -15
- package/src/rules/common/no-ambiguous-paths.ts +0 -50
- package/src/rules/common/no-enum-type-mismatch.ts +0 -52
- package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
- package/src/rules/common/no-identical-paths.ts +0 -24
- package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
- package/src/rules/common/no-invalid-schema-examples.ts +0 -27
- package/src/rules/common/no-path-trailing-slash.ts +0 -15
- package/src/rules/common/operation-2xx-response.ts +0 -24
- package/src/rules/common/operation-4xx-response.ts +0 -24
- package/src/rules/common/operation-description.ts +0 -13
- package/src/rules/common/operation-operationId-unique.ts +0 -21
- package/src/rules/common/operation-operationId-url-safe.ts +0 -19
- package/src/rules/common/operation-operationId.ts +0 -17
- package/src/rules/common/operation-parameters-unique.ts +0 -48
- package/src/rules/common/operation-singular-tag.ts +0 -17
- package/src/rules/common/operation-summary.ts +0 -13
- package/src/rules/common/operation-tag-defined.ts +0 -26
- package/src/rules/common/parameter-description.ts +0 -22
- package/src/rules/common/path-declaration-must-exist.ts +0 -15
- package/src/rules/common/path-excludes-patterns.ts +0 -23
- package/src/rules/common/path-http-verbs-order.ts +0 -30
- package/src/rules/common/path-not-include-query.ts +0 -17
- package/src/rules/common/path-params-defined.ts +0 -65
- package/src/rules/common/path-segment-plural.ts +0 -31
- package/src/rules/common/paths-kebab-case.ts +0 -19
- package/src/rules/common/required-string-property-missing-min-length.ts +0 -44
- package/src/rules/common/response-contains-header.ts +0 -35
- package/src/rules/common/scalar-property-missing-example.ts +0 -58
- package/src/rules/common/security-defined.ts +0 -65
- package/src/rules/common/spec.ts +0 -174
- package/src/rules/common/tag-description.ts +0 -10
- package/src/rules/common/tags-alphabetical.ts +0 -20
- package/src/rules/no-unresolved-refs.ts +0 -51
- package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
- package/src/rules/oas2/__tests__/response-contains-header.test.ts +0 -174
- package/src/rules/oas2/__tests__/response-contains-property.test.ts +0 -155
- package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
- package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
- package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
- package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
- package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -35
- package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
- package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
- package/src/rules/oas2/index.ts +0 -89
- package/src/rules/oas2/remove-unused-components.ts +0 -81
- package/src/rules/oas2/request-mime-type.ts +0 -17
- package/src/rules/oas2/response-contains-property.ts +0 -36
- package/src/rules/oas2/response-mime-type.ts +0 -17
- package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
- package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
- package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
- package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
- package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -473
- package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
- package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
- package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
- package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +0 -145
- package/src/rules/oas3/__tests__/response-contains-header.test.ts +0 -389
- package/src/rules/oas3/__tests__/response-contains-property.test.ts +0 -403
- package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
- package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
- package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
- package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
- package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
- package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
- package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -505
- package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -298
- package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
- package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +0 -305
- package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
- package/src/rules/oas3/index.ts +0 -109
- package/src/rules/oas3/no-empty-servers.ts +0 -22
- package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
- package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -49
- package/src/rules/oas3/no-server-example.com.ts +0 -14
- package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
- package/src/rules/oas3/no-server-variables-empty-enum.ts +0 -66
- package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
- package/src/rules/oas3/no-unused-components.ts +0 -75
- package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +0 -36
- package/src/rules/oas3/remove-unused-components.ts +0 -95
- package/src/rules/oas3/request-mime-type.ts +0 -31
- package/src/rules/oas3/response-contains-property.ts +0 -38
- package/src/rules/oas3/response-mime-type.ts +0 -31
- package/src/rules/oas3/spec-components-invalid-map-name.ts +0 -74
- package/src/rules/other/stats.ts +0 -73
- package/src/rules/utils.ts +0 -191
- package/src/types/index.ts +0 -149
- package/src/types/oas2.ts +0 -478
- package/src/types/oas3.ts +0 -597
- package/src/types/oas3_1.ts +0 -258
- package/src/types/redocly-yaml.ts +0 -1010
- package/src/typings/common.ts +0 -17
- package/src/typings/openapi.ts +0 -298
- package/src/typings/swagger.ts +0 -236
- package/src/utils.ts +0 -276
- package/src/visitors.ts +0 -491
- package/src/walk.ts +0 -453
- package/tsconfig.json +0 -8
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1,355 +0,0 @@
|
|
|
1
|
-
import { outdent } from 'outdent';
|
|
2
|
-
import { lintDoc } from './utils';
|
|
3
|
-
|
|
4
|
-
describe('OpenAPI Schema 2.0', () => {
|
|
5
|
-
it('should report if the title of the API is empty ', async () => {
|
|
6
|
-
const source = outdent`
|
|
7
|
-
swagger: '2.0'
|
|
8
|
-
info:
|
|
9
|
-
title:
|
|
10
|
-
version: '1.0'
|
|
11
|
-
|
|
12
|
-
paths:
|
|
13
|
-
'/ping':
|
|
14
|
-
get:
|
|
15
|
-
responses:
|
|
16
|
-
'200':
|
|
17
|
-
description: example description
|
|
18
|
-
`;
|
|
19
|
-
|
|
20
|
-
expect(
|
|
21
|
-
await lintDoc(source, {
|
|
22
|
-
spec: 'error',
|
|
23
|
-
})
|
|
24
|
-
).toMatchInlineSnapshot(`
|
|
25
|
-
Array [
|
|
26
|
-
Object {
|
|
27
|
-
"location": "#/info/title",
|
|
28
|
-
"message": "Expected type \`string\` but got \`null\`.",
|
|
29
|
-
},
|
|
30
|
-
]
|
|
31
|
-
`);
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('should report if in the description field is not string.', async () => {
|
|
35
|
-
const source = outdent`
|
|
36
|
-
swagger: '2.0'
|
|
37
|
-
info:
|
|
38
|
-
title: Example OpenAPI 3 definition.
|
|
39
|
-
version: '1.0'
|
|
40
|
-
description:
|
|
41
|
-
|
|
42
|
-
paths:
|
|
43
|
-
'/ping':
|
|
44
|
-
get:
|
|
45
|
-
responses:
|
|
46
|
-
'200':
|
|
47
|
-
description: example description
|
|
48
|
-
`;
|
|
49
|
-
|
|
50
|
-
expect(
|
|
51
|
-
await lintDoc(source, {
|
|
52
|
-
spec: 'error',
|
|
53
|
-
})
|
|
54
|
-
).toMatchInlineSnapshot(`
|
|
55
|
-
Array [
|
|
56
|
-
Object {
|
|
57
|
-
"location": "#/info/description",
|
|
58
|
-
"message": "Expected type \`string\` but got \`null\`.",
|
|
59
|
-
},
|
|
60
|
-
]
|
|
61
|
-
`);
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('should report if in the termsOfService field is not string', async () => {
|
|
65
|
-
const source = outdent`
|
|
66
|
-
swagger: '2.0'
|
|
67
|
-
info:
|
|
68
|
-
title: Example OpenAPI 3 definition. Valid.
|
|
69
|
-
version: '1.0'
|
|
70
|
-
termsOfService:
|
|
71
|
-
|
|
72
|
-
paths:
|
|
73
|
-
'/ping':
|
|
74
|
-
get:
|
|
75
|
-
responses:
|
|
76
|
-
'200':
|
|
77
|
-
description: example description
|
|
78
|
-
`;
|
|
79
|
-
|
|
80
|
-
expect(
|
|
81
|
-
await lintDoc(source, {
|
|
82
|
-
spec: 'error',
|
|
83
|
-
})
|
|
84
|
-
).toMatchInlineSnapshot(`
|
|
85
|
-
Array [
|
|
86
|
-
Object {
|
|
87
|
-
"location": "#/info/termsOfService",
|
|
88
|
-
"message": "Expected type \`string\` but got \`null\`.",
|
|
89
|
-
},
|
|
90
|
-
]
|
|
91
|
-
`);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it('should not report if the Contact Object is valid', async () => {
|
|
95
|
-
const source = outdent`
|
|
96
|
-
swagger: '2.0'
|
|
97
|
-
info:
|
|
98
|
-
title: Example OpenAPI 3 definition. Valid.
|
|
99
|
-
version: '1.0'
|
|
100
|
-
termsOfService: http://example.com/terms/
|
|
101
|
-
contact:
|
|
102
|
-
name: API Support
|
|
103
|
-
url: http://www.example.com/support
|
|
104
|
-
email: support@example.com
|
|
105
|
-
|
|
106
|
-
paths:
|
|
107
|
-
'/ping':
|
|
108
|
-
get:
|
|
109
|
-
responses:
|
|
110
|
-
'200':
|
|
111
|
-
description: example description
|
|
112
|
-
`;
|
|
113
|
-
|
|
114
|
-
expect(
|
|
115
|
-
await lintDoc(source, {
|
|
116
|
-
spec: 'error',
|
|
117
|
-
})
|
|
118
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
it('should report if in the Contact Object in URL field is not string', async () => {
|
|
122
|
-
const source = outdent`
|
|
123
|
-
swagger: '2.0'
|
|
124
|
-
info:
|
|
125
|
-
title: Example OpenAPI 3 definition. Valid.
|
|
126
|
-
version: '1.0'
|
|
127
|
-
termsOfService: http://example.com/terms/
|
|
128
|
-
contact:
|
|
129
|
-
url:
|
|
130
|
-
email: support@example.com
|
|
131
|
-
|
|
132
|
-
paths:
|
|
133
|
-
'/ping':
|
|
134
|
-
get:
|
|
135
|
-
responses:
|
|
136
|
-
'200':
|
|
137
|
-
description: example description
|
|
138
|
-
`;
|
|
139
|
-
|
|
140
|
-
expect(
|
|
141
|
-
await lintDoc(source, {
|
|
142
|
-
spec: 'error',
|
|
143
|
-
})
|
|
144
|
-
).toMatchInlineSnapshot(`
|
|
145
|
-
Array [
|
|
146
|
-
Object {
|
|
147
|
-
"location": "#/info/contact/url",
|
|
148
|
-
"message": "Expected type \`string\` but got \`null\`.",
|
|
149
|
-
},
|
|
150
|
-
]
|
|
151
|
-
`);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it('should report if in the Contact Object in email field is not string', async () => {
|
|
155
|
-
const source = outdent`
|
|
156
|
-
swagger: '2.0'
|
|
157
|
-
info:
|
|
158
|
-
title: Example OpenAPI 3 definition. Valid.
|
|
159
|
-
version: '1.0'
|
|
160
|
-
termsOfService: http://example.com/terms/
|
|
161
|
-
contact:
|
|
162
|
-
url: http://example.com/contact/
|
|
163
|
-
email:
|
|
164
|
-
|
|
165
|
-
paths:
|
|
166
|
-
'/ping':
|
|
167
|
-
get:
|
|
168
|
-
responses:
|
|
169
|
-
'200':
|
|
170
|
-
description: example description
|
|
171
|
-
`;
|
|
172
|
-
|
|
173
|
-
expect(
|
|
174
|
-
await lintDoc(source, {
|
|
175
|
-
spec: 'error',
|
|
176
|
-
})
|
|
177
|
-
).toMatchInlineSnapshot(`
|
|
178
|
-
Array [
|
|
179
|
-
Object {
|
|
180
|
-
"location": "#/info/contact/email",
|
|
181
|
-
"message": "Expected type \`string\` but got \`null\`.",
|
|
182
|
-
},
|
|
183
|
-
]
|
|
184
|
-
`);
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it('should not report if the License Object is valid', async () => {
|
|
188
|
-
const source = outdent`
|
|
189
|
-
swagger: '2.0'
|
|
190
|
-
info:
|
|
191
|
-
title: Example OpenAPI 3 definition. Valid.
|
|
192
|
-
version: '1.0'
|
|
193
|
-
license:
|
|
194
|
-
name: Apache 2.0
|
|
195
|
-
url: https://www.apache.org/licenses/LICENSE-2.0.html
|
|
196
|
-
|
|
197
|
-
paths:
|
|
198
|
-
'/ping':
|
|
199
|
-
get:
|
|
200
|
-
responses:
|
|
201
|
-
'200':
|
|
202
|
-
description: example description
|
|
203
|
-
`;
|
|
204
|
-
|
|
205
|
-
expect(
|
|
206
|
-
await lintDoc(source, {
|
|
207
|
-
spec: 'error',
|
|
208
|
-
})
|
|
209
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
it('should report if the License Object missing field Name', async () => {
|
|
213
|
-
const source = outdent`
|
|
214
|
-
swagger: '2.0'
|
|
215
|
-
info:
|
|
216
|
-
title: Example OpenAPI 3 definition. Valid.
|
|
217
|
-
version: '1.0'
|
|
218
|
-
license:
|
|
219
|
-
url: https://www.apache.org/licenses/LICENSE-2.0.html
|
|
220
|
-
|
|
221
|
-
paths:
|
|
222
|
-
'/ping':
|
|
223
|
-
get:
|
|
224
|
-
responses:
|
|
225
|
-
'200':
|
|
226
|
-
description: example description
|
|
227
|
-
`;
|
|
228
|
-
|
|
229
|
-
expect(
|
|
230
|
-
await lintDoc(source, {
|
|
231
|
-
spec: 'error',
|
|
232
|
-
})
|
|
233
|
-
).toMatchInlineSnapshot(`
|
|
234
|
-
Array [
|
|
235
|
-
Object {
|
|
236
|
-
"location": "#/info/license",
|
|
237
|
-
"message": "The field \`name\` must be present on this level.",
|
|
238
|
-
},
|
|
239
|
-
]
|
|
240
|
-
`);
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
it('should report if in the URL field of the License Object is not string', async () => {
|
|
244
|
-
const source = outdent`
|
|
245
|
-
swagger: '2.0'
|
|
246
|
-
info:
|
|
247
|
-
title: Example OpenAPI 3 definition. Valid.
|
|
248
|
-
version: '1.0'
|
|
249
|
-
license:
|
|
250
|
-
name: Apache 2.0
|
|
251
|
-
url:
|
|
252
|
-
|
|
253
|
-
paths:
|
|
254
|
-
'/ping':
|
|
255
|
-
get:
|
|
256
|
-
responses:
|
|
257
|
-
'200':
|
|
258
|
-
description: example description
|
|
259
|
-
`;
|
|
260
|
-
|
|
261
|
-
expect(
|
|
262
|
-
await lintDoc(source, {
|
|
263
|
-
spec: 'error',
|
|
264
|
-
})
|
|
265
|
-
).toMatchInlineSnapshot(`
|
|
266
|
-
Array [
|
|
267
|
-
Object {
|
|
268
|
-
"location": "#/info/license/url",
|
|
269
|
-
"message": "Expected type \`string\` but got \`null\`.",
|
|
270
|
-
},
|
|
271
|
-
]
|
|
272
|
-
`);
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
it('should not report if the URL field of the License Object is not provided', async () => {
|
|
276
|
-
const source = outdent`
|
|
277
|
-
swagger: '2.0'
|
|
278
|
-
info:
|
|
279
|
-
title: Example OpenAPI 3 definition. Valid.
|
|
280
|
-
version: '1.0'
|
|
281
|
-
license:
|
|
282
|
-
name: Apache 2.0
|
|
283
|
-
|
|
284
|
-
paths:
|
|
285
|
-
'/ping':
|
|
286
|
-
get:
|
|
287
|
-
responses:
|
|
288
|
-
'200':
|
|
289
|
-
description: example description
|
|
290
|
-
`;
|
|
291
|
-
|
|
292
|
-
expect(
|
|
293
|
-
await lintDoc(source, {
|
|
294
|
-
spec: 'error',
|
|
295
|
-
})
|
|
296
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
297
|
-
});
|
|
298
|
-
|
|
299
|
-
it('should report if the Version field is not provided', async () => {
|
|
300
|
-
const source = outdent`
|
|
301
|
-
swagger: '2.0'
|
|
302
|
-
info:
|
|
303
|
-
title: Example OpenAPI 3 definition.
|
|
304
|
-
|
|
305
|
-
paths:
|
|
306
|
-
'/ping':
|
|
307
|
-
get:
|
|
308
|
-
responses:
|
|
309
|
-
'200':
|
|
310
|
-
description: example description
|
|
311
|
-
`;
|
|
312
|
-
|
|
313
|
-
expect(
|
|
314
|
-
await lintDoc(source, {
|
|
315
|
-
spec: 'error',
|
|
316
|
-
})
|
|
317
|
-
).toMatchInlineSnapshot(`
|
|
318
|
-
Array [
|
|
319
|
-
Object {
|
|
320
|
-
"location": "#/info",
|
|
321
|
-
"message": "The field \`version\` must be present on this level.",
|
|
322
|
-
},
|
|
323
|
-
]
|
|
324
|
-
`);
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
it('should report if in the Version field is not string', async () => {
|
|
328
|
-
const source = outdent`
|
|
329
|
-
swagger: '2.0'
|
|
330
|
-
info:
|
|
331
|
-
version:
|
|
332
|
-
title: Example OpenAPI 3 definition.
|
|
333
|
-
|
|
334
|
-
paths:
|
|
335
|
-
'/ping':
|
|
336
|
-
get:
|
|
337
|
-
responses:
|
|
338
|
-
'200':
|
|
339
|
-
description: example description
|
|
340
|
-
`;
|
|
341
|
-
|
|
342
|
-
expect(
|
|
343
|
-
await lintDoc(source, {
|
|
344
|
-
spec: 'error',
|
|
345
|
-
})
|
|
346
|
-
).toMatchInlineSnapshot(`
|
|
347
|
-
Array [
|
|
348
|
-
Object {
|
|
349
|
-
"location": "#/info/version",
|
|
350
|
-
"message": "Expected type \`string\` but got \`null\`.",
|
|
351
|
-
},
|
|
352
|
-
]
|
|
353
|
-
`);
|
|
354
|
-
});
|
|
355
|
-
});
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { outdent } from 'outdent';
|
|
2
|
-
import { lintDoc } from './utils';
|
|
3
|
-
|
|
4
|
-
describe('OpenAPI Schema 2.0', () => {
|
|
5
|
-
it('should not report of a valid GET operation object', async () => {
|
|
6
|
-
const source = outdent`
|
|
7
|
-
swagger: '2.0'
|
|
8
|
-
info:
|
|
9
|
-
title: Test
|
|
10
|
-
version: '1.0'
|
|
11
|
-
|
|
12
|
-
paths:
|
|
13
|
-
'/ping':
|
|
14
|
-
get:
|
|
15
|
-
responses:
|
|
16
|
-
'200':
|
|
17
|
-
description: example description
|
|
18
|
-
`;
|
|
19
|
-
|
|
20
|
-
expect(
|
|
21
|
-
await lintDoc(source, {
|
|
22
|
-
spec: 'error',
|
|
23
|
-
})
|
|
24
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it('should not report of a valid PUT operation object', async () => {
|
|
28
|
-
const source = outdent`
|
|
29
|
-
swagger: '2.0'
|
|
30
|
-
info:
|
|
31
|
-
title: Test
|
|
32
|
-
version: '1.0'
|
|
33
|
-
|
|
34
|
-
paths:
|
|
35
|
-
'/ping':
|
|
36
|
-
put:
|
|
37
|
-
tags:
|
|
38
|
-
- pet
|
|
39
|
-
summary: Update an existing pet
|
|
40
|
-
description: ''
|
|
41
|
-
operationId: updatePet
|
|
42
|
-
responses:
|
|
43
|
-
'400':
|
|
44
|
-
description: Invalid ID supplied
|
|
45
|
-
`;
|
|
46
|
-
|
|
47
|
-
expect(
|
|
48
|
-
await lintDoc(source, {
|
|
49
|
-
spec: 'error',
|
|
50
|
-
})
|
|
51
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('should not report of a valid Post operation object', async () => {
|
|
55
|
-
const source = outdent`
|
|
56
|
-
swagger: '2.0'
|
|
57
|
-
info:
|
|
58
|
-
title: Test
|
|
59
|
-
version: '1.0'
|
|
60
|
-
|
|
61
|
-
paths:
|
|
62
|
-
'/ping':
|
|
63
|
-
post:
|
|
64
|
-
tags:
|
|
65
|
-
- pet
|
|
66
|
-
summary: uploads an image
|
|
67
|
-
description: ''
|
|
68
|
-
operationId: uploadFile
|
|
69
|
-
parameters:
|
|
70
|
-
- name: petId
|
|
71
|
-
in: path
|
|
72
|
-
description: ID of pet to update
|
|
73
|
-
required: true
|
|
74
|
-
type: integer
|
|
75
|
-
format: int64
|
|
76
|
-
responses:
|
|
77
|
-
'200':
|
|
78
|
-
description: successful operation
|
|
79
|
-
`;
|
|
80
|
-
|
|
81
|
-
expect(
|
|
82
|
-
await lintDoc(source, {
|
|
83
|
-
spec: 'error',
|
|
84
|
-
})
|
|
85
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it('should not report of a valid delete operation object', async () => {
|
|
89
|
-
const source = outdent`
|
|
90
|
-
swagger: '2.0'
|
|
91
|
-
info:
|
|
92
|
-
title: Test
|
|
93
|
-
version: '1.0'
|
|
94
|
-
|
|
95
|
-
paths:
|
|
96
|
-
'/ping':
|
|
97
|
-
delete:
|
|
98
|
-
tags:
|
|
99
|
-
- store
|
|
100
|
-
summary: Delete purchase order by ID
|
|
101
|
-
description: >-
|
|
102
|
-
For valid response try integer IDs with value < 1000. Anything above
|
|
103
|
-
1000 or nonintegers will generate API errors
|
|
104
|
-
operationId: deleteOrder
|
|
105
|
-
parameters:
|
|
106
|
-
- name: orderId
|
|
107
|
-
in: path
|
|
108
|
-
description: ID of the order that needs to be deleted
|
|
109
|
-
required: true
|
|
110
|
-
type: string
|
|
111
|
-
minimum: 1
|
|
112
|
-
responses:
|
|
113
|
-
'400':
|
|
114
|
-
description: Invalid ID supplied
|
|
115
|
-
`;
|
|
116
|
-
|
|
117
|
-
expect(
|
|
118
|
-
await lintDoc(source, {
|
|
119
|
-
spec: 'error',
|
|
120
|
-
})
|
|
121
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
122
|
-
});
|
|
123
|
-
});
|
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
import { outdent } from 'outdent';
|
|
2
|
-
import { lintDoc } from './utils';
|
|
3
|
-
|
|
4
|
-
describe('OpenAPI Schema', () => {
|
|
5
|
-
it('should not report if Path object is valid ', async () => {
|
|
6
|
-
const source = outdent`
|
|
7
|
-
swagger: '2.0'
|
|
8
|
-
info:
|
|
9
|
-
title: Test
|
|
10
|
-
version: '1.0'
|
|
11
|
-
|
|
12
|
-
paths:
|
|
13
|
-
'/ping':
|
|
14
|
-
get:
|
|
15
|
-
responses:
|
|
16
|
-
'200':
|
|
17
|
-
description: example description
|
|
18
|
-
`;
|
|
19
|
-
|
|
20
|
-
expect(
|
|
21
|
-
await lintDoc(source, {
|
|
22
|
-
spec: 'error',
|
|
23
|
-
})
|
|
24
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it('should not report if Path object is empty ', async () => {
|
|
28
|
-
const source = outdent`
|
|
29
|
-
swagger: '2.0'
|
|
30
|
-
info:
|
|
31
|
-
title: Test
|
|
32
|
-
version: '1.0'
|
|
33
|
-
|
|
34
|
-
paths: {}
|
|
35
|
-
`;
|
|
36
|
-
|
|
37
|
-
expect(
|
|
38
|
-
await lintDoc(source, {
|
|
39
|
-
spec: 'error',
|
|
40
|
-
})
|
|
41
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('should report if Path object is not present ', async () => {
|
|
45
|
-
const source = outdent`
|
|
46
|
-
swagger: '2.0'
|
|
47
|
-
info:
|
|
48
|
-
title: Test
|
|
49
|
-
version: '1.0'
|
|
50
|
-
`;
|
|
51
|
-
|
|
52
|
-
expect(
|
|
53
|
-
await lintDoc(source, {
|
|
54
|
-
spec: 'error',
|
|
55
|
-
})
|
|
56
|
-
).toMatchInlineSnapshot(`
|
|
57
|
-
Array [
|
|
58
|
-
Object {
|
|
59
|
-
"location": "#/",
|
|
60
|
-
"message": "The field \`paths\` must be present on this level.",
|
|
61
|
-
},
|
|
62
|
-
]
|
|
63
|
-
`);
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
it('should not report if Path object is empty ', async () => {
|
|
67
|
-
const source = outdent`
|
|
68
|
-
swagger: '2.0'
|
|
69
|
-
info:
|
|
70
|
-
title: Test
|
|
71
|
-
version: '1.0'
|
|
72
|
-
|
|
73
|
-
paths: {}
|
|
74
|
-
`;
|
|
75
|
-
|
|
76
|
-
expect(
|
|
77
|
-
await lintDoc(source, {
|
|
78
|
-
spec: 'error',
|
|
79
|
-
})
|
|
80
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
//Check: no error
|
|
84
|
-
it('should report if the field name is not begin with a forward slash (/) ', async () => {
|
|
85
|
-
const source = outdent`
|
|
86
|
-
swagger: '2.0'
|
|
87
|
-
info:
|
|
88
|
-
title: Test
|
|
89
|
-
version: '1.0'
|
|
90
|
-
|
|
91
|
-
paths:
|
|
92
|
-
'ping':
|
|
93
|
-
get:
|
|
94
|
-
responses:
|
|
95
|
-
'200':
|
|
96
|
-
description: example description
|
|
97
|
-
`;
|
|
98
|
-
|
|
99
|
-
expect(
|
|
100
|
-
await lintDoc(source, {
|
|
101
|
-
spec: 'error',
|
|
102
|
-
})
|
|
103
|
-
).toMatchInlineSnapshot(`
|
|
104
|
-
Array [
|
|
105
|
-
Object {
|
|
106
|
-
"location": "#/paths/ping",
|
|
107
|
-
"message": "Property \`ping\` is not expected here.",
|
|
108
|
-
},
|
|
109
|
-
]
|
|
110
|
-
`);
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('should report if paths are considered identical and invalid', async () => {
|
|
114
|
-
const source = outdent`
|
|
115
|
-
swagger: '2.0'
|
|
116
|
-
info:
|
|
117
|
-
title: Test
|
|
118
|
-
version: '1.0'
|
|
119
|
-
|
|
120
|
-
paths:
|
|
121
|
-
/pets/{petId}:
|
|
122
|
-
get:
|
|
123
|
-
responses:
|
|
124
|
-
'200':
|
|
125
|
-
description: example description
|
|
126
|
-
/pets/{name}:
|
|
127
|
-
get:
|
|
128
|
-
responses:
|
|
129
|
-
'200':
|
|
130
|
-
description: example description
|
|
131
|
-
`;
|
|
132
|
-
|
|
133
|
-
expect(
|
|
134
|
-
await lintDoc(source, {
|
|
135
|
-
'paths-identical': 'error',
|
|
136
|
-
})
|
|
137
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it('should not report valid matching URLs', async () => {
|
|
141
|
-
const source = outdent`
|
|
142
|
-
swagger: '2.0'
|
|
143
|
-
info:
|
|
144
|
-
title: Test
|
|
145
|
-
version: '1.0'
|
|
146
|
-
|
|
147
|
-
paths:
|
|
148
|
-
'/pets/{petId}':
|
|
149
|
-
get:
|
|
150
|
-
responses:
|
|
151
|
-
'200':
|
|
152
|
-
description: example description
|
|
153
|
-
'/pets/mine':
|
|
154
|
-
get:
|
|
155
|
-
responses:
|
|
156
|
-
'200':
|
|
157
|
-
description: example description
|
|
158
|
-
`;
|
|
159
|
-
|
|
160
|
-
expect(
|
|
161
|
-
await lintDoc(source, {
|
|
162
|
-
spec: 'error',
|
|
163
|
-
})
|
|
164
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
it('should not report in case of ambiguous matching ', async () => {
|
|
168
|
-
const source = outdent`
|
|
169
|
-
swagger: '2.0'
|
|
170
|
-
info:
|
|
171
|
-
title: Test
|
|
172
|
-
version: '1.0'
|
|
173
|
-
|
|
174
|
-
paths:
|
|
175
|
-
'/{entity}/me':
|
|
176
|
-
get:
|
|
177
|
-
responses:
|
|
178
|
-
'200':
|
|
179
|
-
description: example description
|
|
180
|
-
'/books/{id}':
|
|
181
|
-
get:
|
|
182
|
-
responses:
|
|
183
|
-
'200':
|
|
184
|
-
description: example description
|
|
185
|
-
`;
|
|
186
|
-
|
|
187
|
-
expect(
|
|
188
|
-
await lintDoc(source, {
|
|
189
|
-
spec: 'error',
|
|
190
|
-
})
|
|
191
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
it('should not report if Path Item is empty ', async () => {
|
|
195
|
-
const source = outdent`
|
|
196
|
-
swagger: '2.0'
|
|
197
|
-
info:
|
|
198
|
-
title: Test
|
|
199
|
-
version: '1.0'
|
|
200
|
-
|
|
201
|
-
paths:
|
|
202
|
-
'/ping': {}
|
|
203
|
-
`;
|
|
204
|
-
|
|
205
|
-
expect(
|
|
206
|
-
await lintDoc(source, {
|
|
207
|
-
spec: 'error',
|
|
208
|
-
})
|
|
209
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
it('should not report of a valid Parameter Object', async () => {
|
|
213
|
-
const source = outdent`
|
|
214
|
-
swagger: '2.0'
|
|
215
|
-
info:
|
|
216
|
-
title: Test
|
|
217
|
-
version: '1.0'
|
|
218
|
-
|
|
219
|
-
paths:
|
|
220
|
-
/pet:
|
|
221
|
-
parameters:
|
|
222
|
-
- name: Accept-Language
|
|
223
|
-
in: header
|
|
224
|
-
description: "test"
|
|
225
|
-
required: false
|
|
226
|
-
type: string
|
|
227
|
-
default: en-AU
|
|
228
|
-
post:
|
|
229
|
-
tags:
|
|
230
|
-
- pet
|
|
231
|
-
summary: Add a new pet to the store
|
|
232
|
-
description: Add new pet to the store inventory.
|
|
233
|
-
operationId: addPet
|
|
234
|
-
responses:
|
|
235
|
-
'405':
|
|
236
|
-
description: Invalid input
|
|
237
|
-
`;
|
|
238
|
-
|
|
239
|
-
expect(
|
|
240
|
-
await lintDoc(source, {
|
|
241
|
-
spec: 'error',
|
|
242
|
-
})
|
|
243
|
-
).toMatchInlineSnapshot(`Array []`);
|
|
244
|
-
});
|
|
245
|
-
});
|