Skip to content

Commit 6c38a13

Browse files
authored
Add some more tests for Max (#744)
1 parent 0b56ddd commit 6c38a13

File tree

2 files changed

+92
-32
lines changed

2 files changed

+92
-32
lines changed

test/System.Linq.Dynamic.Core.Tests/Helpers/Models/User.cs

+8-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ public class User
1010

1111
public string UserName { get; set; }
1212

13+
public DateTime BirthDate { get; set; }
14+
15+
public DateTime? EndDate { get; set; }
16+
1317
public int? NullableInt { get; set; }
1418

1519
public int Income { get; set; }
@@ -69,10 +73,12 @@ public static IList<User> GenerateSampleModels(int total, bool allowNullableProf
6973
Id = Guid.NewGuid(),
7074
SnowflakeId = new SnowflakeId(((ulong)long.MaxValue + (ulong)i + 2UL)),
7175
UserName = "User" + i,
72-
Income = 1 + (i % 15) * 100
76+
Income = 1 + (i % 15) * 100,
77+
BirthDate = DateTime.UtcNow.AddYears(-50),
78+
EndDate = i % 2 == 0 ? DateTime.UtcNow.AddYears(99) : null
7379
};
7480

75-
if (!allowNullableProfiles || (i % 8) != 5)
81+
if (!allowNullableProfiles || i % 8 != 5)
7682
{
7783
user.Profile = new UserProfile
7884
{
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,90 @@
11
using System.Linq.Dynamic.Core.Tests.Helpers.Models;
2+
using FluentAssertions;
23
using Xunit;
34

4-
namespace System.Linq.Dynamic.Core.Tests
5+
namespace System.Linq.Dynamic.Core.Tests;
6+
7+
public partial class QueryableTests
58
{
6-
public partial class QueryableTests
9+
[Fact]
10+
public void Max()
11+
{
12+
// Arrange
13+
var incomes = User.GenerateSampleModels(10).Select(u => u.Income).ToArray();
14+
15+
// Act
16+
var expected = incomes.Max();
17+
var actual = incomes.AsQueryable().Max();
18+
19+
// Assert
20+
Assert.Equal(expected, actual);
21+
}
22+
23+
[Fact]
24+
public void Max_Selector()
725
{
8-
[Fact]
9-
public void Max()
10-
{
11-
// Arrange
12-
var incomes = User.GenerateSampleModels(100).Select(u => u.Income);
13-
14-
// Act
15-
var expected = incomes.Max();
16-
var actual = incomes.AsQueryable().Max();
17-
18-
// Assert
19-
Assert.Equal(expected, actual);
20-
}
21-
22-
[Fact]
23-
public void Max_Selector()
24-
{
25-
// Arrange
26-
var users = User.GenerateSampleModels(100);
27-
28-
// Act
29-
var expected = users.Max(u => u.Income);
30-
var result = users.AsQueryable().Max("Income");
31-
32-
// Assert
33-
Assert.Equal(expected, result);
34-
}
26+
// Arrange
27+
var users = User.GenerateSampleModels(10);
28+
29+
// Act
30+
var expected = users.Max(u => u.Income);
31+
var result = users.AsQueryable().Max("Income");
32+
33+
// Assert
34+
Assert.Equal(expected, result);
35+
}
36+
37+
[Fact]
38+
public void Max_Where_On_Int()
39+
{
40+
// Arrange
41+
var users = User.GenerateSampleModels(10);
42+
43+
// Act
44+
var typed = users
45+
.Where(u => users.Max(m => m.Income) == u.Income)
46+
.ToList();
47+
var dynamic = users.AsQueryable()
48+
.Where("@0.Max(Income) == Income", users)
49+
.ToList();
50+
51+
// Assert
52+
dynamic.Should().BeEquivalentTo(typed);
53+
}
54+
55+
[Fact]
56+
public void Max_Where_On_DateTime()
57+
{
58+
// Arrange
59+
var users = User.GenerateSampleModels(10);
60+
61+
// Act
62+
var typed = users
63+
.Where(u => users.Max(m => m.BirthDate) == u.BirthDate)
64+
.ToList();
65+
var dynamic = users.AsQueryable()
66+
.Where("@0.Max(BirthDate) == BirthDate", users)
67+
.ToList();
68+
69+
// Assert
70+
dynamic.Should().BeEquivalentTo(typed);
71+
}
72+
73+
[Fact]
74+
public void Max_Where_On_NullableDateTime()
75+
{
76+
// Arrange
77+
var users = User.GenerateSampleModels(10);
78+
79+
// Act
80+
var typed = users
81+
.Where(u => users.Max(m => m.EndDate) == u.EndDate)
82+
.ToList();
83+
var dynamic = users.AsQueryable()
84+
.Where("@0.Max(EndDate) == EndDate", users)
85+
.ToList();
86+
87+
// Assert
88+
dynamic.Should().BeEquivalentTo(typed);
3589
}
36-
}
90+
}

0 commit comments

Comments
 (0)