Add test for HTTP method metadata order (#7225)

This commit is contained in:
James Newton-King 2019-02-18 09:20:12 +13:00 committed by GitHub
parent 6b7e821913
commit cc7b35439c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 49 additions and 0 deletions

View File

@ -2,6 +2,8 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
@ -153,10 +155,57 @@ namespace Microsoft.AspNetCore.Builder
Assert.IsType<Metadata>(endpointBuilder1.Metadata[0]);
}
[Fact]
public void MapEndpoint_PrecedenceOfMetadata_BuilderMetadataReturned()
{
// Arrange
var builder = new DefaultEndpointRouteBuilder();
// Act
var endpointBuilder = builder.MapGet("/", HandleHttpMetdata, new HttpMethodMetadata(new[] { "METHOD" }));
endpointBuilder.Add(b =>
{
b.Metadata.Add(new HttpMethodMetadata(new[] { "BUILDER" }));
});
// Assert
var dataSource = Assert.Single(builder.DataSources);
var endpoint = Assert.Single(dataSource.Endpoints);
Assert.Equal(4, endpoint.Metadata.Count);
Assert.Equal("ATTRIBUTE", GetMethod(endpoint.Metadata[0]));
Assert.Equal("GET", GetMethod(endpoint.Metadata[1]));
Assert.Equal("METHOD", GetMethod(endpoint.Metadata[2]));
Assert.Equal("BUILDER", GetMethod(endpoint.Metadata[3]));
Assert.Equal("BUILDER", endpoint.Metadata.GetMetadata<IHttpMethodMetadata>().HttpMethods.Single());
string GetMethod(object metadata)
{
var httpMethodMetadata = Assert.IsAssignableFrom<IHttpMethodMetadata>(metadata);
return Assert.Single(httpMethodMetadata.HttpMethods);
}
}
[Attribute1]
[Attribute2]
private static Task Handle(HttpContext context) => Task.CompletedTask;
[HttpMethod("ATTRIBUTE")]
private static Task HandleHttpMetdata(HttpContext context) => Task.CompletedTask;
private class HttpMethodAttribute : Attribute, IHttpMethodMetadata
{
public bool AcceptCorsPreflight => false;
public IReadOnlyList<string> HttpMethods { get; }
public HttpMethodAttribute(params string[] httpMethods)
{
HttpMethods = httpMethods;
}
}
private class Attribute1 : Attribute
{
}