Implement IMimeMessageData (#1326)

* Implement IMimeMessageData

* 1

* Update src/WireMock.Net.MimePart/Util/MimeKitUtils.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* v1

* v2

* e

* ?

* fix

* if (Array.TrueForAll(_funcs, func => func(value).IsPerfect()))

* Update src/WireMock.Net.Shared/Util/IMimeKitUtils.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/WireMock.Net.Minimal/Matchers/Request/RequestMessageMultiPartMatcher.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/WireMock.Net.MimePart/Models/MimeEntityDataWrapper.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Models.Mime.IMimeMessageData? BodyAsMimeMessage { get; }

* Update src/WireMock.Net.MimePart/Util/MimeKitUtils.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/WireMock.Net.MimePart/Models/MimePartDataWrapper.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/WireMock.Net.MimePart/Models/MimeMessageDataWrapper.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update src/WireMock.Net.Shared/Util/IMimeKitUtils.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* .

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Stef Heyenrath
2025-07-12 09:54:18 +02:00
committed by GitHub
parent 6c61f87ef3
commit b0076b4e81
18 changed files with 851 additions and 49 deletions

View File

@@ -9,6 +9,8 @@ using System.Text;
using MimeKit;
using Stef.Validation;
using WireMock.Http;
using WireMock.Models;
using WireMock.Models.Mime;
using WireMock.Types;
namespace WireMock.Util;
@@ -16,13 +18,13 @@ namespace WireMock.Util;
internal class MimeKitUtils : IMimeKitUtils
{
/// <inheritdoc />
public object LoadFromStream(Stream stream)
public IMimeMessageData LoadFromStream(Stream stream)
{
return MimeMessage.Load(Guard.NotNull(stream));
return new MimeMessageDataWrapper(MimeMessage.Load(Guard.NotNull(stream)));
}
/// <inheritdoc />
public bool TryGetMimeMessage(IRequestMessage requestMessage, [NotNullWhen(true)] out object? mimeMessage)
public bool TryGetMimeMessage(IRequestMessage requestMessage, [NotNullWhen(true)] out IMimeMessageData? mimeMessageData)
{
Guard.NotNull(requestMessage);
@@ -44,26 +46,14 @@ internal class MimeKitUtils : IMimeKitUtils
var fixedBytes = FixBytes(bytes, contentTypeHeader[0]);
mimeMessage = LoadFromStream(new MemoryStream(fixedBytes));
mimeMessageData = LoadFromStream(new MemoryStream(fixedBytes));
return true;
}
mimeMessage = null;
mimeMessageData = null;
return false;
}
/// <inheritdoc />
public IReadOnlyList<object> GetBodyParts(object mimeMessage)
{
if (mimeMessage is not MimeMessage mm)
{
throw new ArgumentException($"The mimeMessage must be of type {nameof(MimeMessage)}", nameof(mimeMessage));
}
return mm.BodyParts
.OfType<MimePart>()
.ToArray();
}
private static bool StartsWithMultiPart(WireMockList<string> contentTypeHeader)
{