diff --git a/PoweredSoft.DynamicQuery.Core/IGroupingInterceptor.cs b/PoweredSoft.DynamicQuery.Core/IGroupingInterceptor.cs index 71e94ab..09a37a1 100644 --- a/PoweredSoft.DynamicQuery.Core/IGroupingInterceptor.cs +++ b/PoweredSoft.DynamicQuery.Core/IGroupingInterceptor.cs @@ -1,6 +1,6 @@ namespace PoweredSoft.DynamicQuery.Core { - public interface IGroupingInterceptor : IQueryInterceptor + public interface IGroupInterceptor : IQueryInterceptor { IGroup InterceptGroup(IGroup group); } diff --git a/PoweredSoft.DynamicQuery.Test/GroupInterceptorTests.cs b/PoweredSoft.DynamicQuery.Test/GroupInterceptorTests.cs new file mode 100644 index 0000000..8a6a111 --- /dev/null +++ b/PoweredSoft.DynamicQuery.Test/GroupInterceptorTests.cs @@ -0,0 +1,45 @@ +using PoweredSoft.DynamicQuery.Core; +using PoweredSoft.DynamicQuery.Test.Mock; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Xunit; + +namespace PoweredSoft.DynamicQuery.Test +{ + public class GroupInterceptorTests + { + private class MockGroupInterceptor : IGroupInterceptor + { + public IGroup InterceptGroup(IGroup group) + { + return new Group() + { + Path = "Customer.FirstName" + }; + } + } + + [Fact] + public void Simple() + { + MockContextFactory.SeedAndTestContextFor("GroupInterceptorTests_Simple", TestSeeders.SimpleSeedScenario, ctx => + { + var expected = ctx.Orders + .OrderBy(t => t.Customer.FirstName) + .GroupBy(t => t.Customer.FirstName) + .Select(t => t.Key) + .ToList(); + + var criteria = new QueryCriteria(); + criteria.Groups.Add(new Group { Path = "CustomerFirstName" }); + var queryHandler = new QueryHandler(); + queryHandler.AddInterceptor(new MockGroupInterceptor()); + var result = queryHandler.Execute(ctx.Orders, criteria); + var actual = result.Data.Cast().Select(t => t.GroupValue).ToList(); + Assert.Equal(expected, actual); + }); + } + } +} diff --git a/PoweredSoft.DynamicQuery/QueryHandlerBase.cs b/PoweredSoft.DynamicQuery/QueryHandlerBase.cs index c1568f8..273539c 100644 --- a/PoweredSoft.DynamicQuery/QueryHandlerBase.cs +++ b/PoweredSoft.DynamicQuery/QueryHandlerBase.cs @@ -42,8 +42,8 @@ namespace PoweredSoft.DynamicQuery protected virtual IGroup InterceptGroup(IGroup group) { var ret = Interceptors - .Where(t => t is IGroupingInterceptor) - .Cast() + .Where(t => t is IGroupInterceptor) + .Cast() .Aggregate(group, (prev, inter) => inter.InterceptGroup(prev)); return ret; diff --git a/README.md b/README.md index 9662368..2a5e94d 100644 --- a/README.md +++ b/README.md @@ -100,8 +100,8 @@ Interceptor | Interface ----------------------|------------------------------------------------------------------------------------|-------------------------------------------------------------|--------------------------------------------------------------------------------------------------- IFilterInterceptor | [interface](../master/PoweredSoft.DynamicQuery.Core/IFilterInterceptor.cs) | [test](../master/PoweredSoft.DynamicQuery.Test/FilterInterceptorTests.cs) | This interceptor allows you to change the behavior of a IFilter being applied to the queryable ISortInterceptor | [interface](../master/PoweredSoft.DynamicQuery.Core/ISortInterceptor.cs) | [test](../master/PoweredSoft.DynamicQuery.Test/SortInterceptorTests.cs) | This interceptor allows you to change the behavior of a ISort being applied to the queryable -IGroupInterceptor | [interface](../master/PoweredSoft.DynamicQuery.Core/IGroupInterceptor.cs) | [test](../master/PoweredSoft.DynamicQuery.Test/TBT.md) | This interceptor allows you to change the behavior of a IGroup being applied to the queryable -IAggregateInterceptor | [interface](../master/PoweredSoft.DynamicQuery.Core/IAggregateInterceptor.cs) | [test](../master/PoweredSoft.DynamicQuery.Test/TBT.md) | This interceptor allows you to change the behavior of a IAggregate being applied to the queryable +IGroupInterceptor | [interface](../master/PoweredSoft.DynamicQuery.Core/IGroupInterceptor.cs) | [test](../master/PoweredSoft.DynamicQuery.Test/GroupInterceptorTests.cs) | This interceptor allows you to change the behavior of a IGroup being applied to the queryable +IAggregateInterceptor | [interface](../master/PoweredSoft.DynamicQuery.Core/IAggregateInterceptor.cs) | [test](../master/PoweredSoft.DynamicQuery.Test/AggregateInterceptorTests.cs) | This interceptor allows you to change the behavior of a IAggregate being applied to the queryable > Post Query execution