Skip to content

Commit d806872

Browse files
author
Bart Koelman
committed
Added named tuples to remove the need for Item1; expanded test a bit.
1 parent 8df1d7b commit d806872

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
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

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public List<SortQueryContext> Get()
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

+11-3
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;
@@ -20,9 +21,15 @@ public void Property_Sort_Order_Uses_NewExpression()
2021
var sorts = resource.DefaultSort();
2122

2223
// Assert
23-
Assert.Equal(SortDirection.Ascending, sorts[0].Item2);
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);
2431
}
25-
32+
2633
[Fact]
2734
public void Request_Filter_Uses_Member_Expression()
2835
{
@@ -76,7 +83,8 @@ public override QueryFilters GetQueryFilters()
7683
};
7784
public override PropertySortOrder GetDefaultSortOrder()
7885
=> new PropertySortOrder {
79-
(t => t.Prop, SortDirection.Ascending)
86+
(t => t.Prop, SortDirection.Ascending),
87+
(t => t.Password, SortDirection.Descending)
8088
};
8189
}
8290
}

0 commit comments

Comments
 (0)