/MR3/tests/Castle.MonoRail.Tests/Mvc/FilterProviderTestCase.cs

https://github.com/castleproject/MonoRail · C# · 229 lines · 183 code · 46 blank · 0 comment · 0 complexity · 5eff88f6563cf1de23db82844f8ec481 MD5 · raw file

  1. namespace Castle.MonoRail.Tests.Mvc
  2. {
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using FluentAssertions;
  7. using Framework;
  8. using Hosting.Mvc;
  9. using Hosting.Mvc.Typed;
  10. using NUnit.Framework;
  11. [TestFixture]
  12. public class FilterProviderTestCase
  13. {
  14. private StubFilterActivator _activator;
  15. private StubDescriptorProvider _descProvider;
  16. private FilterProvider _filterProviderWithNoDescProvider, _filterProviderWith1DescProvider;
  17. [SetUp]
  18. public void Init()
  19. {
  20. _activator = new StubFilterActivator(Activator.CreateInstance);
  21. _descProvider = new StubDescriptorProvider();
  22. _filterProviderWithNoDescProvider = new FilterProvider(new Lazy<FilterDescriptorProvider, IComponentOrder>[0]);
  23. _filterProviderWith1DescProvider = new FilterProvider(new[]
  24. {
  25. new Lazy<FilterDescriptorProvider, IComponentOrder>(() => _descProvider, new ComponentOrder(1))
  26. });
  27. }
  28. private IEnumerable<TFilter> GetFilters<TFilter>(FilterProvider from) where TFilter : class
  29. {
  30. return from.Provide<TFilter>(
  31. _activator,
  32. new ActionExecutionContext(new FakeActionDescriptor("index"), new ControllerPrototype(new object()), new StubHttpContext(), null));
  33. }
  34. [Test]
  35. public void Provide_EmptyDescriptorProviders_ReturnsEmptySet()
  36. {
  37. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWithNoDescProvider);
  38. filters.Should().NotBeNull();
  39. filters.Should().BeEmpty();
  40. }
  41. [Test]
  42. public void Provide_OneDescriptorProviderThatReturnZeroProviders_ReturnsEmptySet()
  43. {
  44. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWith1DescProvider);
  45. filters.Should().NotBeNull();
  46. filters.Should().BeEmpty();
  47. }
  48. [Test]
  49. public void Provide_OneDescriptorProviderThatReturn1AuthProvider_ReturnsAuthFilter()
  50. {
  51. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeType(typeof(FakeAuthFilter), 1, null));
  52. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWith1DescProvider);
  53. filters.Should().NotBeNull();
  54. filters.Should().HaveCount(1);
  55. var filter = filters.ElementAt(0);
  56. filter.Should().NotBeNull();
  57. filter.Should().BeOfType<FakeAuthFilter>();
  58. }
  59. [Test]
  60. public void ProvideForActionFilter_OneDescriptorProviderThatReturn1AuthProvider_ReturnsEmptySet()
  61. {
  62. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeType(typeof(FakeAuthFilter), 1, null));
  63. var filters = GetFilters<IActionFilter>(_filterProviderWith1DescProvider);
  64. filters.Should().NotBeNull();
  65. filters.Should().BeEmpty();
  66. }
  67. [Test]
  68. public void ProvideForAuthFilter_OneWithFilterAndMatchingSkip_ReturnsEmptySet()
  69. {
  70. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeType(typeof(FakeAuthFilter), 1, null));
  71. _descProvider.Descriptors.Add(FilterDescriptor.NewSkip(typeof(FakeAuthFilter)));
  72. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWith1DescProvider);
  73. filters.Should().NotBeNull();
  74. filters.Should().BeEmpty();
  75. }
  76. [Test]
  77. public void ProvideForAuthFilter_Ordering_ReturnsCorrectOrdering()
  78. {
  79. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeType(typeof(FakeAuthFilter2), 2, null));
  80. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeType(typeof(FakeAuthFilter), 1, null));
  81. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWith1DescProvider);
  82. filters.Should().NotBeNull();
  83. filters.Should().HaveCount(2);
  84. filters.ElementAt(0).Should().BeOfType<FakeAuthFilter>();
  85. filters.ElementAt(1).Should().BeOfType<FakeAuthFilter2>();
  86. }
  87. [Test]
  88. public void ProvideForAuthFilter_MultipleFiltersWithOneMatchingSkip_ReturnsNonSkippedFilters()
  89. {
  90. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeType(typeof(FakeAuthFilter), 1, null));
  91. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeType(typeof(FakeAuthFilter2), 2, null));
  92. _descProvider.Descriptors.Add(FilterDescriptor.NewSkip(typeof(FakeAuthFilter)));
  93. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWith1DescProvider);
  94. filters.Should().NotBeNull();
  95. filters.Should().HaveCount(1);
  96. filters.ElementAt(0).Should().BeOfType<FakeAuthFilter2>();
  97. }
  98. [Test]
  99. public void ProvideForAuthFilter_MultipleFiltersWithMatchingSkips_ReturnsEmptySet()
  100. {
  101. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeType(typeof(FakeAuthFilter), 1, null));
  102. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeType(typeof(FakeAuthFilter2), 2, null));
  103. _descProvider.Descriptors.Add(FilterDescriptor.NewSkip(typeof(FakeAuthFilter)));
  104. _descProvider.Descriptors.Add(FilterDescriptor.NewSkip(typeof(FakeAuthFilter2)));
  105. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWith1DescProvider);
  106. filters.Should().NotBeNull();
  107. filters.Should().BeEmpty();
  108. }
  109. [Test]
  110. public void Provide_OneDescriptorProviderThatReturn1AuthProvider_Instance_ReturnsAuthFilter()
  111. {
  112. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeType(typeof(FakeAuthFilter), 1, null));
  113. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWith1DescProvider);
  114. filters.Should().NotBeNull();
  115. filters.Should().HaveCount(1);
  116. var filter = filters.ElementAt(0);
  117. filter.Should().NotBeNull();
  118. filter.Should().BeOfType<FakeAuthFilter>();
  119. }
  120. [Test]
  121. public void ProvideForActionFilter_OneDescriptorProviderThatReturn1AuthProvider_Instance_ReturnsEmptySet()
  122. {
  123. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeInstance(new FakeAuthFilter(), 1));
  124. var filters = GetFilters<IActionFilter>(_filterProviderWith1DescProvider);
  125. filters.Should().NotBeNull();
  126. filters.Should().BeEmpty();
  127. }
  128. [Test]
  129. public void ProvideForAuthFilter_OneWithFilterAndMatchingSkip_Instance_ReturnsEmptySet()
  130. {
  131. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeInstance(new FakeAuthFilter(), 1));
  132. _descProvider.Descriptors.Add(FilterDescriptor.NewSkip(typeof(FakeAuthFilter)));
  133. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWith1DescProvider);
  134. filters.Should().NotBeNull();
  135. filters.Should().BeEmpty();
  136. }
  137. [Test]
  138. public void ProvideForAuthFilter_Ordering_Instance_ReturnsCorrectOrdering()
  139. {
  140. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeInstance(new FakeAuthFilter2(), 2));
  141. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeInstance(new FakeAuthFilter(), 1));
  142. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWith1DescProvider);
  143. filters.Should().NotBeNull();
  144. filters.Should().HaveCount(2);
  145. filters.ElementAt(0).Should().BeOfType<FakeAuthFilter>();
  146. filters.ElementAt(1).Should().BeOfType<FakeAuthFilter2>();
  147. }
  148. [Test]
  149. public void ProvideForAuthFilter_MultipleFiltersWithOneMatchingSkip_Instance_ReturnsNonSkippedFilters()
  150. {
  151. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeInstance(new FakeAuthFilter(), 1));
  152. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeInstance(new FakeAuthFilter2(), 2));
  153. _descProvider.Descriptors.Add(FilterDescriptor.NewSkip(typeof(FakeAuthFilter)));
  154. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWith1DescProvider);
  155. filters.Should().NotBeNull();
  156. filters.Should().HaveCount(1);
  157. filters.ElementAt(0).Should().BeOfType<FakeAuthFilter2>();
  158. }
  159. [Test]
  160. public void ProvideForAuthFilter_MultipleFiltersWithMatchingSkips_Instance_ReturnsEmptySet()
  161. {
  162. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeInstance(new FakeAuthFilter(), 1));
  163. _descProvider.Descriptors.Add(FilterDescriptor.NewIncludeInstance(new FakeAuthFilter2(), 2));
  164. _descProvider.Descriptors.Add(FilterDescriptor.NewSkip(typeof(FakeAuthFilter)));
  165. _descProvider.Descriptors.Add(FilterDescriptor.NewSkip(typeof(FakeAuthFilter2)));
  166. var filters = GetFilters<IAuthorizationFilter>(_filterProviderWith1DescProvider);
  167. filters.Should().NotBeNull();
  168. filters.Should().BeEmpty();
  169. }
  170. class FakeAuthFilter : IAuthorizationFilter
  171. {
  172. public void AuthorizeRequest(PreActionFilterExecutionContext context)
  173. {
  174. }
  175. }
  176. class FakeAuthFilter2 : IAuthorizationFilter
  177. {
  178. public void AuthorizeRequest(PreActionFilterExecutionContext context)
  179. {
  180. }
  181. }
  182. }
  183. }