Files
WireMock.Net/examples/WireMock.Net.Console.NET7.UsingNuGet/Program.cs
Stef Heyenrath 54edf0bebc Add link to TIOBE Index on main page + fix issues (#1137)
* Add TIOBE + include SonarAnalyzer.CSharp

* .

* cp

* Copyright © WireMock.Net

* more fixes

* fix

* xpath

* if (Matchers == null || !Matchers.Any())

* if (Matchers != null)

* ?

* .

* .
2024-07-18 18:06:04 +02:00

111 lines
3.8 KiB
C#

// Copyright © WireMock.Net
using System.Net;
using System.Net.Http.Headers;
using System.Text;
using FluentAssertions;
using MimeKit;
using WireMock.Logging;
using WireMock.RequestBuilders;
using WireMock.ResponseBuilders;
using WireMock.Server;
using WireMock.Settings;
namespace WireMock.Net.Console.NET7.UsingNuGet;
internal class Program
{
private static async Task Main(string[] args)
{
var server = WireMockServer.Start(new WireMockServerSettings
{
Logger = new WireMockConsoleLogger(),
});
server
.Given(Request.Create()
.UsingPost()
.WithPath("/test")
)
.RespondWith(Response.Create()
.WithBody(requestMessage => requestMessage.BodyAsMimeMessage != null ?
"BodyAsMimeMessage is present" :
"BodyAsMimeMessage is not present")
);
server
.Given(Request.Create()
.UsingPost()
.WithPath("/some/endpoint")
)
.RespondWith(Response.Create()
.WithStatusCode(HttpStatusCode.Created)
);
var httpClient = server.CreateClient();
var content = new StringContent("abc", Encoding.UTF8, "application/json");
await TestAsync(httpClient, content);
await TestNoMultiPartAsync(httpClient, content);
await TestMultiPartAsync(server);
}
private static async Task TestNoMultiPartAsync(HttpClient httpClient, StringContent content)
{
var response = await httpClient.PostAsync("/test", content);
response.StatusCode.Should().Be(HttpStatusCode.OK);
(await response.Content.ReadAsStringAsync()).Should().Be("BodyAsMimeMessage is not present");
}
private static async Task TestAsync(HttpClient httpClient, StringContent content)
{
var response = await httpClient.PostAsync("some/endpoint", content);
response.StatusCode.Should().Be(HttpStatusCode.Created);
(await response.Content.ReadAsStringAsync()).Should().BeEmpty();
}
private static async Task TestMultiPartAsync(WireMockServer server)
{
var textPlainContent = "This is some plain text";
var textPlainContentType = "text/plain";
var textJson = "{ \"Key\" : \"Value\" }";
var textJsonContentType = "text/json";
var imagePngBytes = Convert.FromBase64String("iVBORw0KGgoAAAANSUhEUgAAAAIAAAACAgMAAAAP2OW3AAAADFBMVEX/tID/vpH/pWX/sHidUyjlAAAADElEQVR4XmMQYNgAAADkAMHebX3mAAAAAElFTkSuQmCC");
server
.Given(
Request.Create()
.UsingPost()
.WithPath("/multipart")
)
.RespondWith(Response.Create()
.WithBody(requestMessage => requestMessage.BodyAsMimeMessage is MimeMessage mm ?
"BodyAsMimeMessage is present: " + ((MimePart)mm.BodyParts.Last()).FileName :
"BodyAsMimeMessage is not present")
);
// Act
var formDataContent = new MultipartFormDataContent
{
{ new StringContent(textPlainContent, Encoding.UTF8, textPlainContentType), "text" },
{ new StringContent(textJson, Encoding.UTF8, textJsonContentType), "json" }
};
var fileContent = new ByteArrayContent(imagePngBytes);
fileContent.Headers.ContentType = new MediaTypeHeaderValue("image/png");
formDataContent.Add(fileContent, "somefile", "image.png");
var client = server.CreateClient();
var response = await client.PostAsync("/multipart", formDataContent);
response.StatusCode.Should().Be(HttpStatusCode.OK);
(await response.Content.ReadAsStringAsync()).Should().Be("BodyAsMimeMessage is present: image.png");
}
}