Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions Moq.AutoMock.Tests/DescribeHttpClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ public async Task HttpClient_CanSetupDifferentResponsesForDifferentUrls()
var mocker = new AutoMocker();

mocker.SetupHttpGet("/users")
.ReturnsResponse(HttpStatusCode.OK, """{"users": []}""");
.ReturnsHttpResponse(HttpStatusCode.OK, """{"users": []}""");

mocker.SetupHttpGet("/products")
.ReturnsResponse(HttpStatusCode.OK, """{"products": []}""");
.ReturnsHttpResponse(HttpStatusCode.OK, """{"products": []}""");

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -39,8 +39,8 @@ public async Task HttpClient_CanSetupSequenceOfResponses()
var mocker = new AutoMocker();

mocker.SetupHttpSequence(x => x.SendAsync(It.IsAny<HttpRequestMessage>(), It.IsAny<CancellationToken>()))
.ReturnsResponse(HttpStatusCode.ServiceUnavailable)
.ReturnsResponse(HttpStatusCode.OK, "Success");
.ReturnsHttpResponse(HttpStatusCode.ServiceUnavailable)
.ReturnsHttpResponse(HttpStatusCode.OK, "Success");

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand Down Expand Up @@ -79,7 +79,7 @@ public async Task HttpClient_CanSetupHttpGetByUrl()
var mocker = new AutoMocker();
string content = """[{name: "test"}]""";
mocker.SetupHttpGet("/people")
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -96,7 +96,7 @@ public async Task HttpClient_CanSetupHttpGetByExpression()
var mocker = new AutoMocker();
string content = """[{name: "test"}]""";
mocker.SetupHttpGet(r => r.RequestUri!.AbsoluteUri.EndsWith("/people"))
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -113,7 +113,7 @@ public async Task HttpClient_SetupHttpGetDoesNotMatchOtherVerbs()
var mocker = new AutoMocker(MockBehavior.Strict);
string content = """[{name: "test"}]""";
mocker.SetupHttpGet("/people")
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);
var service = mocker.CreateInstance<ServiceWithHttpClient>();

await Assert.ThrowsAsync<MockException>(() => service.PostAsync("https://example.com/people", "data"));
Expand All @@ -125,7 +125,7 @@ public async Task HttpClient_CanSetupHttpGetErrorResponses()
var mocker = new AutoMocker();

mocker.SetupHttpGet()
.ReturnsResponse(HttpStatusCode.InternalServerError, "Server Error");
.ReturnsHttpResponse(HttpStatusCode.InternalServerError, "Server Error");

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand Down Expand Up @@ -158,7 +158,7 @@ public async Task HttpClient_CanSetupHttpGetResponseWithCustomHeaders()
var mocker = new AutoMocker();

mocker.SetupHttpGet()
.ReturnsResponse(HttpStatusCode.OK, "Response with headers", configure: response =>
.ReturnsHttpResponse(HttpStatusCode.OK, "Response with headers", configure: response =>
{
response.Headers.Add("X-Custom-Header", "CustomValue");
});
Expand All @@ -178,7 +178,7 @@ public async Task HttpClient_CanSetupHttpPostByUrl()
var mocker = new AutoMocker();
string content = """[{name: "test"}]""";
mocker.SetupHttpPost("/people", "data")
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -195,7 +195,7 @@ public async Task HttpClient_CanSetupHttpPostByExpression()
var mocker = new AutoMocker();
string content = """[{name: "test"}]""";
mocker.SetupHttpPost(r => r.RequestUri!.AbsoluteUri.EndsWith("/people"))
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -212,7 +212,7 @@ public async Task HttpClient_SetupHttpPostDoesNotMatchOtherVerbs()
var mocker = new AutoMocker(MockBehavior.Strict);
string content = """[{name: "test"}]""";
mocker.SetupHttpPost("/people")
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);
var service = mocker.CreateInstance<ServiceWithHttpClient>();

await Assert.ThrowsAsync<MockException>(() => service.GetAsync("https://example.com/people"));
Expand All @@ -236,7 +236,7 @@ public async Task HttpClient_CanSetupHttpPostErrorResponses()
var mocker = new AutoMocker();

mocker.SetupHttpPost()
.ReturnsResponse(HttpStatusCode.InternalServerError, "Server Error");
.ReturnsHttpResponse(HttpStatusCode.InternalServerError, "Server Error");

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -251,7 +251,7 @@ public async Task HttpClient_CanSetupHttpPutByUrl()
var mocker = new AutoMocker();
string content = """[{name: "test"}]""";
mocker.SetupHttpPut("/people", "data")
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -268,7 +268,7 @@ public async Task HttpClient_CanSetupHttpPutByExpression()
var mocker = new AutoMocker();
string content = """[{name: "test"}]""";
mocker.SetupHttpPut(r => r.RequestUri!.AbsoluteUri.EndsWith("/people"))
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -285,7 +285,7 @@ public async Task HttpClient_SetupHttpPutDoesNotMatchOtherVerbs()
var mocker = new AutoMocker(MockBehavior.Strict);
string content = """[{name: "test"}]""";
mocker.SetupHttpPut("/people")
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);
var service = mocker.CreateInstance<ServiceWithHttpClient>();

await Assert.ThrowsAsync<MockException>(() => service.GetAsync("https://example.com/people"));
Expand All @@ -309,7 +309,7 @@ public async Task HttpClient_CanSetupHttpPutErrorResponses()
var mocker = new AutoMocker();

mocker.SetupHttpPut()
.ReturnsResponse(HttpStatusCode.InternalServerError, "Server Error");
.ReturnsHttpResponse(HttpStatusCode.InternalServerError, "Server Error");

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -324,7 +324,7 @@ public async Task HttpClient_CanSetupHttpDeleteByUrl()
var mocker = new AutoMocker();
string content = """[{name: "test"}]""";
mocker.SetupHttpDelete("/people")
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -341,7 +341,7 @@ public async Task HttpClient_CanSetupHttpDeleteByExpression()
var mocker = new AutoMocker();
string content = """[{name: "test"}]""";
mocker.SetupHttpDelete(r => r.RequestUri!.AbsoluteUri.EndsWith("/people"))
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -358,7 +358,7 @@ public async Task HttpClient_SetupHttpDeleteDoesNotMatchOtherVerbs()
var mocker = new AutoMocker(MockBehavior.Strict);
string content = """[{name: "test"}]""";
mocker.SetupHttpDelete("/people")
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);
var service = mocker.CreateInstance<ServiceWithHttpClient>();

await Assert.ThrowsAsync<MockException>(() => service.GetAsync("https://example.com/people"));
Expand All @@ -382,7 +382,7 @@ public async Task HttpClient_CanSetupHttpDeleteErrorResponses()
var mocker = new AutoMocker();

mocker.SetupHttpDelete()
.ReturnsResponse(HttpStatusCode.InternalServerError, "Server Error");
.ReturnsHttpResponse(HttpStatusCode.InternalServerError, "Server Error");

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -397,7 +397,7 @@ public async Task HttpClient_CanSetupHttpHeadByUrl()
var mocker = new AutoMocker();
string content = """[{name: "test"}]""";
mocker.SetupHttpHead("/people")
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -414,7 +414,7 @@ public async Task HttpClient_CanSetupHttpHeadByExpression()
var mocker = new AutoMocker();
string content = """[{name: "test"}]""";
mocker.SetupHttpHead(r => r.RequestUri!.AbsoluteUri.EndsWith("/people"))
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -431,7 +431,7 @@ public async Task HttpClient_SetupHttpHeadDoesNotMatchOtherVerbs()
var mocker = new AutoMocker(MockBehavior.Strict);
string content = """[{name: "test"}]""";
mocker.SetupHttpHead("/people")
.ReturnsResponse(HttpStatusCode.OK, content);
.ReturnsHttpResponse(HttpStatusCode.OK, content);
var service = mocker.CreateInstance<ServiceWithHttpClient>();

await Assert.ThrowsAsync<MockException>(() => service.GetAsync("https://example.com/people"));
Expand All @@ -455,7 +455,7 @@ public async Task HttpClient_CanSetupHttpHeadErrorResponses()
var mocker = new AutoMocker();

mocker.SetupHttpHead()
.ReturnsResponse(HttpStatusCode.InternalServerError, "Server Error");
.ReturnsHttpResponse(HttpStatusCode.InternalServerError, "Server Error");

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand Down
8 changes: 4 additions & 4 deletions Moq.AutoMock.Tests/DescribeHttpMessageHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public async Task HttpClient_CanSetupResponses()
// Setup the mock handler to return a specific response using Protected() API
mocker.GetMock<HttpMessageHandler>()
.SetupHttp(x => x.SendAsync(It.IsAny<HttpRequestMessage>(), It.IsAny<CancellationToken>()))
.ReturnsResponse(HttpStatusCode.OK, "Hello, World!");
.ReturnsHttpResponse(HttpStatusCode.OK, "Hello, World!");

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand Down Expand Up @@ -45,7 +45,7 @@ public async Task HttpClient_CanVerifySpecificRequestsWereMade()

mocker.GetMock<HttpMessageHandler>()
.SetupHttp(x => x.SendAsync(It.IsAny<HttpRequestMessage>(), It.IsAny<CancellationToken>()))
.ReturnsResponse(HttpStatusCode.OK);
.ReturnsHttpResponse(HttpStatusCode.OK);

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand All @@ -70,8 +70,8 @@ public async Task HttpClient_CanSetupSequenceOfResponses()

mocker.GetMock<HttpMessageHandler>()
.SetupSequence(x => x.SendAsync(It.IsAny<HttpRequestMessage>(), It.IsAny<CancellationToken>()))
.ReturnsResponse(HttpStatusCode.ServiceUnavailable)
.ReturnsResponse(HttpStatusCode.OK, "Success");
.ReturnsHttpResponse(HttpStatusCode.ServiceUnavailable)
.ReturnsHttpResponse(HttpStatusCode.OK, "Success");

var service = mocker.CreateInstance<ServiceWithHttpClient>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using Moq.AutoMock.Http;
using Moq.Language;
using Moq.Language.Flow;

namespace Moq.AutoMock.Http;
namespace Moq.AutoMock;

/// <summary>
/// Provides extension methods for configuring mocked HTTP responses in unit tests using Moq and HttpMessageHandler.
Expand Down Expand Up @@ -41,25 +42,13 @@ private static HttpResponseMessage CreateResponse(
return response;
}

/// <summary>
/// Specifies the response is an HTTP OK (200).
/// </summary>
/// <param name="setup">The setup.</param>
/// <param name="configure">An action to configure the response headers.</param>
public static IReturnsResult<HttpMessageHandler> ReturnsOK(
this ISetup<HttpMessageHandler, Task<HttpResponseMessage>> setup,
Action<HttpResponseMessage>? configure = null)
{
return setup.ReturnsResponse(HttpStatusCode.OK, configure);
}

/// <summary>
/// Specifies the response to return.
/// </summary>
/// <param name="setup">The setup.</param>
/// <param name="statusCode">The status code.</param>
/// <param name="configure">An action to configure the response headers.</param>
public static IReturnsResult<HttpMessageHandler> ReturnsResponse(
public static IReturnsResult<HttpMessageHandler> ReturnsHttpResponse(
this ISetup<HttpMessageHandler, Task<HttpResponseMessage>> setup,
HttpStatusCode statusCode,
Action<HttpResponseMessage>? configure = null)
Expand All @@ -77,7 +66,7 @@ public static IReturnsResult<HttpMessageHandler> ReturnsResponse(
/// <param name="setup">The setup.</param>
/// <param name="statusCode">The status code.</param>
/// <param name="configure">An action to configure the response headers.</param>
public static ISetupSequentialResult<Task<HttpResponseMessage>> ReturnsResponse(
public static ISetupSequentialResult<Task<HttpResponseMessage>> ReturnsHttpResponse(
this ISetupSequentialResult<Task<HttpResponseMessage>> setup,
HttpStatusCode statusCode,
Action<HttpResponseMessage>? configure = null)
Expand All @@ -95,7 +84,7 @@ public static ISetupSequentialResult<Task<HttpResponseMessage>> ReturnsResponse(
/// <param name="content">The response content.</param>
/// <param name="configure">An action to configure the response headers.</param>
/// <exception cref="ArgumentNullException"><paramref name="content" /> is null.</exception>
public static IReturnsResult<HttpMessageHandler> ReturnsResponse(
public static IReturnsResult<HttpMessageHandler> ReturnsHttpResponse(
this ISetup<HttpMessageHandler, Task<HttpResponseMessage>> setup,
HttpStatusCode statusCode,
HttpContent content,
Expand Down Expand Up @@ -123,7 +112,7 @@ public static IReturnsResult<HttpMessageHandler> ReturnsResponse(
/// <param name="content">The response content.</param>
/// <param name="configure">An action to configure the response headers.</param>
/// <exception cref="ArgumentNullException"><paramref name="content" /> is null.</exception>
public static ISetupSequentialResult<Task<HttpResponseMessage>> ReturnsResponse(
public static ISetupSequentialResult<Task<HttpResponseMessage>> ReturnsHttpResponse(
this ISetupSequentialResult<Task<HttpResponseMessage>> setup,
HttpStatusCode statusCode,
HttpContent content,
Expand All @@ -150,7 +139,7 @@ public static ISetupSequentialResult<Task<HttpResponseMessage>> ReturnsResponse(
/// <param name="encoding">The character encoding. Defaults to <see cref="Encoding.UTF8" />.</param>
/// <param name="configure">An action to configure the response headers.</param>
/// <exception cref="ArgumentNullException"><paramref name="content" /> is null.</exception>
public static IReturnsResult<HttpMessageHandler> ReturnsResponse(
public static IReturnsResult<HttpMessageHandler> ReturnsHttpResponse(
this ISetup<HttpMessageHandler, Task<HttpResponseMessage>> setup,
HttpStatusCode statusCode,
string content,
Expand Down Expand Up @@ -182,7 +171,7 @@ public static IReturnsResult<HttpMessageHandler> ReturnsResponse(
/// <param name="encoding">The character encoding. Defaults to <see cref="Encoding.UTF8" />.</param>
/// <param name="configure">An action to configure the response headers.</param>
/// <exception cref="ArgumentNullException"><paramref name="content" /> is null.</exception>
public static ISetupSequentialResult<Task<HttpResponseMessage>> ReturnsResponse(
public static ISetupSequentialResult<Task<HttpResponseMessage>> ReturnsHttpResponse(
this ISetupSequentialResult<Task<HttpResponseMessage>> setup,
HttpStatusCode statusCode,
string content,
Expand Down Expand Up @@ -210,7 +199,7 @@ public static ISetupSequentialResult<Task<HttpResponseMessage>> ReturnsResponse(
/// <param name="encoding">The character encoding. Defaults to <see cref="Encoding.UTF8" />.</param>
/// <param name="configure">An action to configure the response headers.</param>
/// <exception cref="ArgumentNullException"><paramref name="content" /> is null.</exception>
public static IReturnsResult<HttpMessageHandler> ReturnsResponse(
public static IReturnsResult<HttpMessageHandler> ReturnsHttpResponse(
this ISetup<HttpMessageHandler, Task<HttpResponseMessage>> setup,
string content,
string? mediaType = null,
Expand Down
7 changes: 3 additions & 4 deletions Moq.AutoMock/Http/MockHttpMessageHandlerExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
using System.ComponentModel;
using System.Linq.Expressions;
using System.Linq.Expressions;
using System.Reflection;
using Moq.Language;
using Moq.Language.Flow;
using Moq.Protected;

namespace Moq.AutoMock.Http;
namespace Moq.AutoMock;

using System.Net.Http;
using Moq.AutoMock.Http;

[EditorBrowsable(EditorBrowsableState.Never)]
public static partial class MockHttpMessageHandlerExtensions
{
/// <summary>
Expand Down
Loading