public OpenApiDocument Build(string documentVersion) { OpenApiGeneratorConfig input = new OpenApiGeneratorConfig( annotationXmlDocuments: new List <XDocument>() { XDocument.Load(XDOCUMENT_PATH) }, assemblyPaths: new List <string>() { ASSEMBLY_PATH }, openApiDocumentVersion: documentVersion, filterSetVersion: FilterSetVersion.V1 ); GenerationDiagnostic result; OpenApiGenerator generator = new OpenApiGenerator(); IDictionary <DocumentVariantInfo, OpenApiDocument> documents = generator.GenerateDocuments(input, out result); foreach (OperationGenerationDiagnostic diagnostic in result.OperationGenerationDiagnostics) { foreach (GenerationError error in diagnostic.Errors) { Console.Write("OpenAPI Document Generation Error in " + diagnostic.OperationMethod + " " + diagnostic.Path); Console.Error.WriteLine(error.Message); } } return(documents[DocumentVariantInfo.Default]); }
public void InvalidDocumentationShouldYieldFailure( string testCaseName, IList <string> inputXmlFiles, IList <string> inputBinaryFiles, int expectedOperationGenerationResultsCount, string expectedJsonFile, DocumentGenerationDiagnostic expectedDocumentGenerationResult, IList <OperationGenerationDiagnostic> expectedFailureOperationGenerationResults) { _output.WriteLine(testCaseName); var documents = new List <XDocument>(); documents.AddRange(inputXmlFiles.Select(XDocument.Load)); var input = new OpenApiGeneratorConfig(documents, inputBinaryFiles, "1.0.0", FilterSetVersion.V1); GenerationDiagnostic result; var generator = new OpenApiGenerator(); var openApiDocuments = generator.GenerateDocuments(input, out result); openApiDocuments.Should().NotBeNull(); result.DocumentGenerationDiagnostic.Should().BeEquivalentTo(expectedDocumentGenerationResult); result.OperationGenerationDiagnostics.Count.Should().Be(expectedOperationGenerationResultsCount); openApiDocuments[DocumentVariantInfo.Default].Should().NotBeNull(); var failurePaths = result.OperationGenerationDiagnostics.Where( p => p.Errors.Count > 0) .ToList(); var actualDocument = openApiDocuments[DocumentVariantInfo.Default] .SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); var expectedDocument = File.ReadAllText(expectedJsonFile); _output.WriteLine(actualDocument); failurePaths.Should().BeEquivalentTo(expectedFailureOperationGenerationResults); // We are doing serialization and deserialization to force the resulting actual document // to have the exact fields we will see in the resulting document based on the contract resolver. // Without serialization and deserialization, the actual document may have fields that should // not be present, such as empty list fields. var openApiStringReader = new OpenApiStringReader(); var actualDeserializedDocument = openApiStringReader.Read( actualDocument, out OpenApiDiagnostic diagnostic); diagnostic.Errors.Count.Should().Be(0); actualDeserializedDocument .Should() .BeEquivalentTo(openApiStringReader.Read(expectedDocument, out var _)); }
public void GenerateDocumentWithOperationConfigShouldSucceed( string testCaseName, IList <string> inputXmlFiles, IList <string> inputBinaryFiles, string configXmlFile, int expectedOperationGenerationResultsCount, string expectedJsonFile) { _output.WriteLine(testCaseName); var documents = new List <XDocument>(); documents.AddRange(inputXmlFiles.Select(XDocument.Load)); var configDocument = XDocument.Load(configXmlFile); var generator = new OpenApiGenerator(); var input = new OpenApiGeneratorConfig(documents, inputBinaryFiles, "1.0.0", FilterSetVersion.V1) { AdvancedConfigurationXmlDocument = configDocument }; GenerationDiagnostic result; var openApiDocuments = generator.GenerateDocuments( input, out result); result.Should().NotBeNull(); result.DocumentGenerationDiagnostic.Errors.Count.Should().Be(0); openApiDocuments[DocumentVariantInfo.Default].Should().NotBeNull(); result.OperationGenerationDiagnostics.Count.Should().Be(expectedOperationGenerationResultsCount); var actualDocument = openApiDocuments[DocumentVariantInfo.Default] .SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); var expectedDocument = File.ReadAllText(expectedJsonFile); _output.WriteLine(actualDocument); var openApiStringReader = new OpenApiStringReader(); var actualDeserializedDocument = openApiStringReader.Read( actualDocument, out OpenApiDiagnostic diagnostic); diagnostic.Errors.Count.Should().Be(0); actualDeserializedDocument .Should() .BeEquivalentTo( openApiStringReader.Read(expectedDocument, out var _), o => o.WithStrictOrdering()); }
public void ValidDocumentationShouldReturnCorrectDocument( string testCaseName, IList <string> inputXmlFiles, IList <string> inputBinaryFiles, string openApiDocumentVersion, int expectedOperationGenerationResultsCount, string expectedJsonFile) { _output.WriteLine(testCaseName); var documents = new List <XDocument>(); documents.AddRange(inputXmlFiles.Select(XDocument.Load)); var input = new OpenApiGeneratorConfig( documents, inputBinaryFiles, openApiDocumentVersion, FilterSetVersion.V1); GenerationDiagnostic result; var generator = new OpenApiGenerator(); var openApiDocuments = generator.GenerateDocuments(input, out result); result.Should().NotBeNull(); result.DocumentGenerationDiagnostic.Errors.Count.Should().Be(0); openApiDocuments[DocumentVariantInfo.Default].Should().NotBeNull(); result.OperationGenerationDiagnostics.Count(p => p.Errors.Count > 0).Should().Be(0); result.OperationGenerationDiagnostics.Count.Should().Be(expectedOperationGenerationResultsCount); var actualDocument = openApiDocuments[DocumentVariantInfo.Default] .SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); var expectedDocument = File.ReadAllText(expectedJsonFile); _output.WriteLine(actualDocument); var openApiStringReader = new OpenApiStringReader(); var actualDeserializedDocument = openApiStringReader.Read( actualDocument, out OpenApiDiagnostic diagnostic); diagnostic.Errors.Count.Should().Be(0); actualDeserializedDocument .Should() .BeEquivalentTo(openApiStringReader.Read(expectedDocument, out var _)); }
public void GenerateDocumentMultipleVariantsShouldSucceed( string testCaseName, IList <string> inputXmlFiles, IList <string> inputBinaryFiles, string configXmlFile, int expectedOperationGenerationResultsCount, IDictionary <DocumentVariantInfo, string> documentVariantInfoToExpectedJsonFileMap) { _output.WriteLine(testCaseName); // Arrange var documents = new List <XDocument>(); documents.AddRange(inputXmlFiles.Select(XDocument.Load)); var configPath = configXmlFile; var configDocument = XDocument.Load(configPath); var generator = new OpenApiGenerator(); var input = new OpenApiGeneratorConfig(documents, inputBinaryFiles, "1.0.0", FilterSetVersion.V1) { AdvancedConfigurationXmlDocument = configDocument }; GenerationDiagnostic result; // Act var openApiDocuments = generator.GenerateDocuments(input, out result); result.Should().NotBeNull(); result.DocumentGenerationDiagnostic.Errors.Count.Should().Be(0); result.OperationGenerationDiagnostics.Count(r => r.Errors.Count == 0) .Should() .Be(expectedOperationGenerationResultsCount); openApiDocuments.Keys.Should() .BeEquivalentTo(documentVariantInfoToExpectedJsonFileMap.Keys); var actualDocuments = new List <OpenApiDocument>(); var expectedDocuments = new List <OpenApiDocument>(); foreach (var documentVariantInfoToExpectedJsonFile in documentVariantInfoToExpectedJsonFileMap) { // Verify each document variant against a json file content. var documentVariantInfo = documentVariantInfoToExpectedJsonFile.Key; var expectedJsonFile = documentVariantInfoToExpectedJsonFile.Value; openApiDocuments.TryGetValue(documentVariantInfo, out var specificationDocument); var actualDocumentAsString = specificationDocument.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0); _output.WriteLine(actualDocumentAsString); var openApiStringReader = new OpenApiStringReader(); var actualDeserializedDocument = openApiStringReader.Read( actualDocumentAsString, out OpenApiDiagnostic diagnostic); diagnostic.Errors.Count.Should().Be(0); actualDeserializedDocument .Should() .BeEquivalentTo(openApiStringReader.Read(File.ReadAllText(expectedJsonFile), out var _)); // Bug in fluent assertion method. Comparing the array of documents yields incorrect result. // Root cause unknown. This should be enabled once that bug is resolved. //actualDocuments.Add(actualDocument); //expectedDocuments.Add(expectedDocument); } //actualDocuments.Should().BeEquivalentTo(expectedDocuments); }