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()); }
//[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); }
public OpenApiWorkspaceLoader(OpenApiWorkspace workspace, IStreamLoader loader, OpenApiReaderSettings readerSettings) { _workspace = workspace; _loader = loader; _readerSettings = readerSettings; }