Esempio n. 1
0
        public async Task When_body_has_multiple_parameters_then_all_parameter_is_used_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:
             type: object
             required:
               - file
             properties:
               file:
                  type: string
                  format: binary
               id:
                 type: string
                 format: uuid
components:
  schemas:
    FileToken:
      type: object
      required:
        - fileId    
      properties:  
        fileId:
          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("id", code);
            Assert.DoesNotContain("FromBody]", code);
        }
Esempio n. 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="outputFile"></param>
        /// <param name="handler"></param>
        /// <returns></returns>
        public NSwagRunner GenerateCSharpController(FilePath outputFile, Action <CSharpControllerGeneratorSettings> handler)
        {
            var settings = new CSharpControllerGeneratorSettings();

            handler?.Invoke(settings);
            return(GenerateCSharpController(outputFile, settings));
        }
Esempio n. 3
0
        public async Task <IActionResult> GenerateCSharpServer(GenerateCSharpServerRequest request)
        {
            try
            {
                OpenApiDocument document;
                try
                {
                    document = await OpenApiDocument.FromUrlAsync(request.SwaggerContractEndpoint.AbsoluteUri);
                }
                catch (HttpRequestException ex)
                {
                    return(StatusCode(404, ex.Message));
                }

                var settings = new CSharpControllerGeneratorSettings
                {
                    ClassName = "{controller}Server",
                };

                var generator = new CSharpControllerGenerator(document, settings);
                var code      = generator.GenerateFile();
                return(StatusCode(200, code));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, new ServerError500Response(ex)
                {
                    Endpoint = request.SwaggerContractEndpoint
                }));
            }
        }
Esempio n. 4
0
        public void When_controllertarget_aspnet_and_multiple_controllers_then_only_single_custom_fromheader_generated()
        {
            //// Arrange
            var document = GetOpenApiDocument();
            var settings = new CSharpControllerGeneratorSettings
            {
                ControllerTarget       = CSharpControllerTarget.AspNet,
                ControllerStyle        = CSharpControllerStyle.Abstract,
                OperationNameGenerator = new MultipleClientsFromFirstTagAndPathSegmentsOperationNameGenerator()
            };

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

            //// Assert
            var fromHeaderCustomAttributeCount = Regex.Matches(code, "public class FromHeaderAttribute :").Count;

            Assert.Equal(1, fromHeaderCustomAttributeCount);
            var fromHeaderCustomBindingCount = Regex.Matches(code, "public class FromHeaderBinding :").Count;

            Assert.Equal(1, fromHeaderCustomBindingCount);
            Assert.Contains("[FromHeader", code);
            Assert.DoesNotContain("[Microsoft.AspNetCore.Mvc.FromHeader", code);
        }
Esempio n. 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="outputFile"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        public NSwagRunner GenerateCSharpController(FilePath outputFile, CSharpControllerGeneratorSettings settings = null)
        {
            settings = settings ?? new CSharpControllerGeneratorSettings();
            var generator = new CSharpControllerGenerator(Document, settings);

            WriteToFile(outputFile, generator.GenerateFile());
            return(this);
        }
Esempio n. 6
0
        public async Task When_custom_BasePath_is_not_specified_then_the_BasePath_from_document_is_used_as_Route()
        {
            //// Arrange
            var document = await OpenApiDocument.FromJsonAsync(_swagger);

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

            //// Assert
            Assert.Contains("Route(\"virtual_directory/v1\")]", code);
        }
        /// <summary>Initializes a new instance of the <see cref="CSharpControllerTemplateModel" /> class.</summary>
        /// <param name="controllerName">Name of the controller.</param>
        /// <param name="operations">The operations.</param>
        /// <param name="document">The document.</param>
        /// <param name="settings">The settings.</param>
        public CSharpControllerTemplateModel(
            string controllerName,
            IEnumerable <CSharpOperationModel> operations,
            OpenApiDocument document,
            CSharpControllerGeneratorSettings settings)
            : base(controllerName, settings)
        {
            _document = document;
            _settings = settings;

            Class      = controllerName;
            Operations = operations;

            BaseClass = _settings.ControllerBaseClass?.Replace("{controller}", controllerName);
        }
Esempio n. 8
0
        public void When_controller_has_operation_with_complextype_then_partialcontroller_is_generated_with_frombody_attribute()
        {
            //// Arrange
            var document = GetOpenApiDocument();
            var settings = new CSharpControllerGeneratorSettings();

            //// 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("Foo([Microsoft.AspNetCore.Mvc.FromQuery] string test, [Microsoft.AspNetCore.Mvc.FromQuery] bool? test2)", code);
            Assert.Contains("Bar()", code);
        }
Esempio n. 9
0
        public void When_controller_has_operation_with_header_parameter_then_partialcontroller_is_generated_with_fromheader_attribute()
        {
            //// Arrange
            var document = GetOpenApiDocument();
            var settings = new CSharpControllerGeneratorSettings
            {
                ControllerTarget = CSharpControllerTarget.AspNet
            };

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

            //// Assert
            Assert.Contains("partial class TestController", code);
            Assert.Contains($"HeaderParam([FromHeader] string comesFromHeader)", code);
        }
Esempio n. 10
0
        public void When_the_generation_of_dto_classes_are_disabled_then_file_is_generated_without_any_dto_clasess()
        {
            //// Arrange
            var document = GetOpenApiDocument();
            var settings = new CSharpControllerGeneratorSettings
            {
                GenerateDtoTypes = false
            };

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

            //// Assert
            Assert.DoesNotContain("public partial class ComplexType", code);
            Assert.DoesNotContain("public partial class ComplexTypeResponse", code);
        }
Esempio n. 11
0
        public void When_controllerroutenamingstrategy_none_then_route_attribute_name_not_specified()
        {
            //// Arrange
            var document = GetOpenApiDocument();
            var settings = new CSharpControllerGeneratorSettings
            {
                RouteNamingStrategy = CSharpControllerRouteNamingStrategy.None
            };

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

            //// Assert
            Assert.Contains("Route(\"Foo\")", code);
            Assert.Contains("Route(\"Bar\")", code);
        }
Esempio n. 12
0
        public void When_controllertarget_aspnetcore_then_use_builtin_fromheader()
        {
            //// Arrange
            var document = GetOpenApiDocument();
            var settings = new CSharpControllerGeneratorSettings
            {
                ControllerTarget = CSharpControllerTarget.AspNetCore
            };

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

            //// Assert
            Assert.Contains("[Microsoft.AspNetCore.Mvc.FromHeader", code);
            Assert.DoesNotContain("[FromHeader", code);
            Assert.DoesNotContain("public class FromHeaderBinding :", code);
            Assert.DoesNotContain("public class FromHeaderAttribute :", code);
        }
Esempio n. 13
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);
        }
 /// <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;
 }