Skip to content

Commit

Permalink
- adds content type parameter support for ruby
Browse files Browse the repository at this point in the history
  • Loading branch information
baywet committed Oct 11, 2023
1 parent 42e57e1 commit b779c85
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/Kiota.Builder/Writers/Ruby/CodeMethodWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,12 @@ private void WriteRequestGeneratorBody(CodeMethod codeElement, RequestParams req
if (requestParams.requestBody != null)
{
if (requestParams.requestBody.Type.Name.Equals(conventions.StreamTypeName, StringComparison.OrdinalIgnoreCase))
writer.WriteLine($"request_info.set_stream_content({requestParams.requestBody.Name})");
{
if (requestParams.requestContentType is not null)
writer.WriteLine($"request_info.set_stream_content({requestParams.requestBody.Name}, {requestParams.requestContentType.Name})");
else if (!string.IsNullOrEmpty(codeElement.RequestBodyContentType))
writer.WriteLine($"request_info.set_stream_content({requestParams.requestBody.Name}, \"{codeElement.RequestBodyContentType}\")");
}
else if (parentClass.GetPropertyOfKind(CodePropertyKind.RequestAdapter) is CodeProperty requestAdapterProperty)
writer.WriteLine($"request_info.set_content_from_parsable(@{requestAdapterProperty.Name.ToSnakeCase()}, \"{codeElement.RequestBodyContentType}\", {requestParams.requestBody.Name})");
}
Expand Down
50 changes: 50 additions & 0 deletions tests/Kiota.Builder.Tests/Writers/Ruby/CodeMethodWriterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -525,6 +525,56 @@ public void WritesRequestGeneratorBody()
Assert.Contains("return request_info", result);
}
[Fact]
public void WritesRequestGeneratorBodyKnownRequestBodyType()
{
setup();
method.Kind = CodeMethodKind.RequestGenerator;
method.HttpMethod = HttpMethod.Post;
AddRequestProperties();
AddRequestBodyParameters();
method.Parameters.OfKind(CodeParameterKind.RequestBody).Type = new CodeType
{
Name = new RubyConventionService().StreamTypeName,
IsExternal = true,
};
method.RequestBodyContentType = "application/json";
writer.Write(method);
var result = tw.ToString();
Assert.Contains("set_stream_content", result, StringComparison.OrdinalIgnoreCase);
Assert.Contains("application/json", result, StringComparison.OrdinalIgnoreCase);
AssertExtensions.CurlyBracesAreClosed(result);
}
[Fact]
public void WritesRequestGeneratorBodyUnknownRequestBodyType()
{
setup();
method.Kind = CodeMethodKind.RequestGenerator;
method.HttpMethod = HttpMethod.Post;
AddRequestProperties();
AddRequestBodyParameters();
method.Parameters.OfKind(CodeParameterKind.RequestBody).Type = new CodeType
{
Name = new RubyConventionService().StreamTypeName,
IsExternal = true,
};
method.AddParameter(new CodeParameter
{
Name = "request_content_type",
Type = new CodeType()
{
Name = "string",
IsExternal = true,
},
Kind = CodeParameterKind.RequestBodyContentType,
});
writer.Write(method);
var result = tw.ToString();
Assert.Contains("set_stream_content", result, StringComparison.OrdinalIgnoreCase);
Assert.DoesNotContain("application/json", result, StringComparison.OrdinalIgnoreCase);
Assert.Contains(", request_content_type", result, StringComparison.OrdinalIgnoreCase);
AssertExtensions.CurlyBracesAreClosed(result);
}
[Fact]
public void WritesInheritedDeSerializerBody()
{
setup(true);
Expand Down

0 comments on commit b779c85

Please sign in to comment.