diff --git a/src/Kiota.Builder/Writers/Ruby/CodeMethodWriter.cs b/src/Kiota.Builder/Writers/Ruby/CodeMethodWriter.cs index cb09aad327..46b0307c27 100644 --- a/src/Kiota.Builder/Writers/Ruby/CodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/Ruby/CodeMethodWriter.cs @@ -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})"); } diff --git a/tests/Kiota.Builder.Tests/Writers/Ruby/CodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Ruby/CodeMethodWriterTests.cs index f8bb18b095..18e81e022b 100644 --- a/tests/Kiota.Builder.Tests/Writers/Ruby/CodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Ruby/CodeMethodWriterTests.cs @@ -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);