@redocly/openapi-core
Version:
See https://github.com/Redocly/redocly-cli
265 lines (240 loc) • 7.55 kB
text/typescript
import { outdent } from 'outdent';
import { lintDocument } from '../../../lint';
import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils';
import { BaseResolver } from '../../../resolve';
describe('Oas3 scalar-property-missing-example', () => {
it('should report on a scalar property missing example', async () => {
const document = parseYamlToDocument(
outdent`
openapi: 3.0.0
components:
schemas:
User:
type: object
properties:
email:
description: User email address
type: string
format: email
`,
'foobar.yaml'
);
const results = await lintDocument({
externalRefResolver: new BaseResolver(),
document,
config: await makeConfig({ 'scalar-property-missing-example': 'error' }),
});
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
Array [
Object {
"location": Array [
Object {
"pointer": "#/components/schemas/User/properties/email",
"reportOnKey": true,
"source": "foobar.yaml",
},
],
"message": "Scalar property should have \\"example\\" defined.",
"ruleId": "scalar-property-missing-example",
"severity": "error",
"suggest": Array [],
},
]
`);
});
});
describe('Oas3.1 scalar-property-missing-example', () => {
it('should report on a scalar property missing example', async () => {
const document = parseYamlToDocument(
outdent`
openapi: 3.1.0
components:
schemas:
User:
type: object
properties:
email:
description: User email address
type: string
format: email
`,
'foobar.yaml'
);
const results = await lintDocument({
externalRefResolver: new BaseResolver(),
document,
config: await makeConfig({ 'scalar-property-missing-example': 'error' }),
});
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
Array [
Object {
"location": Array [
Object {
"pointer": "#/components/schemas/User/properties/email",
"reportOnKey": true,
"source": "foobar.yaml",
},
],
"message": "Scalar property should have \\"example\\" or \\"examples\\" defined.",
"ruleId": "scalar-property-missing-example",
"severity": "error",
"suggest": Array [],
},
]
`);
});
it('should not report on a scalar property with an example', async () => {
const document = parseYamlToDocument(
outdent`
openapi: 3.1.0
components:
schemas:
User:
type: object
properties:
email:
description: User email address
type: string
format: email
example: john.smith@example.com
`,
'foobar.yaml'
);
const results = await lintDocument({
externalRefResolver: new BaseResolver(),
document,
config: await makeConfig({ 'scalar-property-missing-example': 'error' }),
});
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
});
it('should not report on a scalar property with an examples', async () => {
const document = parseYamlToDocument(
outdent`
openapi: 3.1.0
components:
schemas:
User:
type: object
properties:
email:
description: User email address
type: string
format: email
examples:
- john.smith@example.com
- other@example.com
`,
'foobar.yaml'
);
const results = await lintDocument({
externalRefResolver: new BaseResolver(),
document,
config: await makeConfig({ 'scalar-property-missing-example': 'error' }),
});
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
});
it('should not report on a non-scalar property missing an example', async () => {
const document = parseYamlToDocument(
outdent`
openapi: 3.1.0
components:
schemas:
Pet:
type: object
required:
- photoUrls
properties:
photoUrls:
description: The list of URL to a cute photos featuring pet
type: array
maxItems: 20
xml:
name: photoUrl
wrapped: true
items:
type: string
format: url
`,
'foobar.yaml'
);
const results = await lintDocument({
externalRefResolver: new BaseResolver(),
document,
config: await makeConfig({ 'scalar-property-missing-example': 'error' }),
});
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
});
it('should not report on a scalar property of binary format missing an example', async () => {
const document = parseYamlToDocument(
outdent`
openapi: 3.1.0
components:
schemas:
User:
type: object
properties:
responses:
type: string
format: binary
`,
'foobar.yaml'
);
const results = await lintDocument({
externalRefResolver: new BaseResolver(),
document,
config: await makeConfig({ 'scalar-property-missing-example': 'error' }),
});
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
});
it('should not report on a scalar property of falsy values', async () => {
const document = parseYamlToDocument(
outdent`
openapi: 3.0.0
components:
schemas:
User:
type: object
properties:
testBool:
type: boolean
example: false
testString:
type: string
example: ""
testNumber:
type: number
example: 0
`,
'foobar.yaml'
);
const results = await lintDocument({
externalRefResolver: new BaseResolver(),
document,
config: await makeConfig({ 'scalar-property-missing-example': 'error' }),
});
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
});
it('should not report on a nullable scalar property values', async () => {
const document = parseYamlToDocument(
outdent`
openapi: 3.0.0
components:
schemas:
User:
type: object
properties:
testBool:
type: string
nullable: true
example: null
`,
'foobar.yaml'
);
const results = await lintDocument({
externalRefResolver: new BaseResolver(),
document,
config: await makeConfig({ 'scalar-property-missing-example': 'error' }),
});
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
});
});