From 30221a51becfd5aa3a848cce00e1d8397cf63a1e Mon Sep 17 00:00:00 2001 From: PascalSenn Date: Tue, 28 Jan 2020 00:22:22 +0100 Subject: [PATCH] Added sorting nullable property tests (#1420) --- .../QueryableExtensionsTests.cs | 1 + .../QueryableSortVisitorTests.cs | 82 ++++++++++++++++--- 2 files changed, 70 insertions(+), 13 deletions(-) diff --git a/src/Core/Types.Sorting.Tests/QueryableExtensionsTests.cs b/src/Core/Types.Sorting.Tests/QueryableExtensionsTests.cs index 5b9e7ee19c0..bb1bbb49f93 100644 --- a/src/Core/Types.Sorting.Tests/QueryableExtensionsTests.cs +++ b/src/Core/Types.Sorting.Tests/QueryableExtensionsTests.cs @@ -24,6 +24,7 @@ public void AddInitialSortOperation_AscOnIQueryable_ShouldAddOrderBy() // assert Assert.Equal(source.OrderBy(s => s.Bar), sorted); } + [Fact] public void AddInitialSortOperation_DescOnIQueryable_ShouldAddOrderBy() { diff --git a/src/Core/Types.Sorting.Tests/QueryableSortVisitorTests.cs b/src/Core/Types.Sorting.Tests/QueryableSortVisitorTests.cs index 25cb9d4a9e6..a7d1d1ec9e3 100644 --- a/src/Core/Types.Sorting.Tests/QueryableSortVisitorTests.cs +++ b/src/Core/Types.Sorting.Tests/QueryableSortVisitorTests.cs @@ -31,12 +31,9 @@ public void Sort_ComparablemMultiple_ShouldSortByStringAscThenByStringAsc() // arrange var value = new ObjectValueNode( new ObjectFieldNode("baz", - new EnumValueNode(SortOperationKind.Asc) - ), + new EnumValueNode(SortOperationKind.Asc)), new ObjectFieldNode("bar", - new EnumValueNode(SortOperationKind.Asc) - ) - ); + new EnumValueNode(SortOperationKind.Asc))); FooSortType sortType = CreateType(new FooSortType()); @@ -68,11 +65,9 @@ public void Sort_ObjectMultiple_ShouldSortByStringAscThenByStringAsc() var value = new ObjectValueNode(new ObjectFieldNode("foo", new ObjectValueNode( new ObjectFieldNode("baz", - new EnumValueNode(SortOperationKind.Asc) - ), + new EnumValueNode(SortOperationKind.Asc)), new ObjectFieldNode("bar", - new EnumValueNode(SortOperationKind.Asc) - )))); + new EnumValueNode(SortOperationKind.Asc))))); FooNestedSortType sortType = CreateType(new FooNestedSortType()); @@ -134,8 +129,7 @@ public void Sort_ComparableAsc_ShouldSortByStringAsc() // arrange var value = new ObjectValueNode( new ObjectFieldNode("bar", - new EnumValueNode(SortOperationKind.Asc) - ) + new EnumValueNode(SortOperationKind.Asc)) ); FooSortType sortType = CreateType(new FooSortType()); @@ -165,8 +159,7 @@ public void Sort_ComparableDesc_ShouldSortByStringAsc() // arrange var value = new ObjectValueNode( new ObjectFieldNode("bar", - new EnumValueNode(SortOperationKind.Desc) - ) + new EnumValueNode(SortOperationKind.Desc)) ); FooSortType sortType = CreateType(new FooSortType()); @@ -218,6 +211,68 @@ public void Sort_NoSortSpecified_ShouldReturnUnalteredSource() ); } + [Fact] + public void Sort_Nullable_ShouldSortNullableProperlyAsc() + { + // arrange + var value = new ObjectValueNode( + new ObjectFieldNode("nullableInt", + new EnumValueNode(SortOperationKind.Asc))); + + FooSortType sortType = CreateType(new FooSortType()); + + IQueryable a = new[] + { + new Foo {Bar = "b"}, + new Foo {Bar = "c", NullableInt = 2}, + new Foo {Bar = "a", NullableInt = 1} + }.AsQueryable(); + + // act + var filter = new QueryableSortVisitor( + sortType, typeof(Foo)); + value.Accept(filter); + IQueryable aFiltered = filter.Sort(a); + + // assert + Assert.Collection(aFiltered, + foo => Assert.Equal("b", foo.Bar), + foo => Assert.Equal("a", foo.Bar), + foo => Assert.Equal("c", foo.Bar) + ); + } + + [Fact] + public void Sort_Nullable_ShouldSortNullableProperlyDesc() + { + // arrange + var value = new ObjectValueNode( + new ObjectFieldNode("nullableInt", + new EnumValueNode(SortOperationKind.Desc))); + + FooSortType sortType = CreateType(new FooSortType()); + + IQueryable a = new[] + { + new Foo {Bar = "b"}, + new Foo {Bar = "c", NullableInt = 2}, + new Foo {Bar = "a", NullableInt = 1} + }.AsQueryable(); + + // act + var filter = new QueryableSortVisitor( + sortType, typeof(Foo)); + value.Accept(filter); + IQueryable aFiltered = filter.Sort(a); + + // assert + Assert.Collection(aFiltered, + foo => Assert.Equal("c", foo.Bar), + foo => Assert.Equal("a", foo.Bar), + foo => Assert.Equal("b", foo.Bar) + ); + } + public class FooSortType : SortInputType { @@ -245,6 +300,7 @@ public class FooNested public class Foo { + public int? NullableInt { get; set; } public string Bar { get; set; } public string Baz { get; set; } }