コード例 #1
0
        public async Task When_controllertarget_aspnet_and_multiple_controllers_then_only_single_custom_fromheader_generated()
        {
            //// Arrange
            var document = await GetSwaggerDocument();

            var settings = new SwaggerToCSharpControllerGeneratorSettings
            {
                ControllerTarget       = CSharpControllerTarget.AspNet,
                ControllerStyle        = CSharpControllerStyle.Abstract,
                OperationNameGenerator = new MultipleClientsFromFirstTagAndPathSegmentsOperationNameGenerator()
            };

            //// Act
            var codeGen = new SwaggerToCSharpControllerGenerator(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);
        }
コード例 #2
0
        /// <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,
            SwaggerDocument document,
            SwaggerToCSharpControllerGeneratorSettings settings)
            : base(controllerName, settings)
        {
            _document = document;
            _settings = settings;

            Class      = controllerName;
            Operations = operations;

            BaseClass = _settings.ControllerBaseClass?.Replace("{controller}", controllerName);
        }
コード例 #3
0
        public async Task When_controller_has_operation_with_complextype_then_partialcontroller_is_generated_with_frombody_attribute()
        {
            //// Arrange
            var document = await GetSwaggerDocument();

            var settings = new SwaggerToCSharpControllerGeneratorSettings();

            //// Act
            var codeGen = new SwaggerToCSharpControllerGenerator(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(string test, bool? test2)", code);
            Assert.Contains("Bar()", code);
        }
コード例 #4
0
        public async Task When_the_generation_of_dto_classes_are_disabled_then_file_is_generated_without_any_dto_clasess()
        {
            //// Arrange
            var document = await GetSwaggerDocument();

            var settings = new SwaggerToCSharpControllerGeneratorSettings
            {
                GenerateDtoTypes = false
            };

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

            //// Assert
            Assert.DoesNotContain("public partial class ComplexType", code);
            Assert.DoesNotContain("public partial class ComplexTypeResponse", code);
        }
コード例 #5
0
        public async Task When_controllerroutenamingstrategy_none_then_route_attribute_name_not_specified()
        {
            //// Arrange
            var document = await GetSwaggerDocument();

            var settings = new SwaggerToCSharpControllerGeneratorSettings
            {
                RouteNamingStrategy = CSharpControllerRouteNamingStrategy.None
            };

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

            //// Assert
            Assert.Contains("Route(\"Foo\")", code);
            Assert.Contains("Route(\"Bar\")", code);
        }
コード例 #6
0
        public async Task When_controller_has_operation_with_header_parameter_then_partialcontroller_is_generated_with_fromheader_attribute()
        {
            //// Arrange
            var document = await GetSwaggerDocument();

            var settings = new SwaggerToCSharpControllerGeneratorSettings
            {
                ControllerTarget = CSharpControllerTarget.AspNet
            };

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

            //// Assert
            Assert.Contains("partial class TestController", code);
            Assert.Contains($"HeaderParam([FromHeader] string comesFromHeader)", code);
        }
コード例 #7
0
        public async Task When_controllerroutenamingstrategy_operationid_then_route_attribute_name_specified()
        {
            //// Arrange
            var swaggerGen = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings());
            var document   = await swaggerGen.GenerateForControllerAsync <TestController>();

            var settings = new SwaggerToCSharpControllerGeneratorSettings
            {
                RouteNamingStrategy = CSharpControllerRouteNamingStrategy.OperationId
            };

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

            //// Assert
            Assert.Contains("Route(\"Foo\", Name = \"Test_Foo\")", code);
            Assert.Contains("Route(\"Bar\", Name = \"Test_Bar\")", code);
        }
コード例 #8
0
        public async Task When_controllertarget_aspnetcore_then_use_builtin_fromheader()
        {
            //// Arrange
            var document = await GetSwaggerDocument();

            var settings = new SwaggerToCSharpControllerGeneratorSettings
            {
                ControllerTarget = CSharpControllerTarget.AspNetCore
            };

            //// Act
            var codeGen = new SwaggerToCSharpControllerGenerator(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);
        }
コード例 #9
0
        public async Task When_controller_has_operation_with_complextype_then_partialcontroller_is_generated_with_frombody_attribute()
        {
            //// Arrange
            var swaggerGen = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings());
            var document   = await swaggerGen.GenerateForControllerAsync <TestController>();

            var settings = new SwaggerToCSharpControllerGeneratorSettings
            {
                AspNetNamespace = "MyCustomNameSpace"
            };

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

            //// Assert
            Assert.IsTrue(code.Contains("partial class TestController"));
            Assert.IsTrue(code.Contains($"Complex([{settings.AspNetNamespace}.FromBody] ComplexType complexType)"));
            Assert.IsTrue(code.Contains("Foo(string test, bool test2)"));
            Assert.IsTrue(code.Contains("Bar()"));
        }
コード例 #10
0
        public async Task When_controller_has_operation_with_complextype_then_abstractcontroller_is_generated_with_frombody_attribute()
        {
            //// Arrange
            var swaggerGen = new WebApiToSwaggerGenerator(new WebApiToSwaggerGeneratorSettings());
            var document   = await swaggerGen.GenerateForControllerAsync <TestController>();

            var settings = new SwaggerToCSharpControllerGeneratorSettings
            {
                ControllerStyle = CSharpControllerStyle.Abstract,
            };

            //// Act
            var codeGen = new SwaggerToCSharpControllerGenerator(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);
        }
コード例 #11
0
        public async Task When_controller_has_operations_with_required_parameters_then_partialcontroller_is_generated_with_bindrequired_attribute()
        {
            //// Arrange
            var document = await GetSwaggerDocument();

            var settings = new SwaggerToCSharpControllerGeneratorSettings
            {
                GenerateModelValidationAttributes = true,
            };

            //// Act
            var codeGen = new SwaggerToCSharpControllerGenerator(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(string test, bool? test2)", code);
            Assert.Contains($"FooRequired([Microsoft.AspNetCore.Mvc.ModelBinding.BindRequired] string test, [Microsoft.AspNetCore.Mvc.ModelBinding.BindRequired] bool test2)", code);
            Assert.Contains("Bar()", code);
        }
コード例 #12
0
 /// <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(SwaggerOperation operation, SwaggerToCSharpControllerGeneratorSettings settings,
                                       SwaggerToCSharpControllerGenerator generator, CSharpTypeResolver resolver)
     : base(operation, settings, generator, resolver)
 {
     _settings = settings;
 }