forked from nhibernate/nhibernate-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLinqToFutureValueFixture.cs
130 lines (114 loc) · 3.36 KB
/
LinqToFutureValueFixture.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by AsyncGenerator.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Linq;
using NHibernate.Linq;
using NUnit.Framework;
namespace NHibernate.Test.Futures
{
using System.Threading.Tasks;
[TestFixture]
public class LinqToFutureValueFixtureAsync : FutureFixture
{
[Test]
public async Task CanExecuteToFutureValueCountAsync()
{
using (var session = OpenSession())
using (session.BeginTransaction())
{
var personsCount = session.Query<Person>()
.Where(x => x.Name == "Test1")
.ToFutureValue(x => x.Count());
Assert.AreEqual(1, await (personsCount.GetValueAsync()));
}
}
[Test]
public async Task CanExecuteToFutureValueCountWithPredicateAsync()
{
using (var session = OpenSession())
using (session.BeginTransaction())
{
var personsCount = session.Query<Person>()
.ToFutureValue(q => q.Count(x => x.Name == "Test1"));
Assert.AreEqual(1, await (personsCount.GetValueAsync()));
}
}
[Test(Description = "https://github.com/nhibernate/nhibernate-core/issues/1387")]
public async Task ToFutureValueWithSumReturnsResultAsync()
{
using (var s = OpenSession())
{
var personsSum = s.Query<Person>()
.Select(x => x.Id)
.ToFutureValue(x => x.Sum());
Assert.IsNotNull(personsSum);
Assert.NotZero(await (personsSum.GetValueAsync()));
}
}
[Test]
public void ToFutureValueWithSumOnEmptySetThrowsAsync()
{
using (var s = OpenSession())
{
var personsSum = s.Query<Person>()
.Where(x => false) // make this an empty set
.Select(x => x.Id)
.ToFutureValue(x => x.Sum());
Assert.That(() => personsSum.GetValueAsync(), Throws.InnerException.TypeOf<InvalidOperationException>().Or.InnerException.TypeOf<ArgumentNullException>());
}
}
[Test]
public async Task ToFutureValueWithNullableSumReturnsResultAsync()
{
using (var s = OpenSession())
{
var ageSum = s.Query<Person>()
.Select(x => x.Age)
.ToFutureValue(x => x.Sum());
Assert.IsNotNull(ageSum);
Assert.IsNotNull(await (ageSum.GetValueAsync()));
Assert.NotZero((await (ageSum.GetValueAsync())).Value);
}
}
[Test]
public async Task ToFutureValueWithNullableSumOnEmptySetReturnsNullAsync()
{
using (var s = OpenSession())
{
var ageSum = s.Query<Person>()
.Where(x => false) // make this an empty set
.Select(x => x.Age)
.ToFutureValue(x => x.Sum());
Assert.IsNotNull(ageSum);
Assert.IsNull(await (ageSum.GetValueAsync()));
}
}
protected override void OnSetUp()
{
using (var session = OpenSession())
using (var transaction = session.BeginTransaction())
{
session.Save(new Person {Name = "Test1", Age = 20});
session.Save(new Person {Name = "Test2", Age = 30});
session.Save(new Person {Name = "Test3"});
session.Save(new Person {Name = "Test4"});
transaction.Commit();
}
}
protected override void OnTearDown()
{
using (var session = OpenSession())
using (var transaction = session.BeginTransaction())
{
session.Delete("from System.Object");
transaction.Commit();
}
}
}
}