public void When_controller_has_operation_with_complextype_then_abstractcontroller_is_generated_with_frombody_attribute()
        {
            //// Arrange
            var document = GetOpenApiDocument();
            var settings = new CSharpControllerGeneratorSettings
            {
                ControllerStyle = CSharpControllerStyle.Abstract,
            };

            //// Act
            var codeGen = new CSharpControllerGenerator(document, settings);
            var code    = codeGen.GenerateFile();

            //// Assert
            Assert.Contains("abstract class TestController", code);
            Assert.Contains($"Complex([Microsoft.AspNetCore.Mvc.FromBody] ComplexType complexType)", code);
            Assert.Contains("Foo(string test, bool? test2)", code);
            Assert.Contains("Bar()", code);
        }
Esempio n. 2
0
        public async Task When_success_responses_are_wrapped_then_SwaggerResponse_is_returned_web_api_aspnetcore()
        {
            // Arrange
            var swaggerGen = new WebApiOpenApiDocumentGenerator(new WebApiOpenApiDocumentGeneratorSettings
            {
                IsAspNetCore = true
            });
            var document = await swaggerGen.GenerateForControllerAsync <TestController>();

            // Act
            var codeGen = new CSharpControllerGenerator(document, new CSharpControllerGeneratorSettings
            {
                WrapResponses = true,
            });
            var code = codeGen.GenerateFile();

            // Assert
            Assert.Contains("System.Threading.Tasks.Task<Microsoft.AspNetCore.Mvc.IActionResult>", code);
        }
        public async Task When_controllerstyleispartial_and_usecancellationtokenistrue_and_requesthasparameter_then_cancellationtoken_is_added()
        {
            // Arrange
            var swaggerGen = new WebApiOpenApiDocumentGenerator(new WebApiOpenApiDocumentGeneratorSettings());
            var document   = await swaggerGen.GenerateForControllerAsync <TestController>();

            // Act
            var codeGen = new CSharpControllerGenerator(document, new CSharpControllerGeneratorSettings
            {
                UseCancellationToken = true
            });
            var code = codeGen.GenerateFile();

            // Assert
            Assert.Contains("System.Threading.Tasks.Task<string> FooAsync(string test, bool test2, " +
                            "System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))", code);
            Assert.Contains("_implementation.FooAsync(test, test2, cancellationToken);", code);
            Assert.Contains("public System.Threading.Tasks.Task<string> Foo([Microsoft.AspNetCore.Mvc.FromQuery] string test, [Microsoft.AspNetCore.Mvc.FromQuery] bool test2, " +
                            "System.Threading.CancellationToken cancellationToken)", code);
        }
Esempio n. 4
0
        public void When_controller_has_operations_with_required_parameters_then_partialcontroller_is_generated_with_bindrequired_attribute()
        {
            //// Arrange
            var document = GetOpenApiDocument();
            var settings = new CSharpControllerGeneratorSettings
            {
                GenerateModelValidationAttributes = true,
            };

            //// Act
            var codeGen = new CSharpControllerGenerator(document, settings);
            var code    = codeGen.GenerateFile();

            //// Assert
            Assert.Contains("partial class TestController", code);
            Assert.Contains($"Complex([Microsoft.AspNetCore.Mvc.FromBody] ComplexType complexType)", code);
            Assert.Contains($"ComplexRequired([Microsoft.AspNetCore.Mvc.FromBody] [Microsoft.AspNetCore.Mvc.ModelBinding.BindRequired] ComplexType complexType)", code);
            Assert.Contains($"Foo([Microsoft.AspNetCore.Mvc.FromQuery] string test, [Microsoft.AspNetCore.Mvc.FromQuery] bool? test2)", code);
            Assert.Contains($"FooRequired([Microsoft.AspNetCore.Mvc.FromQuery] [Microsoft.AspNetCore.Mvc.ModelBinding.BindRequired] string test, [Microsoft.AspNetCore.Mvc.FromQuery] [Microsoft.AspNetCore.Mvc.ModelBinding.BindRequired] bool test2)", code);
            Assert.Contains($"HeaderParamRequired([Microsoft.AspNetCore.Mvc.FromHeader(Name = \"comes-from-header\")] [Microsoft.AspNetCore.Mvc.ModelBinding.BindRequired] string comes_from_header)", code);
            Assert.Contains("Bar()", code);
        }
Esempio n. 5
0
        public async Task when_body_is_a_schema_then_schema_is_used_as_parameter_in_CSharp_ASPNetCore()
        {
            var yaml = @"openapi: 3.0.0
servers:
  - url: https://www.example.com/
info:
  version: '2.0.0'
  title: 'Test API'   
paths:
  /files:
    post:
      tags:
        - Files
      summary: 'Add File'
      operationId: addFile
      responses:
        '200':
          description: 'something'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileToken'
      requestBody:
       content:
         multipart/form-data:
           schema:
             $ref: '#/components/schemas/UploadRequest'
components:
  schemas:
    FileToken:
      type: object
      required:
        - fileId    
      properties:  
        fileId:
          type: string
          format: uuid
    UploadRequest:
      type: object
      required:
        - file
      properties:
        file:
          type: string
          format: binary
        orderId:
          type: string
          format: uuid";

            var document = await OpenApiYamlDocument.FromYamlAsync(yaml);

            //// Act
            CSharpControllerGeneratorSettings settings = new CSharpControllerGeneratorSettings();

            settings.ControllerTarget = CSharpControllerTarget.AspNetCore;
            var codeGenerator = new CSharpControllerGenerator(document, settings);
            var code          = codeGenerator.GenerateFile();

            //// Assert
            Assert.Contains("UploadRequest body", code);
            Assert.Contains("public partial class UploadRequest", code);
            Assert.DoesNotContain("FromBody]", code);
        }
 /// <summary>Initializes a new instance of the <see cref="CSharpControllerOperationModel" /> class.</summary>
 /// <param name="operation">The operation.</param>
 /// <param name="settings">The settings.</param>
 /// <param name="generator">The generator.</param>
 /// <param name="resolver">The resolver.</param>
 public CSharpControllerOperationModel(OpenApiOperation operation, CSharpControllerGeneratorSettings settings,
                                       CSharpControllerGenerator generator, CSharpTypeResolver resolver)
     : base(operation, settings, generator, resolver)
 {
     _settings = settings;
 }
Esempio n. 7
0
        public void When_parameter_has_default_then_set_in_partial_controller()
        {
            //// Arrange
            var document = new OpenApiDocument();

            document.Paths["foo/bar"] = new OpenApiPathItem
            {
                {
                    OpenApiOperationMethod.Get,
                    new OpenApiOperation {
                        Parameters =
                        {
                            new OpenApiParameter {
                                Name       = "booldef",
                                IsRequired = false,
                                Default    = true,
                                Kind       = OpenApiParameterKind.Query,
                                Type       = JsonObjectType.Boolean
                            },
                            new OpenApiParameter {
                                Name       = "intdef",
                                IsRequired = false,
                                Default    = 42,
                                Kind       = OpenApiParameterKind.Query,
                                Type       = JsonObjectType.Integer
                            },
                            new OpenApiParameter {
                                Name       = "bar",
                                IsRequired = false,
                                Kind       = OpenApiParameterKind.Query,
                                Type       = JsonObjectType.Integer
                            },
                            new OpenApiParameter {
                                Name       = "doubledef",
                                IsRequired = false,
                                Default    = 0.6822871999174,
                                Kind       = OpenApiParameterKind.Query,
                                Type       = JsonObjectType.Number
                            },
                            new OpenApiParameter {
                                Name       = "decdef",
                                IsRequired = false,
                                Default    = 79228162514264337593543950335M,
                                Kind       = OpenApiParameterKind.Query,
                                Type       = JsonObjectType.Number,
                                Format     = JsonFormatStrings.Decimal
                            },
                            new OpenApiParameter {
                                Name       = "abc",
                                IsRequired = true,
                                Default    = 84,
                                Kind       = OpenApiParameterKind.Query,
                                Type       = JsonObjectType.Integer
                            },
                            new OpenApiParameter {
                                Name       = "strdef",
                                Default    = @"default""string""",
                                IsRequired = false,
                                Kind       = OpenApiParameterKind.Query,
                                Type       = JsonObjectType.String
                            }
                        }
                    }
                }
            };

            //// Act
            var generator =
                new CSharpControllerGenerator(document,
                                              new CSharpControllerGeneratorSettings {
                GenerateOptionalParameters = true
            });
            var code = generator.GenerateFile();

            //// Assert
            Assert.Contains("_implementation.BarAsync(abc, booldef ?? true, intdef ?? 42, doubledef ?? 0.6822871999174D, decdef ?? 79228162514264337593543950335M, strdef ?? \"default\\\"string\\\"\", bar)", code);
            Assert.Contains("BarAsync(int abc, bool booldef, int intdef, double doubledef, decimal decdef, string strdef, int? bar = null);", code);

            var trimmedCode = RemoveExternalReferences(code);

            //CompilerParameters parameters = new CompilerParameters { GenerateInMemory = true };

            //var result = new CSharpCodeProvider().CompileAssemblyFromSource(parameters, trimmedCode);
            //if (result.Errors.Count > 0)
            //{
            //    foreach (var error in result.Errors)
            //    {
            //        Console.WriteLine(error.ToString());
            //    }
            //}

            //Assert.True(result.Errors.Count == 0);
        }