Skip to content

Commit

Permalink
StringFilter IsEmpty and IsNotEmpty checks.
Browse files Browse the repository at this point in the history
  • Loading branch information
mehmetuken committed Jan 28, 2022
1 parent a363044 commit 1851ded
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 0 deletions.
35 changes: 35 additions & 0 deletions src/AutoFilterer/Types/StringFilter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,16 @@ public class StringFilter : IFilterableType
/// Provides parameter to check is not null.
/// </summary>
public virtual bool? IsNotNull { get; set; }

/// <summary>
/// Provides parameter to check is empty string.
/// </summary>
public virtual bool? IsEmpty { get; set; }

/// <summary>
/// Provides parameter to check is not empty string.
/// </summary>
public virtual bool? IsNotEmpty { get; set; }

/// <summary>
/// <inheritdoc />
Expand Down Expand Up @@ -114,6 +124,31 @@ public virtual Expression BuildExpression(Expression expressionBody, PropertyInf
if (NotEndsWith != null)
expression = expression.Combine(Expression.Not(new StringFilterOptionsAttribute(StringFilterOption.EndsWith) { Comparison = Compare }.BuildExpression(expressionBody, targetProperty, filterProperty, NotEndsWith)), CombineWith);


if (IsEmpty != null)
{
if (IsEmpty.Value)
{
expression = expression.Combine(new StringFilterOptionsAttribute(StringFilterOption.Equals) { Comparison = Compare }.BuildExpression(expressionBody, targetProperty, filterProperty, ""), CombineWith);
}
else
{
expression = expression.Combine(Expression.Not(new StringFilterOptionsAttribute(StringFilterOption.Equals) { Comparison = Compare }.BuildExpression(expressionBody, targetProperty, filterProperty, "")), CombineWith);
}
}

if (IsNotEmpty != null)
{
if (IsNotEmpty.Value)
{
expression = expression.Combine(Expression.Not(new StringFilterOptionsAttribute(StringFilterOption.Equals) { Comparison = Compare }.BuildExpression(expressionBody, targetProperty, filterProperty, "")), CombineWith);
}
else
{
expression = expression.Combine(new StringFilterOptionsAttribute(StringFilterOption.Equals) { Comparison = Compare }.BuildExpression(expressionBody, targetProperty, filterProperty, ""), CombineWith);
}
}

return expression;
}
}
62 changes: 62 additions & 0 deletions tests/AutoFilterer.Tests/Types/StringFilterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -171,4 +171,66 @@ public void BuildExpression_TitleWithIsNotNull_ShouldMatchCount(List<Book> data)
foreach (var item in actualResult)
Assert.Contains(item, result);
}

[Theory, AutoMoqData(count: 64)]
public void BuildExpression_TitleWithIsEmpty_ShouldMatchCount(List<Book> data)
{
for (var i = 0; i < 5; i++)
{
data[i].Title = "";
}

// Arrange
var filter = new BookFilter_StringFilter_Title
{
Title = new StringFilter
{
IsEmpty = true
}
};

// Act
var query = data.AsQueryable().ApplyFilter(filter);
var result = query.ToList();

// Assert
var actualResult = data.AsQueryable().Where(x => x.Title == "").ToList();

Assert.Equal(actualResult.Count, result.Count);
Assert.Equal(5, actualResult.Count);
Assert.Equal(5, result.Count);
foreach (var item in actualResult)
Assert.Contains(item, result);
}

[Theory, AutoMoqData(count: 64)]
public void BuildExpression_TitleWithIsNotEmpty_ShouldMatchCount(List<Book> data)
{
for (var i = 0; i < 5; i++)
{
data[i].Title = "";
}

// Arrange
var filter = new BookFilter_StringFilter_Title
{
Title = new StringFilter
{
IsNotEmpty = true
}
};

// Act
var query = data.AsQueryable().ApplyFilter(filter);
var result = query.ToList();

// Assert
var actualResult = data.AsQueryable().Where(x => x.Title != "").ToList();

Assert.Equal(actualResult.Count, result.Count);
Assert.Equal(64 - 5, actualResult.Count);
Assert.Equal(64 - 5, result.Count);
foreach (var item in actualResult)
Assert.Contains(item, result);
}
}

0 comments on commit 1851ded

Please sign in to comment.