/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Http/Routing/test/UnitTests/RequestDelegateRouteBuilderExtensionsTest.cs
153 строки
7 KB
Shreyas Jejurkar
chore : Remove unwanted `using` statement (#39176)
02 янв 2022, 17:39
Не верифицирован
02 янв 2022, 17:39
c85baf8
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Moq; namespace Microsoft.AspNetCore.Routing; // These are really more like integration tests. They verify that these extensions // add routes that behave as advertised. public class RequestDelegateRouteBuilderExtensionsTest { private static readonly RequestDelegate NullHandler = (c) => Task.CompletedTask; public static TheoryData<Action<IRouteBuilder>, Action<HttpContext>> MatchingActions { get { return new TheoryData<Action<IRouteBuilder>, Action<HttpContext>>() { { b => { b.MapRoute("api/{id}", NullHandler); }, null }, { b => { b.MapMiddlewareRoute("api/{id}", app => { }); }, null }, { b => { b.MapDelete("api/{id}", NullHandler); }, c => { c.Request.Method = "DELETE"; } }, { b => { b.MapMiddlewareDelete("api/{id}", app => { }); }, c => { c.Request.Method = "DELETE"; } }, { b => { b.MapGet("api/{id}", NullHandler); }, c => { c.Request.Method = "GET"; } }, { b => { b.MapMiddlewareGet("api/{id}", app => { }); }, c => { c.Request.Method = "GET"; } }, { b => { b.MapPost("api/{id}", NullHandler); }, c => { c.Request.Method = "POST"; } }, { b => { b.MapMiddlewarePost("api/{id}", app => { }); }, c => { c.Request.Method = "POST"; } }, { b => { b.MapPut("api/{id}", NullHandler); }, c => { c.Request.Method = "PUT"; } }, { b => { b.MapMiddlewarePut("api/{id}", app => { }); }, c => { c.Request.Method = "PUT"; } }, { b => { b.MapVerb("PUT", "api/{id}", NullHandler); }, c => { c.Request.Method = "PUT"; } }, { b => { b.MapMiddlewareVerb("PUT", "api/{id}", app => { }); }, c => { c.Request.Method = "PUT"; } }, }; } } [Theory] [MemberData(nameof(MatchingActions))] public async Task Map_MatchesRequest( Action<IRouteBuilder> routeSetup, Action<HttpContext> requestSetup) { // Arrange var services = CreateServices(); var context = CreateRouteContext(services); context.HttpContext.Request.Path = new PathString("/api/5"); requestSetup?.Invoke(context.HttpContext); var builder = CreateRouteBuilder(services); routeSetup(builder); var route = builder.Build(); // Act await route.RouteAsync(context); // Assert Assert.Same(NullHandler, context.Handler); } public static TheoryData<Action<IRouteBuilder>, Action<HttpContext>> NonmatchingActions { get { return new TheoryData<Action<IRouteBuilder>, Action<HttpContext>>() { { b => { b.MapRoute("api/{id}/extra", NullHandler); }, null }, { b => { b.MapMiddlewareRoute("api/{id}/extra", app => { }); }, null }, { b => { b.MapDelete("api/{id}", NullHandler); }, c => { c.Request.Method = "GET"; } }, { b => { b.MapMiddlewareDelete("api/{id}", app => { }); }, c => { c.Request.Method = "PUT"; } }, { b => { b.MapDelete("api/{id}/extra", NullHandler); }, c => { c.Request.Method = "DELETE"; } }, { b => { b.MapMiddlewareDelete("api/{id}/extra", app => { }); }, c => { c.Request.Method = "DELETE"; } }, { b => { b.MapGet("api/{id}", NullHandler); }, c => { c.Request.Method = "PUT"; } }, { b => { b.MapMiddlewareGet("api/{id}", app => { }); }, c => { c.Request.Method = "POST"; } }, { b => { b.MapGet("api/{id}/extra", NullHandler); }, c => { c.Request.Method = "GET"; } }, { b => { b.MapMiddlewareGet("api/{id}/extra", app => { }); }, c => { c.Request.Method = "GET"; } }, { b => { b.MapPost("api/{id}", NullHandler); }, c => { c.Request.Method = "MEH"; } }, { b => { b.MapMiddlewarePost("api/{id}", app => { }); }, c => { c.Request.Method = "DELETE"; } }, { b => { b.MapPost("api/{id}/extra", NullHandler); }, c => { c.Request.Method = "POST"; } }, { b => { b.MapMiddlewarePost("api/{id}/extra", app => { }); }, c => { c.Request.Method = "POST"; } }, { b => { b.MapPut("api/{id}", NullHandler); }, c => { c.Request.Method = "BLEH"; } }, { b => { b.MapMiddlewarePut("api/{id}", app => { }); }, c => { c.Request.Method = "HEAD"; } }, { b => { b.MapPut("api/{id}/extra", NullHandler); }, c => { c.Request.Method = "PUT"; } }, { b => { b.MapMiddlewarePut("api/{id}/extra", app => { }); }, c => { c.Request.Method = "PUT"; } }, { b => { b.MapVerb("PUT", "api/{id}", NullHandler); }, c => { c.Request.Method = "POST"; } }, { b => { b.MapMiddlewareVerb("PUT", "api/{id}", app => { }); }, c => { c.Request.Method = "HEAD"; } }, { b => { b.MapVerb("PUT", "api/{id}/extra", NullHandler); }, c => { c.Request.Method = "PUT"; } }, { b => { b.MapMiddlewareVerb("PUT", "api/{id}/extra", app => { }); }, c => { c.Request.Method = "PUT"; } }, }; } } [Theory] [MemberData(nameof(NonmatchingActions))] public async Task Map_DoesNotMatchRequest( Action<IRouteBuilder> routeSetup, Action<HttpContext> requestSetup) { // Arrange var services = CreateServices(); var context = CreateRouteContext(services); context.HttpContext.Request.Path = new PathString("/api/5"); requestSetup?.Invoke(context.HttpContext); var builder = CreateRouteBuilder(services); routeSetup(builder); var route = builder.Build(); // Act await route.RouteAsync(context); // Assert Assert.Null(context.Handler); } private static IServiceProvider CreateServices() { var services = new ServiceCollection(); services.AddOptions(); services.AddRouting(); services.AddLogging(); return services.BuildServiceProvider(); } private static RouteContext CreateRouteContext(IServiceProvider services) { var httpContext = new DefaultHttpContext(); httpContext.RequestServices = services; return new RouteContext(httpContext); } private static IRouteBuilder CreateRouteBuilder(IServiceProvider services) { var applicationBuilder = new Mock<IApplicationBuilder>(); applicationBuilder.SetupAllProperties(); applicationBuilder .Setup(b => b.New().Build()) .Returns(NullHandler); applicationBuilder.Object.ApplicationServices = services; var routeBuilder = new RouteBuilder(applicationBuilder.Object); return routeBuilder; } }