public void OpenApiWorkspaceCanHoldMultipleDocuments()
        {
            var workspace = new OpenApiWorkspace();

            workspace.AddDocument("root", new OpenApiDocument());
            workspace.AddDocument("common", new OpenApiDocument());

            Assert.Equal(2, workspace.Documents.Count());
        }
        public void OpenApiWorkspacesAllowDocumentsToReferenceEachOther()
        {
            var workspace = new OpenApiWorkspace();

            workspace.AddDocument("root", new OpenApiDocument()
            {
                Paths = new OpenApiPaths()
                {
                    ["/"] = new OpenApiPathItem()
                    {
                        Operations = new Dictionary <OperationType, OpenApiOperation>()
                        {
                            [OperationType.Get] = new OpenApiOperation()
                            {
                                Responses = new OpenApiResponses()
                                {
                                    ["200"] = new OpenApiResponse()
                                    {
                                        Content = new Dictionary <string, OpenApiMediaType>()
                                        {
                                            ["application/json"] = new OpenApiMediaType()
                                            {
                                                Schema = new OpenApiSchema()
                                                {
                                                    Reference = new OpenApiReference()
                                                    {
                                                        Id   = "test",
                                                        Type = ReferenceType.Schema
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            });
            workspace.AddDocument("common", new OpenApiDocument()
            {
                Components = new OpenApiComponents()
                {
                    Schemas =
                    {
                        ["test"] = new OpenApiSchema()
                        {
                        Type        = "string",
                        Description = "The referenced one"
                        }
                    }
                }
            });

            Assert.Equal(2, workspace.Documents.Count());
        }
Ejemplo n.º 3
0
        //[Fact(Skip="Run manually")]
        public void LoadOpen()
        {
            var operations = new[] { "foo","bar" };
            var workspace = new OpenApiWorkspace();
            workspace.AddDocument(graphOpenApiUrl, _graphOpenApi);
            var subset = new OpenApiDocument();
            workspace.AddDocument("subset", subset);

            Assert.NotNull(_graphOpenApi);
        }
        public void OpenApiWorkspacesShouldNormalizeDocumentLocations()
        {
            var workspace = new OpenApiWorkspace();

            workspace.AddDocument("hello", new OpenApiDocument());
            workspace.AddDocument("hi", new OpenApiDocument());

            Assert.True(workspace.Contains("./hello"));
            Assert.True(workspace.Contains("./foo/../hello"));
            Assert.True(workspace.Contains("file://" + Environment.CurrentDirectory + "/./foo/../hello"));

            Assert.False(workspace.Contains("./goodbye"));
        }
        public void OpenApiWorkspacesCanResolveExternalReferences()
        {
            var workspace = new OpenApiWorkspace();

            workspace.AddDocument("common", CreateCommonDocument());
            var schema = workspace.ResolveReference(new OpenApiReference()
            {
                Id               = "test",
                Type             = ReferenceType.Schema,
                ExternalResource = "common"
            }) as OpenApiSchema;

            Assert.NotNull(schema);
            Assert.Equal("The referenced one", schema.Description);
        }
        public void OpenApiWorkspacesCanResolveReferencesToDocumentFragments()
        {
            // Arrange
            var workspace      = new OpenApiWorkspace();
            var schemaFragment = new OpenApiSchema {
                Type = "string", Description = "Schema from a fragment"
            };

            workspace.AddFragment("fragment", schemaFragment);

            // Act
            var schema = workspace.ResolveReference(new OpenApiReference()
            {
                ExternalResource = "fragment"
            }) as OpenApiSchema;

            // Assert
            Assert.NotNull(schema);
            Assert.Equal("Schema from a fragment", schema.Description);
        }
        private async Task ResolveReferencesAsync(OpenApiDiagnostic diagnostic, OpenApiDocument document)
        {
            List <OpenApiError> errors = new List <OpenApiError>();

            // Resolve References if requested
            switch (_settings.ReferenceResolution)
            {
            case ReferenceResolutionSetting.ResolveAllReferences:

                // Create workspace for all documents to live in.
                var openApiWorkSpace = new OpenApiWorkspace();

                // Load this root document into the workspace
                var streamLoader    = new DefaultStreamLoader();
                var workspaceLoader = new OpenApiWorkspaceLoader(openApiWorkSpace, _settings.CustomExternalLoader ?? streamLoader, _settings);
                await workspaceLoader.LoadAsync(new OpenApiReference()
                {
                    ExternalResource = "/"
                }, document);

                // Resolve all references in all the documents loaded into the OpenApiWorkspace
                foreach (var doc in openApiWorkSpace.Documents)
                {
                    errors.AddRange(doc.ResolveReferences(true));
                }
                break;

            case ReferenceResolutionSetting.ResolveLocalReferences:
                errors.AddRange(document.ResolveReferences(false));
                break;

            case ReferenceResolutionSetting.DoNotResolveReferences:
                break;
            }

            foreach (var item in errors)
            {
                diagnostic.Errors.Add(item);
            }
        }
        public void OpenApiWorkspacesAllowDocumentsToReferenceEachOther_short()
        {
            var workspace = new OpenApiWorkspace();

            var doc = new OpenApiDocument();

            doc.CreatePathItem("/", p =>
            {
                p.Description = "Consumer";
                p.CreateOperation(OperationType.Get, op =>
                                  op.CreateResponse("200", re =>
                {
                    re.Description = "Success";
                    re.CreateContent("application/json", co =>
                                     co.Schema = new OpenApiSchema()
                    {
                        Reference = new OpenApiReference()        // Reference
                        {
                            Id               = "test",
                            Type             = ReferenceType.Schema,
                            ExternalResource = "common"
                        },
                        UnresolvedReference = true
                    }
                                     );
                })
                                  );
            });

            workspace.AddDocument("root", doc);
            workspace.AddDocument("common", CreateCommonDocument());
            var errors = doc.ResolveReferences(true);

            Assert.Empty(errors);

            var schema = doc.Paths["/"].Operations[OperationType.Get].Responses["200"].Content["application/json"].Schema;

            Assert.False(schema.UnresolvedReference);
        }
        public void OpenApiWorkspacesCanResolveReferencesToDocumentFragmentsWithJsonPointers()
        {
            // Arrange
            var workspace        = new OpenApiWorkspace();
            var responseFragment = new OpenApiResponse()
            {
                Headers = new Dictionary <string, OpenApiHeader>
                {
                    { "header1", new OpenApiHeader() }
                }
            };

            workspace.AddFragment("fragment", responseFragment);

            // Act
            var resolvedElement = workspace.ResolveReference(new OpenApiReference()
            {
                Id = "headers/header1",
                ExternalResource = "fragment"
            });

            // Assert
            Assert.Same(responseFragment.Headers["header1"], resolvedElement);
        }
Ejemplo n.º 10
0
 public OpenApiWorkspaceLoader(OpenApiWorkspace workspace, IStreamLoader loader, OpenApiReaderSettings readerSettings)
 {
     _workspace      = workspace;
     _loader         = loader;
     _readerSettings = readerSettings;
 }