UNPKG

@redocly/openapi-core

Version:

See https://github.com/Redocly/openapi-cli

183 lines (171 loc) 4.75 kB
import { outdent } from 'outdent'; import { lintFromString, lintConfig, lintDocument } from '../lint'; import { BaseResolver } from '../resolve'; import { loadConfig } from '../config/load'; import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../__tests__/utils'; describe('lint', () => { it('lintFromString should work', async () => { const results = await lintFromString({ absoluteRef: '/test/spec.yaml', source: outdent` openapi: 3.0.0 info: title: Test API version: "1.0" description: Test license: Fail servers: - url: http://example.com paths: {} `, config: await loadConfig(), }); expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(` Array [ Object { "location": Array [ Object { "pointer": "#/info/license", "reportOnKey": false, "source": "/test/spec.yaml", }, ], "message": "Expected type \`License\` (object) but got \`string\`", "ruleId": "spec", "severity": "error", "suggest": Array [], }, ] `); }); it('lintConfig should work', async () => { const document = parseYamlToDocument( outdent` apis: error string lint: plugins: - './local-plugin.js' extends: - recommended - local/all rules: operation-2xx-response: warn no-invalid-media-type-examples: error path-http-verbs-order: error boolean-parameter-prefixes: off features.openapi: showConsole: true layout: scope: section routingStrategy: browser theme: rightPanel: backgroundColor: '#263238' links: color: '#6CC496' `, '', ); const results = await lintConfig({ document }); expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(` Array [ Object { "location": Array [ Object { "pointer": "#/apis", "reportOnKey": false, "source": "", }, ], "message": "Expected type \`ConfigApis\` (object) but got \`string\`", "ruleId": "spec", "severity": "error", "suggest": Array [], }, Object { "location": Array [ Object { "pointer": "#/features.openapi/layout", "reportOnKey": false, "source": "", }, ], "message": "Expected type \`string\` but got \`object\`.", "ruleId": "spec", "severity": "error", "suggest": Array [], }, ] `); }); it("'plugins' shouldn't be allowed in 'apis' -> 'lint' field", async () => { const document = parseYamlToDocument( outdent` apis: lint: plugins: - './local-plugin.js' lint: plugins: - './local-plugin.js' `, '', ); const results = await lintConfig({ document }); expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(` Array [ Object { "location": Array [ Object { "pointer": "#/apis/lint/plugins", "reportOnKey": true, "source": "", }, ], "message": "Property \`plugins\` is not expected here.", "ruleId": "spec", "severity": "error", "suggest": Array [], }, ] `); }); it("'const' can have any type", async () => { const document = parseYamlToDocument( outdent` openapi: "3.1.0" info: version: 1.0.0 title: Swagger Petstore description: Information about Petstore license: name: MIT url: https://opensource.org/licenses/MIT servers: - url: http://petstore.swagger.io/v1 paths: /pets: get: summary: List all pets operationId: listPets tags: - pets responses: 200: description: An paged array of pets content: application/json: schema: type: string const: ABC `, 'foobar.yaml', ); const results = await lintDocument({ externalRefResolver: new BaseResolver(), document, config: makeConfig({ spec: 'error' }), }); expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`); }); });