AspNetWebStack/test/System.Web.Http.OData.Test/ODataHttpConfigurationExten...

137 строки
5.2 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net.Http.Formatting;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using System.Web.Http.OData.Builder;
using System.Web.Http.OData.Formatter;
using System.Web.Http.OData.Query;
using System.Web.Http.OData.Routing;
using System.Web.Http.OData.TestCommon.Models;
using System.Web.Http.Services;
using System.Web.Http.Tracing;
using Microsoft.Data.Edm;
using Microsoft.Data.Edm.Library;
using Microsoft.Data.OData;
using Microsoft.TestCommon;
using Moq;
namespace System.Web.Http.OData
{
public class ODataHttpConfigurationExtensionTest
{
[Fact]
public void SetODataFormatter_AddsFormatterToTheFormatterCollection()
{
// Arrange
HttpConfiguration configuration = new HttpConfiguration();
ODataMediaTypeFormatter formatter = CreateODataFormatter();
// Act
configuration.Formatters.Insert(0, formatter);
// Assert
Assert.Contains(formatter, configuration.Formatters);
}
[Fact]
public void IsODataFormatter_ReturnsTrue_ForODataFormatters()
{
// Arrange
HttpConfiguration configuration = new HttpConfiguration();
ODataMediaTypeFormatter formatter1 = CreateODataFormatter();
ODataMediaTypeFormatter formatter2 = CreateODataFormatter();
configuration.Formatters.Add(formatter1);
configuration.Formatters.Add(formatter2);
// Act
IEnumerable<MediaTypeFormatter> result = configuration.Formatters.Where(f => f != null && Decorator.GetInner(f) is ODataMediaTypeFormatter);
// Assert
IEnumerable<MediaTypeFormatter> expectedFormatters = new MediaTypeFormatter[]
{
formatter1, formatter2
};
Assert.True(expectedFormatters.SequenceEqual(result));
}
[Fact]
public void IsODataFormatter_ReturnsTrue_For_Derived_ODataFormatters()
{
// Arrange
HttpConfiguration configuration = new HttpConfiguration();
ODataMediaTypeFormatter formatter1 = CreateODataFormatter();
DerivedODataMediaTypeFormatter formatter2 = new DerivedODataMediaTypeFormatter(new ODataPayloadKind[0]);
configuration.Formatters.Add(formatter1);
configuration.Formatters.Add(formatter2);
// Act
IEnumerable<MediaTypeFormatter> result = configuration.Formatters.Where(f => f != null && Decorator.GetInner(f) is ODataMediaTypeFormatter);
// Assert
IEnumerable<MediaTypeFormatter> expectedFormatters = new MediaTypeFormatter[]
{
formatter1, formatter2
};
Assert.True(expectedFormatters.SequenceEqual(result));
}
[Fact]
public void AddQuerySupport_AddsQueryableFilterProvider()
{
HttpConfiguration configuration = new HttpConfiguration();
configuration.EnableQuerySupport();
var queryFilterProviders = configuration.Services.GetFilterProviders().OfType<QueryFilterProvider>();
Assert.Equal(1, queryFilterProviders.Count());
var queryAttribute = Assert.IsType<QueryableAttribute>(queryFilterProviders.First().QueryFilter);
}
[Fact]
public void AddQuerySupport_AddsFilterProviderForQueryFilter()
{
HttpConfiguration configuration = new HttpConfiguration();
Mock<IActionFilter> myQueryFilter = new Mock<IActionFilter>();
configuration.EnableQuerySupport(myQueryFilter.Object);
var queryFilterProviders = configuration.Services.GetFilterProviders().OfType<QueryFilterProvider>();
Assert.Equal(1, queryFilterProviders.Count());
Assert.Same(myQueryFilter.Object, queryFilterProviders.First().QueryFilter);
}
[Fact]
public void AddQuerySupport_ActionFilters_TakePrecedence()
{
HttpConfiguration config = new HttpConfiguration();
config.EnableQuerySupport();
HttpControllerDescriptor controllerDescriptor = new HttpControllerDescriptor(config, "FilterProviderTest", typeof(FilterProviderTestController));
HttpActionDescriptor actionDescriptor = new ReflectedHttpActionDescriptor(controllerDescriptor, typeof(FilterProviderTestController).GetMethod("GetQueryableWithFilterAttribute"));
Collection<FilterInfo> filters = actionDescriptor.GetFilterPipeline();
Assert.Equal(1, filters.Count);
Assert.Equal(100, ((QueryableAttribute)filters[0].Instance).PageSize);
}
private static ODataMediaTypeFormatter CreateODataFormatter()
{
return new ODataMediaTypeFormatter(new ODataPayloadKind[0]);
}
private class DerivedODataMediaTypeFormatter: ODataMediaTypeFormatter
{
public DerivedODataMediaTypeFormatter(IEnumerable<ODataPayloadKind> payloadKinds)
: base(payloadKinds)
{
}
}
}
}