Пример #1
0
        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 _));
        }
Пример #3
0
        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);
        }