diff options
Diffstat (limited to 'src/Mvc/test/Microsoft.AspNetCore.Mvc.Core.Test/Filters/FilterCollectionTest.cs')
-rw-r--r-- | src/Mvc/test/Microsoft.AspNetCore.Mvc.Core.Test/Filters/FilterCollectionTest.cs | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/src/Mvc/test/Microsoft.AspNetCore.Mvc.Core.Test/Filters/FilterCollectionTest.cs b/src/Mvc/test/Microsoft.AspNetCore.Mvc.Core.Test/Filters/FilterCollectionTest.cs new file mode 100644 index 0000000000..971e43eebf --- /dev/null +++ b/src/Mvc/test/Microsoft.AspNetCore.Mvc.Core.Test/Filters/FilterCollectionTest.cs @@ -0,0 +1,166 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.AspNetCore.Testing; +using Xunit; + +namespace Microsoft.AspNetCore.Mvc.Filters +{ + public class FilterCollectionTest + { + [Fact] + public void Add_UsesTypeFilterAttribute() + { + // Arrange + var collection = new FilterCollection(); + + // Act + var added = collection.Add(typeof(MyFilter)); + + // Assert + var typeFilter = Assert.IsType<TypeFilterAttribute>(added); + Assert.Equal(typeof(MyFilter), typeFilter.ImplementationType); + Assert.Same(typeFilter, Assert.Single(collection)); + } + + [Fact] + public void GenericAdd_UsesTypeFilterAttribute() + { + // Arrange + var collection = new FilterCollection(); + + // Act + var added = collection.Add<MyFilter>(); + + // Assert + var typeFilter = Assert.IsType<TypeFilterAttribute>(added); + Assert.Equal(typeof(MyFilter), typeFilter.ImplementationType); + Assert.Same(typeFilter, Assert.Single(collection)); + } + + [Fact] + public void Add_WithOrder_SetsOrder() + { + // Arrange + var collection = new FilterCollection(); + + // Act + var added = collection.Add(typeof(MyFilter), 17); + + // Assert + Assert.Equal(17, Assert.IsAssignableFrom<IOrderedFilter>(added).Order); + } + + [Fact] + public void GenericAdd_WithOrder_SetsOrder() + { + // Arrange + var collection = new FilterCollection(); + + // Act + var added = collection.Add<MyFilter>(17); + + // Assert + Assert.Equal(17, Assert.IsAssignableFrom<IOrderedFilter>(added).Order); + } + + [Fact] + public void Add_ThrowsOnNonIFilter() + { + // Arrange + var collection = new FilterCollection(); + + var expectedMessage = $"The type '{typeof(NonFilter).FullName}' must derive from " + $"'{typeof(IFilterMetadata).FullName}'."; + + // Act & Assert + ExceptionAssert.ThrowsArgument( + () => collection.Add(typeof(NonFilter)), + "filterType", + expectedMessage); + } + + [Fact] + public void AddService_UsesServiceFilterAttribute() + { + // Arrange + var collection = new FilterCollection(); + + // Act + var added = collection.AddService(typeof(MyFilter)); + + // Assert + var serviceFilter = Assert.IsType<ServiceFilterAttribute>(added); + Assert.Equal(typeof(MyFilter), serviceFilter.ServiceType); + Assert.Same(serviceFilter, Assert.Single(collection)); + } + + [Fact] + public void GenericAddService_UsesServiceFilterAttribute() + { + // Arrange + var collection = new FilterCollection(); + + // Act + var added = collection.AddService<MyFilter>(); + + // Assert + var serviceFilter = Assert.IsType<ServiceFilterAttribute>(added); + Assert.Equal(typeof(MyFilter), serviceFilter.ServiceType); + Assert.Same(serviceFilter, Assert.Single(collection)); + } + + [Fact] + public void AddService_SetsOrder() + { + // Arrange + var collection = new FilterCollection(); + + // Act + var added = collection.AddService(typeof(MyFilter), 17); + + // Assert + Assert.Equal(17, Assert.IsAssignableFrom<IOrderedFilter>(added).Order); + } + + [Fact] + public void GenericAddService_SetsOrder() + { + // Arrange + var collection = new FilterCollection(); + + // Act + var added = collection.AddService<MyFilter>(17); + + // Assert + Assert.Equal(17, Assert.IsAssignableFrom<IOrderedFilter>(added).Order); + } + + [Fact] + public void AddService_ThrowsOnNonIFilter() + { + // Arrange + var collection = new FilterCollection(); + + var expectedMessage = $"The type '{typeof(NonFilter).FullName}' must derive from '{typeof(IFilterMetadata).FullName}'."; + + // Act & Assert + ExceptionAssert.ThrowsArgument( + () => { collection.AddService(typeof(NonFilter)); }, + "filterType", + expectedMessage); + } + + private class MyFilter : IFilterMetadata, IOrderedFilter + { + public int Order + { + get; + set; + } + } + + private class NonFilter + { + } + } +} |