Skip to content

Commit b2249c0

Browse files
authored
Merge pull request #248 from MartinM85/fix/247-multipartbody-serialization
When MultipartBody is serialized the values are generated with CRLF
2 parents 0787139 + 8dbcd9e commit b2249c0

4 files changed

Lines changed: 49 additions & 11 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [1.9.4] - 2024-05-31
11+
12+
### Changed
13+
14+
- Fix MultipartBody serialization
15+
1016
## [1.9.3] - 2024-05-28
1117

1218
### Changed

Microsoft.Kiota.Abstractions.Tests/MultipartBodyTests.cs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.Kiota.Abstractions.Serialization;
1+
using System.IO;
2+
using Microsoft.Kiota.Abstractions.Serialization;
23
using Moq;
34
using Xunit;
45

@@ -10,10 +11,22 @@ public class MultipartBodyTests
1011
public void KeepsFilename()
1112
{
1213
var writerMock = new Mock<ISerializationWriter>();
14+
var jsonWriterMock = new Mock<ISerializationWriter>();
1315
var requestAdapterMock = new Mock<IRequestAdapter>();
1416
var serializationFactoryMock = new Mock<ISerializationWriterFactory>();
1517

1618
var body = new MultipartBody();
19+
jsonWriterMock.Setup(w => w.WriteStringValue("", "fileContent"));
20+
using var ms = new MemoryStream();
21+
using var sr = new StreamWriter(ms);
22+
23+
sr.Write("fileContent");
24+
sr.Flush();
25+
jsonWriterMock.Setup(w => w.GetSerializedContent()).Returns(ms);
26+
27+
serializationFactoryMock
28+
.Setup(r => r.GetSerializationWriter("application/json"))
29+
.Returns(jsonWriterMock.Object);
1730

1831
requestAdapterMock
1932
.Setup(r => r.SerializationWriterFactory)
@@ -24,7 +37,7 @@ public void KeepsFilename()
2437
writerMock.Setup(w => w.WriteStringValue("", "--" + body.Boundary));
2538
writerMock.Setup(w => w.WriteStringValue("Content-Type", "application/json"));
2639
writerMock.Setup(w => w.WriteStringValue("Content-Disposition", "form-data; name=\"file\"; filename=\"file.json\""));
27-
writerMock.Setup(w => w.WriteStringValue("", "fileContent"));
40+
writerMock.Setup(w => w.WriteByteArrayValue("", ms.ToArray()));
2841
writerMock.Setup(w => w.WriteStringValue("", ""));
2942
writerMock.Setup(w => w.WriteStringValue("", "--" + body.Boundary + "--"));
3043

@@ -40,10 +53,22 @@ public void KeepsFilename()
4053
public void WorksWithoutFilename()
4154
{
4255
var writerMock = new Mock<ISerializationWriter>();
56+
var jsonWriterMock = new Mock<ISerializationWriter>();
4357
var requestAdapterMock = new Mock<IRequestAdapter>();
4458
var serializationFactoryMock = new Mock<ISerializationWriterFactory>();
4559

4660
var body = new MultipartBody();
61+
jsonWriterMock.Setup(w => w.WriteStringValue("", "fileContent"));
62+
using var ms = new MemoryStream();
63+
using var sr = new StreamWriter(ms);
64+
65+
sr.Write("fileContent");
66+
sr.Flush();
67+
jsonWriterMock.Setup(w => w.GetSerializedContent()).Returns(ms);
68+
69+
serializationFactoryMock
70+
.Setup(r => r.GetSerializationWriter("application/json"))
71+
.Returns(jsonWriterMock.Object);
4772

4873
requestAdapterMock
4974
.Setup(r => r.SerializationWriterFactory)
@@ -54,7 +79,7 @@ public void WorksWithoutFilename()
5479
writerMock.Setup(w => w.WriteStringValue("", "--" + body.Boundary));
5580
writerMock.Setup(w => w.WriteStringValue("Content-Type", "application/json"));
5681
writerMock.Setup(w => w.WriteStringValue("Content-Disposition", "form-data; name=\"file\""));
57-
writerMock.Setup(w => w.WriteStringValue("", "fileContent"));
82+
writerMock.Setup(w => w.WriteByteArrayValue("", ms.ToArray()));
5883
writerMock.Setup(w => w.WriteStringValue("", ""));
5984
writerMock.Setup(w => w.WriteStringValue("", "--" + body.Boundary + "--"));
6085

src/Microsoft.Kiota.Abstractions.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<PackageProjectUrl>https://aka.ms/kiota/docs</PackageProjectUrl>
1616
<EmbedUntrackedSources>true</EmbedUntrackedSources>
1717
<Deterministic>true</Deterministic>
18-
<VersionPrefix>1.9.3</VersionPrefix>
18+
<VersionPrefix>1.9.4</VersionPrefix>
1919
<VersionSuffix></VersionSuffix>
2020
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
2121
<SignAssembly>false</SignAssembly>

src/MultipartBody.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,16 +139,13 @@ public void Serialize(ISerializationWriter writer)
139139
{
140140
using var partWriter = RequestAdapter.SerializationWriterFactory.GetSerializationWriter(part.ContentType);
141141
partWriter.WriteObjectValue(string.Empty, parsable);
142-
using var partContent = partWriter.GetSerializedContent();
143-
if(partContent.CanSeek)
144-
partContent.Seek(0, SeekOrigin.Begin);
145-
using var ms = new MemoryStream();
146-
partContent.CopyTo(ms);
147-
writer.WriteByteArrayValue(string.Empty, ms.ToArray());
142+
WriteSerializedContent(writer, partWriter);
148143
}
149144
else if(part.Content is string currentString)
150145
{
151-
writer.WriteStringValue(string.Empty, currentString);
146+
using var partWriter = RequestAdapter.SerializationWriterFactory.GetSerializationWriter(part.ContentType);
147+
partWriter.WriteStringValue(string.Empty, currentString);
148+
WriteSerializedContent(writer, partWriter);
152149
}
153150
else if(part.Content is MemoryStream originalMemoryStream)
154151
{
@@ -184,6 +181,16 @@ private void AddNewLine(ISerializationWriter writer)
184181
writer.WriteStringValue(string.Empty, string.Empty);
185182
}
186183

184+
private void WriteSerializedContent(ISerializationWriter writer, ISerializationWriter partWriter)
185+
{
186+
using var partContent = partWriter.GetSerializedContent();
187+
if(partContent.CanSeek)
188+
partContent.Seek(0, SeekOrigin.Begin);
189+
using var ms = new MemoryStream();
190+
partContent.CopyTo(ms);
191+
writer.WriteByteArrayValue(string.Empty, ms.ToArray());
192+
}
193+
187194
private class Part
188195
{
189196
public Part(string name, object content, string contentType, string? fileName)

0 commit comments

Comments
 (0)