using System.Collections.Generic;
using FluentAssertions;
using Xunit;
namespace System.Linq.Dynamic.Core.Tests;
public partial class QueryableTests
{
///
/// Issue #645
///
[Fact]
public void When_UseParameterizedNamesInDynamicQuery_IsTrue_WrappedStringValueForDateTime_Should_Be_Unwrapped()
{
// Arrange
var list = new List
{
new()
{
Name = "Terri Lee Duffy",
CompanyName = "ABC",
City = "Paris",
Phone = "333-444444",
Location = new Location { Name = "test" },
LastContact = DateTimeOffset.Parse("2022-11-14")
},
new()
{
Name = "Garry Moore",
CompanyName = "ABC",
City = "Paris",
Phone = "54654-444444",
Location = new Location { Name = "other test", UpdateAt = DateTimeOffset.Parse("2022-11-16") },
LastContact = DateTimeOffset.Parse("2022-11-16")
}
};
var config = new ParsingConfig
{
UseParameterizedNamesInDynamicQuery = true
};
// Act 1A
var result1A = list.AsQueryable().Where(config, "LastContact = \"2022-11-16\"").ToArray();
// Assert 1A
result1A.Should().HaveCount(1);
// Act 1B
var result1B = list.AsQueryable().Where(config, "\"2022-11-16\" == LastContact").ToArray();
// Assert 1B
result1B.Should().HaveCount(1);
// Act 2A
var result2A = list.AsQueryable().Where("Location.UpdateAt = \"2022-11-16\"").ToArray();
// Assert 2A
result2A.Should().HaveCount(1);
// Act 2B
var result2B = list.AsQueryable().Where("\"2022-11-16\" == Location.UpdateAt").ToArray();
// Assert 2B
result2B.Should().HaveCount(1);
}
///
/// Issue #668
///
[Fact]
public void When_UseParameterizedNamesInDynamicQuery_IsTrue_WrappedStringValueEnum_Should_Be_Unwrapped()
{
// Arrange
var list = new List
{
new()
{
Name = "Duffy",
GenderType = Gender.Female
},
new()
{
Name = "Garry",
GenderType = Gender.Male
}
};
var config = new ParsingConfig
{
UseParameterizedNamesInDynamicQuery = true
};
// Act
var result = list.AsQueryable().Where(config, "GenderType = \"Female\"").ToArray();
// Assert
result.Should().HaveCount(1);
}
[Fact]
public void When_UseParameterizedNamesInDynamicQuery_IsTrue_WrappedStringValueEnumAsParameter_Should_Be_Unwrapped()
{
// Arrange
var list = new List
{
new()
{
Name = "Duffy",
GenderType = Gender.Female
},
new()
{
Name = "Garry",
GenderType = Gender.Male
}
};
var config = new ParsingConfig
{
UseParameterizedNamesInDynamicQuery = true
};
// Act
var result = list.AsQueryable().Where(config, "GenderType = @0", "Female").ToArray();
// Assert
result.Should().HaveCount(1);
}
[Fact]
public void When_UseParameterizedNamesInDynamicQuery_IsTrue_WrappedStringValueEnumArray_Should_Be_Unwrapped()
{
// Arrange
var list = new List
{
new()
{
Name = "Duffy",
GenderType = Gender.Female
},
new()
{
Name = "Garry",
GenderType = Gender.Male
},
new()
{
Name = "Garry",
GenderType = Gender.Other
},
new()
{
Name = "Garry",
GenderType = Gender.Male
}
};
var config = new ParsingConfig
{
UseParameterizedNamesInDynamicQuery = true
};
// Act
var result = list.AsQueryable().Where(config, "GenderType in (\"Female\", \"Other\")").ToArray();
// Assert
result.Should().HaveCount(2);
}
[Fact]
public void When_UseParameterizedNamesInDynamicQuery_IsTrue_WrappedIntegerValueEnumArray_Should_Be_Unwrapped()
{
// Arrange
var list = new List
{
new()
{
Name = "Duffy",
GenderType = Gender.Female
},
new()
{
Name = "Garry",
GenderType = Gender.Male
},
new()
{
Name = "Test A",
GenderType = Gender.Other
},
new()
{
Name = "Test B",
GenderType = Gender.Male
}
};
var config = new ParsingConfig
{
UseParameterizedNamesInDynamicQuery = true
};
// Act
var result = list.AsQueryable().Where(config, "GenderType in (0, 2)").ToArray();
// Assert
result.Should().HaveCount(3);
}
[Fact]
public void When_UseParameterizedNamesInDynamicQuery_IsTrue_WrappedIntegerValueEnum_Should_Be_Unwrapped()
{
// Arrange
var list = new List
{
new()
{
Name = "Duffy",
GenderType = Gender.Female
},
new()
{
Name = "Garry",
GenderType = Gender.Male
}
};
var config = new ParsingConfig
{
UseParameterizedNamesInDynamicQuery = true
};
// Act
var result = list.AsQueryable().Where(config, "GenderType = 1").ToArray();
// Assert
result.Should().HaveCount(1);
}
[Fact]
public void When_UseParameterizedNamesInDynamicQuery_IsTrue_WrappedIntegerStringValueEnumAsParameter_Should_Be_Unwrapped()
{
// Arrange
var list = new List
{
new()
{
Name = "Duffy",
GenderType = Gender.Female
},
new()
{
Name = "Garry",
GenderType = Gender.Male
}
};
var config = new ParsingConfig
{
UseParameterizedNamesInDynamicQuery = true
};
// Act
var result = list.AsQueryable().Where(config, "GenderType = @0", 1).ToArray();
// Assert
result.Should().HaveCount(1);
}
}
public class Customer
{
public int CustomerID { get; set; }
public string Name { get; set; }
public string CompanyName { get; set; }
public string City { get; set; }
public string Phone { get; set; }
public Location Location { get; set; }
public DateTimeOffset? LastContact { get; set; }
public Gender GenderType { get; set; }
}
public class Location
{
public int LocationID { get; set; }
public string Name { get; set; }
public DateTimeOffset UpdateAt { get; set; }
}
public enum Gender
{
Male = 0,
Female = 1,
Other = 2
}