diff options
Diffstat (limited to 'src/Http/Http.Results/test/RedirectToRouteResultTest.cs')
-rw-r--r-- | src/Http/Http.Results/test/RedirectToRouteResultTest.cs | 185 |
1 files changed, 92 insertions, 93 deletions
diff --git a/src/Http/Http.Results/test/RedirectToRouteResultTest.cs b/src/Http/Http.Results/test/RedirectToRouteResultTest.cs index b2e2e9c05a..2d5af54aae 100644 --- a/src/Http/Http.Results/test/RedirectToRouteResultTest.cs +++ b/src/Http/Http.Results/test/RedirectToRouteResultTest.cs @@ -12,100 +12,99 @@ using Microsoft.Extensions.Logging.Abstractions; using Moq; using Xunit; -namespace Microsoft.AspNetCore.Http.Result +namespace Microsoft.AspNetCore.Http.Result; + +public class RedirectToRouteResultTest { - public class RedirectToRouteResultTest + [Fact] + public async Task RedirectToRoute_Execute_ThrowsOnNullUrl() + { + // Arrange + var httpContext = new DefaultHttpContext(); + httpContext.RequestServices = CreateServices(null).BuildServiceProvider(); + + var result = new RedirectToRouteResult(null, new Dictionary<string, object>()); + + // Act & Assert + await ExceptionAssert.ThrowsAsync<InvalidOperationException>( + async () => + { + await result.ExecuteAsync(httpContext); + }, + "No route matches the supplied values."); + } + + [Fact] + public async Task ExecuteResultAsync_UsesRouteName_ToGenerateLocationHeader() { - [Fact] - public async Task RedirectToRoute_Execute_ThrowsOnNullUrl() - { - // Arrange - var httpContext = new DefaultHttpContext(); - httpContext.RequestServices = CreateServices(null).BuildServiceProvider(); - - var result = new RedirectToRouteResult(null, new Dictionary<string, object>()); - - // Act & Assert - await ExceptionAssert.ThrowsAsync<InvalidOperationException>( - async () => - { - await result.ExecuteAsync(httpContext); - }, - "No route matches the supplied values."); - } - - [Fact] - public async Task ExecuteResultAsync_UsesRouteName_ToGenerateLocationHeader() - { - // Arrange - var routeName = "orders_api"; - var locationUrl = "/api/orders/10"; - - var httpContext = GetHttpContext(locationUrl); - - var result = new RedirectToRouteResult(routeName, new { id = 10 }); - - // Act - await result.ExecuteAsync(httpContext); - - // Assert - Assert.True(httpContext.Response.Headers.ContainsKey("Location"), "Location header not found"); - Assert.Equal(locationUrl, httpContext.Response.Headers["Location"]); - } - - [Fact] - public async Task ExecuteResultAsync_WithFragment_PassesCorrectValuesToRedirect() - { - // Arrange - var expectedUrl = "/SampleAction#test"; - var expectedStatusCode = StatusCodes.Status301MovedPermanently; - var httpContext = GetHttpContext(expectedUrl); - - var result = new RedirectToRouteResult("Sample", null, true, "test"); - - // Act - await result.ExecuteAsync(httpContext); - - // Assert - Assert.Equal(expectedStatusCode, httpContext.Response.StatusCode); - Assert.Equal(expectedUrl, httpContext.Response.Headers["Location"]); - } - - [Fact] - public async Task ExecuteResultAsync_WithFragment_PassesCorrectValuesToRedirect_WithPreserveMethod() - { - // Arrange - var expectedUrl = "/SampleAction#test"; - var expectedStatusCode = StatusCodes.Status308PermanentRedirect; - - var httpContext = GetHttpContext(expectedUrl); - var result = new RedirectToRouteResult("Sample", null, true, true, "test"); - - // Act - await result.ExecuteAsync(httpContext); - - // Assert - Assert.Equal(expectedStatusCode, httpContext.Response.StatusCode); - Assert.Equal(expectedUrl, httpContext.Response.Headers["Location"]); - } - - private static HttpContext GetHttpContext(string path) - { - var services = CreateServices(path); - - var httpContext = new DefaultHttpContext(); - httpContext.RequestServices = services.BuildServiceProvider(); - - return httpContext; - } - - private static IServiceCollection CreateServices(string path) - { - var services = new ServiceCollection(); - services.AddSingleton<LinkGenerator>(new TestLinkGenerator { Url = path }); - - services.AddSingleton(typeof(ILogger<>), typeof(NullLogger<>)); - return services; - } + // Arrange + var routeName = "orders_api"; + var locationUrl = "/api/orders/10"; + + var httpContext = GetHttpContext(locationUrl); + + var result = new RedirectToRouteResult(routeName, new { id = 10 }); + + // Act + await result.ExecuteAsync(httpContext); + + // Assert + Assert.True(httpContext.Response.Headers.ContainsKey("Location"), "Location header not found"); + Assert.Equal(locationUrl, httpContext.Response.Headers["Location"]); + } + + [Fact] + public async Task ExecuteResultAsync_WithFragment_PassesCorrectValuesToRedirect() + { + // Arrange + var expectedUrl = "/SampleAction#test"; + var expectedStatusCode = StatusCodes.Status301MovedPermanently; + var httpContext = GetHttpContext(expectedUrl); + + var result = new RedirectToRouteResult("Sample", null, true, "test"); + + // Act + await result.ExecuteAsync(httpContext); + + // Assert + Assert.Equal(expectedStatusCode, httpContext.Response.StatusCode); + Assert.Equal(expectedUrl, httpContext.Response.Headers["Location"]); + } + + [Fact] + public async Task ExecuteResultAsync_WithFragment_PassesCorrectValuesToRedirect_WithPreserveMethod() + { + // Arrange + var expectedUrl = "/SampleAction#test"; + var expectedStatusCode = StatusCodes.Status308PermanentRedirect; + + var httpContext = GetHttpContext(expectedUrl); + var result = new RedirectToRouteResult("Sample", null, true, true, "test"); + + // Act + await result.ExecuteAsync(httpContext); + + // Assert + Assert.Equal(expectedStatusCode, httpContext.Response.StatusCode); + Assert.Equal(expectedUrl, httpContext.Response.Headers["Location"]); + } + + private static HttpContext GetHttpContext(string path) + { + var services = CreateServices(path); + + var httpContext = new DefaultHttpContext(); + httpContext.RequestServices = services.BuildServiceProvider(); + + return httpContext; + } + + private static IServiceCollection CreateServices(string path) + { + var services = new ServiceCollection(); + services.AddSingleton<LinkGenerator>(new TestLinkGenerator { Url = path }); + + services.AddSingleton(typeof(ILogger<>), typeof(NullLogger<>)); + return services; } } |