/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Http/Routing/test/FunctionalTests/RouteHandlerTest.cs
130 строк
4 KB
Stephen Halter
[Route Groups] Support AddFilter, WithOpenApi and other additive conventions (#42195)
21 июн 2022, 19:39
Не верифицирован
21 июн 2022, 19:39
146f49f
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable enable using System.Net; using System.Net.Http.Json; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Primitives; namespace Microsoft.AspNetCore.Routing.FunctionalTests; public class RouteHandlerTest { [Fact] public async Task MapPost_FromBodyWorksWithJsonPayload() { using var host = new HostBuilder() .ConfigureWebHost(webHostBuilder => { webHostBuilder .Configure(app => { app.UseRouting(); app.UseEndpoints(b => b.MapPost("/EchoTodo/{id}", (int id, Todo todo) => todo with { Id = id })); }) .UseTestServer(); }) .ConfigureServices(services => { services.AddRouting(); }) .Build(); using var server = host.GetTestServer(); await host.StartAsync(); var client = server.CreateClient(); var todo = new Todo { Name = "Write tests!" }; var response = await client.PostAsJsonAsync("/EchoTodo/42", todo); response.EnsureSuccessStatusCode(); var echoedTodo = await response.Content.ReadFromJsonAsync<Todo>(); Assert.NotNull(echoedTodo); Assert.Equal(todo.Name, echoedTodo?.Name); Assert.Equal(42, echoedTodo?.Id); } [Fact] public async Task CustomEndpointDataSource_IsDisposedIfResolved() { var testDisposeDataSource = new TestDisposeEndpointDataSource(); var testGroupDisposeDataSource = new TestDisposeEndpointDataSource(); using var host = new HostBuilder() .ConfigureWebHost(webHostBuilder => { webHostBuilder .Configure(app => { app.UseRouting(); app.UseEndpoints(b => { b.DataSources.Add(testDisposeDataSource); var group = b.MapGroup(""); ((IEndpointRouteBuilder)group).DataSources.Add(testGroupDisposeDataSource); }); }) .UseTestServer(); }) .ConfigureServices(services => { services.AddRouting(); }) .Build(); using var server = host.GetTestServer(); await host.StartAsync(); // Make a request to ensure data sources are resolved. var client = server.CreateClient(); var response = await client.GetAsync("/"); // We didn't define any endpoints. Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); Assert.False(testDisposeDataSource.IsDisposed); Assert.False(testGroupDisposeDataSource.IsDisposed); await host.StopAsync(); host.Dispose(); Assert.True(testDisposeDataSource.IsDisposed); Assert.True(testGroupDisposeDataSource.IsDisposed); } private record Todo { public int Id { get; set; } public string Name { get; set; } = "Todo"; public bool IsComplete { get; set; } } private class TestDisposeEndpointDataSource : EndpointDataSource, IDisposable { public bool IsDisposed { get; private set; } public override IReadOnlyList<Endpoint> Endpoints => Array.Empty<Endpoint>(); public override IChangeToken GetChangeToken() => NullChangeToken.Singleton; public void Dispose() { IsDisposed = true; } } }