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); }
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); }
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); }
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; }
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); }