public void ParseFilter_ForRunDto() { // arrange var filter = "((Date gt '2020-02-02') and (Distance lt 5)) OR (Latitude eq 5.5)"; // act Expression <Func <RunDto, bool> > predicate = QueryStringParser.ParseFilter <RunDto>(filter); // assert predicate.Should().NotBeNull(); predicate.Body.ToString().Should().BeEquivalentTo("(((Param_0.Date > 02/02/2020 00:00:00) And (Param_0.Distance < 5)) Or (Convert(Param_0.Latitude, Decimal) == 5.5))"); }
public void ParseFilter_ForUserDto() { // arrange var filter = "((userName eq 'Test') or (userName eq '1')) and (id ne 'abc')"; // act Expression <Func <UserDto, bool> > predicate = QueryStringParser.ParseFilter <UserDto>(filter); // assert predicate.Should().NotBeNull(); predicate.Body.ToString().Should().BeEquivalentTo("(((Param_0.UserName == \"Test\") Or (Param_0.UserName == \"1\")) And (Param_0.Id != \"abc\"))"); }
/// <summary> /// parses string filter to DTO predicate /// </summary> /// <param name="filter">string filter</param> /// <typeparam name="TDto">DTO entity</typeparam> /// <returns></returns> /// <exception cref="JoggingTrackerBadRequestException"></exception> public static Expression <Func <TDto, bool> > GetFilterPredicate <TDto>(string filter = null) where TDto : class { Expression <Func <TDto, bool> > result = x => true; if (!string.IsNullOrWhiteSpace(filter)) { try { result = QueryStringParser.ParseFilter <TDto>(filter); } catch (Exception e) { throw new JoggingTrackerBadRequestException($"{ErrorMessages.CouldntParseFilter} {e.Message}"); } } return(result); }
public void ParseFilter_ForUserDto_InvalidPropertyName_ThrowsException() { var filter = "((invalidName eq 'test') or (userName eq '1')) and id ne 'abc'"; Assert.Throws <OperationInvalidException>(() => QueryStringParser.ParseFilter <UserDto>(filter)); }