From 411339b7a589e1acc5bbbb2a7a9dacc9c2ffd16d Mon Sep 17 00:00:00 2001 From: Harro van der Kroft Date: Wed, 31 Jul 2019 11:40:08 +0200 Subject: [PATCH 1/2] chore: renamed queryParser_tests --- .../Services/{QueryParser_Tests.cs => QueryParserTests.cs} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename test/UnitTests/Services/{QueryParser_Tests.cs => QueryParserTests.cs} (99%) diff --git a/test/UnitTests/Services/QueryParser_Tests.cs b/test/UnitTests/Services/QueryParserTests.cs similarity index 99% rename from test/UnitTests/Services/QueryParser_Tests.cs rename to test/UnitTests/Services/QueryParserTests.cs index c0e5752dad..4cb0c558b9 100644 --- a/test/UnitTests/Services/QueryParser_Tests.cs +++ b/test/UnitTests/Services/QueryParserTests.cs @@ -12,7 +12,7 @@ namespace UnitTests.Services { - public class QueryParser_Tests + public class QueryParserTests { private readonly Mock _controllerContextMock; private readonly Mock _queryCollectionMock; From dd82d55cc939efd3715dbd2dfb9ed03ea53aae23 Mon Sep 17 00:00:00 2001 From: Harro van der Kroft Date: Wed, 31 Jul 2019 11:54:33 +0200 Subject: [PATCH 2/2] tests: added tests for #543 and fixed it. --- src/JsonApiDotNetCore/Services/QueryParser.cs | 5 +++- test/UnitTests/Services/QueryParserTests.cs | 27 +++++++++++++++++-- test/UnitTests/UnitTests.csproj | 3 ++- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/JsonApiDotNetCore/Services/QueryParser.cs b/src/JsonApiDotNetCore/Services/QueryParser.cs index 5787ab722f..bffcdc9a59 100644 --- a/src/JsonApiDotNetCore/Services/QueryParser.cs +++ b/src/JsonApiDotNetCore/Services/QueryParser.cs @@ -153,7 +153,10 @@ protected virtual List ParseSortParameters(string value) const char DESCENDING_SORT_OPERATOR = '-'; var sortSegments = value.Split(QueryConstants.COMMA); - + if(sortSegments.Where(s => s == string.Empty).Count() >0) + { + throw new JsonApiException(400, "The sort URI segment contained a null value."); + } foreach (var sortSegment in sortSegments) { var propertyName = sortSegment; diff --git a/test/UnitTests/Services/QueryParserTests.cs b/test/UnitTests/Services/QueryParserTests.cs index 4cb0c558b9..58cd6251e9 100644 --- a/test/UnitTests/Services/QueryParserTests.cs +++ b/test/UnitTests/Services/QueryParserTests.cs @@ -17,7 +17,7 @@ public class QueryParserTests private readonly Mock _controllerContextMock; private readonly Mock _queryCollectionMock; - public QueryParser_Tests() + public QueryParserTests() { _controllerContextMock = new Mock(); _queryCollectionMock = new Mock(); @@ -126,11 +126,34 @@ public void Can_Disable_Filters() // assert Assert.Empty(querySet.Filters); } + [Theory] + [InlineData("text,,1")] + [InlineData("text,hello,,5")] + [InlineData(",,2")] + public void Parse_EmptySortSegment_ReceivesJsonApiException(string stringSortQuery) + { + // Arrange + var query = new Dictionary { + { "sort", new StringValues(stringSortQuery) } + }; + + _queryCollectionMock + .Setup(m => m.GetEnumerator()) + .Returns(query.GetEnumerator()); + + var queryParser = new QueryParser(_controllerContextMock.Object, new JsonApiOptions()); + // Act / Assert + var exception = Assert.Throws(() => + { + var querySet = queryParser.Parse(_queryCollectionMock.Object); + }); + Assert.Contains("sort", exception.Message); + } [Fact] public void Can_Disable_Sort() { - // arrange + // Arrange var query = new Dictionary { { "sort", new StringValues("-key") } }; diff --git a/test/UnitTests/UnitTests.csproj b/test/UnitTests/UnitTests.csproj index 1e344d064b..b4f96631ca 100644 --- a/test/UnitTests/UnitTests.csproj +++ b/test/UnitTests/UnitTests.csproj @@ -1,4 +1,4 @@ - + $(NetCoreAppVersion) false @@ -9,6 +9,7 @@ +