UNPKG

@redocly/openapi-core

Version:

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

210 lines (199 loc) 7.05 kB
import { outdent } from 'outdent'; import { lintDocument } from '../../../lint'; import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils'; import { BaseResolver } from '../../../resolve'; describe('Arazzo workflow-dependsOn', () => { const document = parseYamlToDocument( outdent` arazzo: '1.0.1' info: title: Cool API version: 1.0.0 description: A cool API sourceDescriptions: - name: museum-api type: openapi url: openapi.yaml workflows: - workflowId: get-museum-hours description: This workflow demonstrates how to get the museum opening hours and buy tickets. dependsOn: - get-museum-hours-2 - get-museum-hours-3 - get-museum-hours-2 parameters: - in: header name: Authorization value: Basic Og== steps: - stepId: get-museum-hours description: >- Get museum hours by resolving request details with getMuseumHours operationId from openapi.yaml description. operationId: museum-api.getMuseumHours successCriteria: - condition: $statusCode == 200 - workflowId: get-museum-hours-2 description: This workflow demonstrates how to get the museum opening hours and buy tickets. parameters: - in: header name: Authorization value: Basic Og== steps: - stepId: get-museum-hours description: >- Get museum hours by resolving request details with getMuseumHours operationId from openapi.yaml description. operationId: museum-api.getMuseumHours successCriteria: - condition: $statusCode == 200 - workflowId: get-museum-hours-3 description: This workflow demonstrates how to get the museum opening hours and buy tickets. parameters: - in: header name: Authorization value: Basic Og== steps: - stepId: get-museum-hours description: >- Get museum hours by resolving request details with getMuseumHours operationId from openapi.yaml description. operationId: museum-api.getMuseumHours successCriteria: - condition: $statusCode == 200 `, 'arazzo.yaml' ); const documentWithNotExistingWorkflows = parseYamlToDocument( outdent` arazzo: 1.0.1 info: title: Redocly Museum API Test Workflow description: >- Use the Museum API with Arazzo as an example of describing multi-step workflows. Built with love by Redocly. version: 1.0.0 sourceDescriptions: - name: museum-api type: openapi url: ../openapi.yaml - name: tickets-from-museum-api type: arazzo url: museum-tickets.arazzo.yaml workflows: - workflowId: get-museum-hours dependsOn: - events-crud - events-crus - $sourceDescriptions.tickets-from-museum-apis.workflows.get-museum-tickets description: >- This workflow demonstrates how to get the museum opening hours and buy tickets. parameters: - in: header name: Authorization value: Basic Og== steps: - stepId: get-museum-hours description: >- Get museum hours by resolving request details with getMuseumHours operationId from openapi.yaml description. operationId: museum-api.getMuseumHours successCriteria: - condition: $statusCode == 200 outputs: schedule: $response.body - stepId: buy-ticket description: >- Buy a ticket for the museum by calling an external workflow from another Arazzo file. workflowId: $sourceDescriptions.tickets-from-museum-api.workflows.get-museum-tickets outputs: ticketId: $outputs.ticketId - workflowId: events-crud description: >- This workflow demonstrates how to list, create, update, and delete special events at the museum. parameters: - in: header name: Authorization value: Basic Og== steps: - stepId: list-events description: >- Request the list of events. operationPath: $sourceDescriptions.museum-api#/paths/~1special-events/get outputs: events: $response.body `, 'arazzo.yaml' ); it('should report on dependsOn unique violation', async () => { const results = await lintDocument({ externalRefResolver: new BaseResolver(), document, config: await makeConfig({ rules: { 'workflow-dependsOn': 'error' }, }), }); expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(` [ { "location": [ { "pointer": "#/workflows/0/dependsOn", "reportOnKey": false, "source": "arazzo.yaml", }, ], "message": "Every workflow in dependsOn must be unique.", "ruleId": "workflow-dependsOn", "severity": "error", "suggest": [], }, ] `); }); it('should not report on dependsOn unique violation', async () => { const results = await lintDocument({ externalRefResolver: new BaseResolver(), document, config: await makeConfig({ rules: { 'workflow-dependsOn': 'off' }, }), }); expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`); }); it('should report on not existing workflows in dependsOn', async () => { const results = await lintDocument({ externalRefResolver: new BaseResolver(), document: documentWithNotExistingWorkflows, config: await makeConfig({ rules: { 'workflow-dependsOn': 'error' }, }), }); expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(` [ { "location": [ { "pointer": "#/workflows/0/dependsOn/1", "reportOnKey": false, "source": "arazzo.yaml", }, ], "message": "Workflow events-crus must be defined in workflows.", "ruleId": "workflow-dependsOn", "severity": "error", "suggest": [], }, { "location": [ { "pointer": "#/workflows/0/dependsOn/2", "reportOnKey": false, "source": "arazzo.yaml", }, ], "message": "SourceDescription tickets-from-museum-apis must be defined in sourceDescriptions.", "ruleId": "workflow-dependsOn", "severity": "error", "suggest": [], }, ] `); }); });