diff --git a/src/JsonApiDotNetCore/JsonApiDotNetCore.csproj b/src/JsonApiDotNetCore/JsonApiDotNetCore.csproj index ccebe08784..53649bb7e7 100755 --- a/src/JsonApiDotNetCore/JsonApiDotNetCore.csproj +++ b/src/JsonApiDotNetCore/JsonApiDotNetCore.csproj @@ -1,6 +1,6 @@  - 2.2.2 + 2.2.3 $(NetStandardVersion) JsonApiDotNetCore JsonApiDotNetCore diff --git a/src/JsonApiDotNetCore/Services/QueryComposer.cs b/src/JsonApiDotNetCore/Services/QueryComposer.cs index 8fbf16339b..8e0819a438 100644 --- a/src/JsonApiDotNetCore/Services/QueryComposer.cs +++ b/src/JsonApiDotNetCore/Services/QueryComposer.cs @@ -31,7 +31,8 @@ public string Compose(IJsonApiContext jsonApiContext) private string ComposeSingleFilter(FilterQuery query) { var result = "&filter"; - result += QueryConstants.OPEN_BRACKET + query.Attribute + QueryConstants.CLOSE_BRACKET + query.Operation + query.Value; + var operation = string.IsNullOrWhiteSpace(query.Operation) ? query.Operation : query.Operation + ":"; + result += QueryConstants.OPEN_BRACKET + query.Attribute + QueryConstants.CLOSE_BRACKET + "=" + operation + query.Value; return result; } } diff --git a/test/UnitTests/Services/QueryComposerTests.cs b/test/UnitTests/Services/QueryComposerTests.cs index e1bd892756..91df486212 100644 --- a/test/UnitTests/Services/QueryComposerTests.cs +++ b/test/UnitTests/Services/QueryComposerTests.cs @@ -17,10 +17,10 @@ public QueryComposerTests() } [Fact] - public void Can_Compose_FilterStringForUrl() + public void Can_ComposeEqual_FilterStringForUrl() { // arrange - var filter = new FilterQuery("attribute", "value", "="); + var filter = new FilterQuery("attribute", "value", "eq"); var querySet = new QuerySet(); List filters = new List(); filters.Add(filter); @@ -34,7 +34,30 @@ public void Can_Compose_FilterStringForUrl() // act var filterString = queryComposer.Compose(_jsonApiContext.Object); // assert - Assert.Equal("&filter[attribute]=value", filterString); + Assert.Equal("&filter[attribute]=eq:value", filterString); + } + + [Fact] + public void Can_ComposeLessThan_FilterStringForUrl() + { + // arrange + var filter = new FilterQuery("attribute", "value", "le"); + var filter2 = new FilterQuery("attribute2", "value2", ""); + var querySet = new QuerySet(); + List filters = new List(); + filters.Add(filter); + filters.Add(filter2); + querySet.Filters = filters; + + _jsonApiContext + .Setup(m => m.QuerySet) + .Returns(querySet); + + var queryComposer = new QueryComposer(); + // act + var filterString = queryComposer.Compose(_jsonApiContext.Object); + // assert + Assert.Equal("&filter[attribute]=le:value&filter[attribute2]=value2", filterString); } [Fact] @@ -54,4 +77,4 @@ public void NoFilter_Compose_EmptyStringReturned() Assert.Equal("", filterString); } } -} \ No newline at end of file +}