Skip to content

Commit 485b2bd

Browse files
author
Bart Koelman
authored
Merge pull request #746 from fdlane/fdlane-fix-default-sort
Fix for GetDefaultSortOrder not firing
2 parents 91ac012 + d806872 commit 485b2bd

File tree

3 files changed

+31
-8
lines changed

3 files changed

+31
-8
lines changed

src/JsonApiDotNetCore/Models/ResourceDefinition.cs

+7-5
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public interface IResourceDefinition
1313
List<AttrAttribute> GetAllowedAttributes();
1414
List<RelationshipAttribute> GetAllowedRelationships();
1515
object GetCustomQueryFilter(string key);
16-
List<(AttrAttribute, SortDirection)> DefaultSort();
16+
List<(AttrAttribute Attribute, SortDirection SortDirection)> DefaultSort();
1717
}
1818

1919
/// <summary>
@@ -146,14 +146,16 @@ public sealed class QueryFilters : Dictionary<string, Func<IQueryable<TResource>
146146
/// </example>
147147
public virtual PropertySortOrder GetDefaultSortOrder() => null;
148148

149-
public List<(AttrAttribute, SortDirection)> DefaultSort()
149+
public List<(AttrAttribute Attribute, SortDirection SortDirection)> DefaultSort()
150150
{
151151
var defaultSortOrder = GetDefaultSortOrder();
152152
if (defaultSortOrder != null && defaultSortOrder.Count > 0)
153153
{
154-
var order = new List<(AttrAttribute, SortDirection)>();
154+
var order = new List<(AttrAttribute Attribute, SortDirection SortDirection)>();
155155
foreach (var sortProp in defaultSortOrder)
156-
order.Add((_resourceGraph.GetAttributes(sortProp.Item1).Single(), sortProp.Item2));
156+
{
157+
order.Add((_resourceGraph.GetAttributes(sortProp.Attribute).Single(), sortProp.SortDirection));
158+
}
157159

158160
return order;
159161
}
@@ -166,6 +168,6 @@ public sealed class QueryFilters : Dictionary<string, Func<IQueryable<TResource>
166168
/// method signature.
167169
/// See <see cref="GetQueryFilters" /> for usage details.
168170
/// </summary>
169-
public sealed class PropertySortOrder : List<(Expression<Func<TResource, dynamic>>, SortDirection)> { }
171+
public sealed class PropertySortOrder : List<(Expression<Func<TResource, dynamic>> Attribute, SortDirection SortDirection)> { }
170172
}
171173
}

src/JsonApiDotNetCore/QueryParameterServices/SortService.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ public SortService(IResourceDefinitionProvider resourceDefinitionProvider,
2929
/// <inheritdoc/>
3030
public List<SortQueryContext> Get()
3131
{
32-
if (_queries == null)
32+
if (!_queries.Any())
3333
{
3434
var requestResourceDefinition = _resourceDefinitionProvider.Get(_requestResource.ResourceType);
3535
if (requestResourceDefinition != null)
36-
return requestResourceDefinition.DefaultSort()?.Select(d => BuildQueryContext(new SortQuery(d.Item1.PublicAttributeName, d.Item2))).ToList();
36+
return requestResourceDefinition.DefaultSort()?.Select(d => BuildQueryContext(new SortQuery(d.Attribute.PublicAttributeName, d.SortDirection))).ToList();
3737
}
3838
return _queries.ToList();
3939
}

test/UnitTests/Models/ResourceDefinitionTests.cs

+22-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Collections.Generic;
12
using JsonApiDotNetCore.Builders;
23
using JsonApiDotNetCore.Internal.Query;
34
using JsonApiDotNetCore.Models;
@@ -10,6 +11,25 @@ namespace UnitTests.Models
1011
{
1112
public sealed class ResourceDefinition_Scenario_Tests
1213
{
14+
[Fact]
15+
public void Property_Sort_Order_Uses_NewExpression()
16+
{
17+
// Arrange
18+
var resource = new RequestFilteredResource(isAdmin: false);
19+
20+
// Act
21+
var sorts = resource.DefaultSort();
22+
23+
// Assert
24+
Assert.Equal(2, sorts.Count);
25+
26+
Assert.Equal(nameof(Model.Prop), sorts[0].Attribute.PropertyInfo.Name);
27+
Assert.Equal(SortDirection.Ascending, sorts[0].SortDirection);
28+
29+
Assert.Equal(nameof(Model.Password), sorts[1].Attribute.PropertyInfo.Name);
30+
Assert.Equal(SortDirection.Descending, sorts[1].SortDirection);
31+
}
32+
1333
[Fact]
1434
public void Request_Filter_Uses_Member_Expression()
1535
{
@@ -63,7 +83,8 @@ public override QueryFilters GetQueryFilters()
6383
};
6484
public override PropertySortOrder GetDefaultSortOrder()
6585
=> new PropertySortOrder {
66-
(t => t.Prop, SortDirection.Ascending)
86+
(t => t.Prop, SortDirection.Ascending),
87+
(t => t.Password, SortDirection.Descending)
6788
};
6889
}
6990
}

0 commit comments

Comments
 (0)