Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions src/Refitter.Core/ParameterExtractor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,14 @@ public static IEnumerable<string> GetParameters(
.ToList();
}

var formParameters = operationModel.Parameters
.Where(p => p.Kind == OpenApiParameterKind.FormData && !p.IsBinaryBodyParameter)
.Select(p =>
$"{GetParameterType(p, settings)} {p.VariableName}")
.ToList();

var binaryBodyParameters = operationModel.Parameters
.Where(p => p.Kind == OpenApiParameterKind.Body && p.IsBinaryBodyParameter || p.IsFile)
.Where(p => p.Kind == OpenApiParameterKind.Body && p.IsBinaryBodyParameter)
.Select(p =>
{
var generatedAliasAsAttribute = string.IsNullOrWhiteSpace(GetAliasAsAttribute(p))
Expand All @@ -56,6 +62,7 @@ public static IEnumerable<string> GetParameters(
parameters.AddRange(queryParameters);
parameters.AddRange(bodyParameters);
parameters.AddRange(headerParameters);
parameters.AddRange(formParameters);
parameters.AddRange(binaryBodyParameters);

parameters = ReOrderNullableParameters(parameters, settings);
Expand Down Expand Up @@ -142,7 +149,7 @@ private static string GetQueryParameterType(
}

private static string FindSupportedType(string typeName) =>
typeName == "FileResponse" ? "StreamPart" : typeName;
typeName is "FileResponse" or "FileParameter" ? "StreamPart" : typeName;

private static List<string> GetQueryParameters(CSharpOperationModel operationModel, RefitGeneratorSettings settings, string dynamicQuerystringParameterType, out string? dynamicQuerystringParameters)
{
Expand Down
156 changes: 0 additions & 156 deletions src/Refitter.Tests/Examples/MultiPartFormDataAliasAsTests.cs

This file was deleted.

130 changes: 84 additions & 46 deletions src/Refitter.Tests/Examples/MultiPartFormDataTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using FluentAssertions;

using Refitter.Core;
using Refitter.Tests.Build;

using Xunit;

namespace Refitter.Tests.Examples;
Expand All @@ -9,52 +11,88 @@ public class MultiPartFormDataTests
{
private const string OpenApiSpec = @"
{
""openapi"":""3.0.2"",
""paths"":{
""/foo/{id}/files"":{
""post"":{
""summary"":""uploads a file"",
""operationId"":""uploadFile"",
""parameters"":[
{
""name"":""id"",
""in"":""path"",
""description"":""Id of the foo resource"",
""required"":true,
""schema"":{
""type"":""integer"",
""format"":""int64""
""openapi"": ""3.0.1"",
""paths"": {
""/animals"": {
""post"": {
""tags"": [
""Animals""
],
""requestBody"": {
""content"": {
""multipart/form-data"": {
""schema"": {
""type"": ""object"",
""properties"": {
""Name"": {
""type"": ""string""
},
""AnimalClassFile"": {
""type"": ""string"",
""format"": ""binary""
},
""AnimalCrowdFile"": {
""type"": ""string"",
""format"": ""binary""
}
}
],
""requestBody"":{
""content"":{
""multipart/form-data"":{
""schema"":{
""type"":""object"",
""properties"":{
""formFile"":{
""type"":""string"",
""format"":""binary""
}
}
},
""encoding"":{
""formFile"":{
""style"":""form""
}
}
}
}
},
""responses"":{
""200"":{
""description"":""successful operation""
}
}
},
""encoding"": {
""Name"": {
""style"": ""form""
},
""AnimalClassFile"": {
""style"": ""form""
},
""AnimalCrowdFile"": {
""style"": ""form""
}
}
}
}
},
""responses"": {
""201"": {
""description"": ""Created"",
""content"": {
""application/json"": {
""schema"": {
""$ref"": ""#/components/schemas/AnimalResponse""
}
}
}
}
}
}
}
}
}
},
""components"": {
""schemas"": {
""AnimalResponse"": {
""type"": ""object"",
""properties"": {
""id"": {
""type"": ""string"",
""format"": ""uuid"",
""nullable"": true
},
""Name"": {
""type"": ""string"",
""nullable"": true
},
""AnimalClassFileUri"": {
""type"": ""string"",
""nullable"": true
},
""AnimalCrowdFileUri"": {
""type"": ""string"",
""nullable"": true
}
},
""additionalProperties"": false
}
}
}
}
";

Expand Down Expand Up @@ -83,10 +121,10 @@ public async Task Generated_Code_Contains_MultiPart_Attribute()
}

[Fact]
public async Task Generated_Code_Contains_StreamPart_Parameter()
public async Task Generated_Code_Contains_Correct_Parameters()
{
string generateCode = await GenerateCode();
generateCode.Should().Contain("StreamPart");
generateCode.Should().Contain("string name, StreamPart animalClassFile, StreamPart animalCrowdFile");
}

private static async Task<string> GenerateCode()
Expand All @@ -108,4 +146,4 @@ private static async Task<string> CreateSwaggerFile(string contents)
await File.WriteAllTextAsync(swaggerFile, contents);
return swaggerFile;
}
}
}
Loading