Skip to content

Commit 5452f8e

Browse files
nkreipkehazzik
authored andcommitted
Add Linq Sum() with ToFutureValue tests
1 parent 32adfd1 commit 5452f8e

File tree

4 files changed

+130
-4
lines changed

4 files changed

+130
-4
lines changed

src/NHibernate.Test/Async/Futures/LinqToFutureValueFixture.cs

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
//------------------------------------------------------------------------------
99

1010

11+
using System;
1112
using System.Linq;
1213
using NHibernate.Linq;
1314
using NUnit.Framework;
@@ -45,13 +46,71 @@ public async Task CanExecuteToFutureValueCountWithPredicateAsync()
4546
}
4647
}
4748

49+
[Test(Description = "https://github.com/nhibernate/nhibernate-core/issues/1387")]
50+
public async Task ToFutureValueWithSumReturnsResultAsync()
51+
{
52+
using (var s = OpenSession())
53+
{
54+
var personsSum = s.Query<Person>()
55+
.Select(x => x.Id)
56+
.ToFutureValue(x => x.Sum());
57+
58+
Assert.IsNotNull(personsSum);
59+
Assert.NotZero(await (personsSum.GetValueAsync()));
60+
}
61+
}
62+
63+
[Test]
64+
public void ToFutureValueWithSumOnEmptySetThrowsAsync()
65+
{
66+
using (var s = OpenSession())
67+
{
68+
var personsSum = s.Query<Person>()
69+
.Where(x => false) // make this an empty set
70+
.Select(x => x.Id)
71+
.ToFutureValue(x => x.Sum());
72+
73+
Assert.That(() => personsSum.GetValueAsync(), Throws.InnerException.TypeOf<InvalidOperationException>().Or.InnerException.TypeOf<ArgumentNullException>());
74+
}
75+
}
76+
77+
[Test]
78+
public async Task ToFutureValueWithNullableSumReturnsResultAsync()
79+
{
80+
using (var s = OpenSession())
81+
{
82+
var ageSum = s.Query<Person>()
83+
.Select(x => x.Age)
84+
.ToFutureValue(x => x.Sum());
85+
86+
Assert.IsNotNull(ageSum);
87+
Assert.IsNotNull(await (ageSum.GetValueAsync()));
88+
Assert.NotZero((await (ageSum.GetValueAsync())).Value);
89+
}
90+
}
91+
92+
[Test]
93+
public async Task ToFutureValueWithNullableSumOnEmptySetReturnsNullAsync()
94+
{
95+
using (var s = OpenSession())
96+
{
97+
var ageSum = s.Query<Person>()
98+
.Where(x => false) // make this an empty set
99+
.Select(x => x.Age)
100+
.ToFutureValue(x => x.Sum());
101+
102+
Assert.IsNotNull(ageSum);
103+
Assert.IsNull(await (ageSum.GetValueAsync()));
104+
}
105+
}
106+
48107
protected override void OnSetUp()
49108
{
50109
using (var session = OpenSession())
51110
using (var transaction = session.BeginTransaction())
52111
{
53-
session.Save(new Person {Name = "Test1"});
54-
session.Save(new Person {Name = "Test2"});
112+
session.Save(new Person {Name = "Test1", Age = 20});
113+
session.Save(new Person {Name = "Test2", Age = 30});
55114
session.Save(new Person {Name = "Test3"});
56115
session.Save(new Person {Name = "Test4"});
57116
transaction.Commit();

src/NHibernate.Test/Futures/LinqToFutureValueFixture.cs

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Linq;
23
using NHibernate.Linq;
34
using NUnit.Framework;
@@ -34,13 +35,71 @@ public void CanExecuteToFutureValueCountWithPredicate()
3435
}
3536
}
3637

38+
[Test(Description = "https://github.com/nhibernate/nhibernate-core/issues/1387")]
39+
public void ToFutureValueWithSumReturnsResult()
40+
{
41+
using (var s = OpenSession())
42+
{
43+
var personsSum = s.Query<Person>()
44+
.Select(x => x.Id)
45+
.ToFutureValue(x => x.Sum());
46+
47+
Assert.IsNotNull(personsSum);
48+
Assert.NotZero(personsSum.Value);
49+
}
50+
}
51+
52+
[Test]
53+
public void ToFutureValueWithSumOnEmptySetThrows()
54+
{
55+
using (var s = OpenSession())
56+
{
57+
var personsSum = s.Query<Person>()
58+
.Where(x => false) // make this an empty set
59+
.Select(x => x.Id)
60+
.ToFutureValue(x => x.Sum());
61+
62+
Assert.That(() => personsSum.Value, Throws.InnerException.TypeOf<InvalidOperationException>().Or.InnerException.TypeOf<ArgumentNullException>());
63+
}
64+
}
65+
66+
[Test]
67+
public void ToFutureValueWithNullableSumReturnsResult()
68+
{
69+
using (var s = OpenSession())
70+
{
71+
var ageSum = s.Query<Person>()
72+
.Select(x => x.Age)
73+
.ToFutureValue(x => x.Sum());
74+
75+
Assert.IsNotNull(ageSum);
76+
Assert.IsNotNull(ageSum.Value);
77+
Assert.NotZero(ageSum.Value.Value);
78+
}
79+
}
80+
81+
[Test]
82+
public void ToFutureValueWithNullableSumOnEmptySetReturnsNull()
83+
{
84+
using (var s = OpenSession())
85+
{
86+
var ageSum = s.Query<Person>()
87+
.Where(x => false) // make this an empty set
88+
.Select(x => x.Age)
89+
.ToFutureValue(x => x.Sum());
90+
91+
Assert.IsNotNull(ageSum);
92+
Assert.IsNull(ageSum.Value);
93+
}
94+
}
95+
3796
protected override void OnSetUp()
3897
{
3998
using (var session = OpenSession())
4099
using (var transaction = session.BeginTransaction())
41100
{
42-
session.Save(new Person {Name = "Test1"});
43-
session.Save(new Person {Name = "Test2"});
101+
session.Save(new Person {Name = "Test1", Age = 20});
102+
session.Save(new Person {Name = "Test2", Age = 30});
44103
session.Save(new Person {Name = "Test3"});
45104
session.Save(new Person {Name = "Test4"});
46105
transaction.Commit();

src/NHibernate.Test/Futures/Mappings.hbm.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<generator class="native"/>
99
</id>
1010
<property name="Name"/>
11+
<property name="Age"/>
1112
<many-to-one name="Parent" />
1213
<list name="Children" cascade="all">
1314
<key column="parent_id" />

src/NHibernate.Test/Futures/Person.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public class Person
77
private IList<Person> children = new List<Person>();
88
private IList<Person> friends = new List<Person>();
99
private int id;
10+
private int? age;
1011
private Person parent;
1112

1213
public virtual string Name { get; set; }
@@ -34,5 +35,11 @@ public virtual int Id
3435
get { return id; }
3536
set { id = value; }
3637
}
38+
39+
public virtual int? Age
40+
{
41+
get { return age; }
42+
set { age = value; }
43+
}
3744
}
3845
}

0 commit comments

Comments
 (0)