From 99e623c93fc3c296bb1bdaeb188d98503234c859 Mon Sep 17 00:00:00 2001 From: David Lebee Date: Mon, 22 Apr 2019 20:18:38 -0500 Subject: [PATCH] fix in the order of sortings when grouping is activated. --- PoweredSoft.DynamicQuery.Test/GroupTests.cs | 56 +++++++++++++++++++ .../Mock/TestSeeders.cs | 12 +++- PoweredSoft.DynamicQuery/QueryHandler.cs | 2 +- PoweredSoft.DynamicQuery/QueryHandlerAsync.cs | 2 +- 4 files changed, 68 insertions(+), 4 deletions(-) diff --git a/PoweredSoft.DynamicQuery.Test/GroupTests.cs b/PoweredSoft.DynamicQuery.Test/GroupTests.cs index 5f9c3b2..e2c330b 100644 --- a/PoweredSoft.DynamicQuery.Test/GroupTests.cs +++ b/PoweredSoft.DynamicQuery.Test/GroupTests.cs @@ -52,6 +52,62 @@ namespace PoweredSoft.DynamicQuery.Test }); } + [Fact] + public void A() + { + /* + MockContextFactory.SeedAndTestContextFor("GroupTests_A", TestSeeders.SeedTicketScenario, ctx => + { + var a = ctx.Tickets + .OrderBy(t => t.Owner) + .ThenBy(t => t.Priority) + .Skip(0) + .Take(100) + .GroupBy(t => new + { + t.Owner, + t.Priority + }) + .Select(t => new + { + t.Key.Owner, + t.Key.Priority, + Records = t.ToList() + }) + .ToList(); + + int breakHere = 0; + });*/ + + MockContextFactory.SeedAndTestContextFor("GroupTests_A2", TestSeeders.SeedTicketScenario, ctx => + { + var criteria = new QueryCriteria() + { + Groups = new List() + { + new Group { Path = "Owner" }, + new Group { Path = "Priority" } + }, + Page = 1, + PageSize = 100 + }; + + var queryHandler = new QueryHandler(); + var result = queryHandler.Execute(ctx.Tickets, criteria); + + var groupedResult = result.GroupedResult(); + + var firstGroup = groupedResult.Groups.FirstOrDefault(); + Assert.NotNull(firstGroup); + var secondGroup = groupedResult.Groups.Skip(1).FirstOrDefault(); + Assert.NotNull(secondGroup); + + var expected = ctx.Tickets.Select(t => t.TicketType).Distinct().Count(); + var c = groupedResult.Groups.Select(t => t.GroupValue).Count(); + Assert.Equal(expected, c); + }); + } + [Fact] public void GroupComplex() { diff --git a/PoweredSoft.DynamicQuery.Test/Mock/TestSeeders.cs b/PoweredSoft.DynamicQuery.Test/Mock/TestSeeders.cs index d7a52aa..c070ffd 100644 --- a/PoweredSoft.DynamicQuery.Test/Mock/TestSeeders.cs +++ b/PoweredSoft.DynamicQuery.Test/Mock/TestSeeders.cs @@ -97,6 +97,14 @@ namespace PoweredSoft.DynamicQuery.Test.Mock { MockContextFactory.TestContextFor(testName, ctx => { + var owners = new List(); + + for(var i = 0; i < 20; i++) + { + var f = new Bogus.Faker("en"); + owners.Add(f.Person.FullName); + } + var faker = new Bogus.Faker() .RuleFor(t => t.TicketType, (f, u) => f.PickRandom("new", "open", "refused", "closed")) .RuleFor(t => t.Title, (f, u) => f.Lorem.Sentence()) @@ -104,8 +112,8 @@ namespace PoweredSoft.DynamicQuery.Test.Mock .RuleFor(t => t.IsHtml, (f, u) => false) .RuleFor(t => t.TagList, (f, u) => string.Join(",", f.Commerce.Categories(3))) .RuleFor(t => t.CreatedDate, (f, u) => f.Date.Recent(100)) - .RuleFor(t => t.Owner, (f, u) => f.Person.FullName) - .RuleFor(t => t.AssignedTo, (f, u) => f.Person.FullName) + .RuleFor(t => t.Owner, (f, u) => f.PickRandom(owners)) + .RuleFor(t => t.AssignedTo, (f, u) => f.PickRandom(owners)) .RuleFor(t => t.TicketStatus, (f, u) => f.PickRandom(1, 2, 3)) .RuleFor(t => t.LastUpdateBy, (f, u) => f.Person.FullName) .RuleFor(t => t.LastUpdateDate, (f, u) => f.Date.Soon(5)) diff --git a/PoweredSoft.DynamicQuery/QueryHandler.cs b/PoweredSoft.DynamicQuery/QueryHandler.cs index bff122a..67dfbc1 100644 --- a/PoweredSoft.DynamicQuery/QueryHandler.cs +++ b/PoweredSoft.DynamicQuery/QueryHandler.cs @@ -37,7 +37,7 @@ namespace PoweredSoft.DynamicQuery var aggregateResults = FetchAggregates(finalGroups); // sorting. - finalGroups.ForEach(fg => Criteria.Sorts.Insert(0, new Sort(fg.Path, fg.Ascending))); + finalGroups.ReversedForEach(fg => Criteria.Sorts.Insert(0, new Sort(fg.Path, fg.Ascending))); // apply sorting and paging. ApplySorting(); diff --git a/PoweredSoft.DynamicQuery/QueryHandlerAsync.cs b/PoweredSoft.DynamicQuery/QueryHandlerAsync.cs index 9ffe598..f9d5689 100644 --- a/PoweredSoft.DynamicQuery/QueryHandlerAsync.cs +++ b/PoweredSoft.DynamicQuery/QueryHandlerAsync.cs @@ -44,7 +44,7 @@ namespace PoweredSoft.DynamicQuery var aggregateResults = await FetchAggregatesAsync(finalGroups, cancellationToken); // sorting. - finalGroups.ForEach(fg => Criteria.Sorts.Insert(0, new Sort(fg.Path, fg.Ascending))); + finalGroups.ReversedForEach(fg => Criteria.Sorts.Insert(0, new Sort(fg.Path, fg.Ascending))); // apply sorting and paging. ApplySorting();