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