Skip to content

Commit b82d1e1

Browse files
committed
Modified tests
1 parent 5a90a74 commit b82d1e1

File tree

2 files changed

+163
-113
lines changed

2 files changed

+163
-113
lines changed

src/NHibernate.Test/Async/Linq/EnumTests.cs

+82-57
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,18 @@ namespace NHibernate.Test.Linq
2121
{
2222
using System.Threading.Tasks;
2323
using System.Threading;
24+
using System.Linq.Expressions;
25+
2426
[TestFixture(typeof(EnumType<TestEnum>))]
2527
[TestFixture(typeof(EnumStringType<TestEnum>))]
2628
[TestFixture(typeof(EnumAnsiStringType<TestEnum>))]
2729
public class EnumTestsAsync : TestCaseMappingByCode
2830
{
2931
private IType _enumType;
32+
private ISession _session;
3033

34+
private IQueryable<EnumEntity> TestEntities { get; set; }
35+
private IQueryable<EnumEntity> TestEntitiesInDb { get; set; }
3136

3237
public EnumTestsAsync(System.Type enumType)
3338
{
@@ -43,6 +48,7 @@ protected override HbmMapping GetMappings()
4348
rc.Table("EnumEntity");
4449
rc.Id(x => x.Id, m => m.Generator(Generators.Identity));
4550
rc.Property(x => x.Name);
51+
rc.Property(x => x.BatchId);
4652
rc.Property(x => x.Enum, m => m.Type(_enumType));
4753
rc.Property(x => x.NullableEnum, m => m.Type(_enumType));
4854
rc.ManyToOne(x => x.Other, m => m.Cascade(Mapping.ByCode.Cascade.All));
@@ -55,25 +61,43 @@ protected override HbmMapping GetMappings()
5561
protected override void OnSetUp()
5662
{
5763
base.OnSetUp();
58-
using (var session = OpenSession())
59-
using (var trans = session.BeginTransaction())
64+
_session = OpenSession();
65+
66+
var entities = new[] {
67+
new EnumEntity { Enum = TestEnum.Unspecified },
68+
new EnumEntity { Enum = TestEnum.Small, NullableEnum = TestEnum.Large },
69+
new EnumEntity { Enum = TestEnum.Small, NullableEnum = TestEnum.Medium },
70+
new EnumEntity { Enum = TestEnum.Medium, NullableEnum = TestEnum.Medium },
71+
new EnumEntity { Enum = TestEnum.Medium, NullableEnum = TestEnum.Small },
72+
new EnumEntity { Enum = TestEnum.Medium },
73+
new EnumEntity { Enum = TestEnum.Large, NullableEnum = TestEnum.Medium },
74+
new EnumEntity { Enum = TestEnum.Large, NullableEnum = TestEnum.Unspecified },
75+
new EnumEntity { Enum = TestEnum.Large },
76+
new EnumEntity { Enum = TestEnum.Large }
77+
};
78+
79+
var batchId = Guid.NewGuid();
80+
81+
using (var trans = _session.BeginTransaction())
6082
{
61-
session.Save(new EnumEntity { Enum = TestEnum.Unspecified });
62-
session.Save(new EnumEntity { Enum = TestEnum.Small });
63-
session.Save(new EnumEntity { Enum = TestEnum.Small });
64-
session.Save(new EnumEntity { Enum = TestEnum.Medium });
65-
session.Save(new EnumEntity { Enum = TestEnum.Medium });
66-
session.Save(new EnumEntity { Enum = TestEnum.Medium });
67-
session.Save(new EnumEntity { Enum = TestEnum.Large });
68-
session.Save(new EnumEntity { Enum = TestEnum.Large });
69-
session.Save(new EnumEntity { Enum = TestEnum.Large });
70-
session.Save(new EnumEntity { Enum = TestEnum.Large });
83+
foreach (var item in entities)
84+
{
85+
item.BatchId = batchId;
86+
_session.Save(item);
87+
}
7188
trans.Commit();
7289
}
90+
91+
TestEntitiesInDb = _session.Query<EnumEntity>().Where(x => x.BatchId == batchId);
92+
TestEntities = entities.AsQueryable();
7393
}
7494

7595
protected override void OnTearDown()
7696
{
97+
if (_session.IsOpen)
98+
{
99+
_session.Close();
100+
}
77101
using (var session = OpenSession())
78102
using (var transaction = session.BeginTransaction())
79103
{
@@ -108,76 +132,68 @@ public async Task CanQueryOnEnum_Unspecified_1Async()
108132
await (CanQueryOnEnumAsync(TestEnum.Unspecified, 1));
109133
}
110134

111-
private async Task CanQueryOnEnumAsync(TestEnum type, int expectedCount, CancellationToken cancellationToken = default(CancellationToken))
135+
private async Task CanQueryOnEnumAsync(TestEnum type, int expectedCount)
112136
{
113-
using (var session = OpenSession())
114-
using (var trans = session.BeginTransaction())
115-
{
116-
var query = await (session.Query<EnumEntity>().Where(x => x.Enum == type).ToListAsync(cancellationToken));
137+
var query = await (TestEntitiesInDb.Where(x => x.Enum == type).ToListAsync());
117138

118-
Assert.AreEqual(expectedCount, query.Count);
119-
}
139+
Assert.AreEqual(expectedCount, query.Count);
120140
}
121141

122142
[Test]
123143
public async Task CanQueryWithContainsOnTestEnum_Small_1Async()
124144
{
125145
var values = new[] { TestEnum.Small, TestEnum.Medium };
126-
using (var session = OpenSession())
127-
using (var trans = session.BeginTransaction())
128-
{
129-
var query = await (session.Query<EnumEntity>().Where(x => values.Contains(x.Enum)).ToListAsync());
130146

131-
Assert.AreEqual(5, query.Count);
132-
}
147+
var query = await (TestEntitiesInDb.Where(x => values.Contains(x.Enum)).ToListAsync());
148+
149+
Assert.AreEqual(5, query.Count);
133150
}
134151

135152
[Test]
136153
public async Task ConditionalNavigationPropertyAsync()
137154
{
138155
TestEnum? type = null;
139-
using (var session = OpenSession())
140-
using (var trans = session.BeginTransaction())
141-
{
142-
var entities = session.Query<EnumEntity>();
143-
await (entities.Where(o => o.Enum == TestEnum.Large).ToListAsync());
144-
await (entities.Where(o => TestEnum.Large != o.Enum).ToListAsync());
145-
await (entities.Where(o => (o.NullableEnum ?? TestEnum.Large) == TestEnum.Medium).ToListAsync());
146-
await (entities.Where(o => ((o.NullableEnum ?? type) ?? o.Enum) == TestEnum.Medium).ToListAsync());
147-
148-
await (entities.Where(o => (o.NullableEnum.HasValue ? o.Enum : TestEnum.Unspecified) == TestEnum.Medium).ToListAsync());
149-
await (entities.Where(o => (o.Enum != TestEnum.Large
156+
157+
158+
await (TestEntitiesInDb.Where(o => o.Enum == TestEnum.Large).ToListAsync());
159+
await (TestEntitiesInDb.Where(o => TestEnum.Large != o.Enum).ToListAsync());
160+
await (TestEntitiesInDb.Where(o => (o.NullableEnum ?? TestEnum.Large) == TestEnum.Medium).ToListAsync());
161+
await (TestEntitiesInDb.Where(o => ((o.NullableEnum ?? type) ?? o.Enum) == TestEnum.Medium).ToListAsync());
162+
163+
await (TestEntitiesInDb.Where(o => (o.NullableEnum.HasValue ? o.Enum : TestEnum.Unspecified) == TestEnum.Medium).ToListAsync());
164+
await (TestEntitiesInDb.Where(o => (o.Enum != TestEnum.Large
150165
? (o.NullableEnum.HasValue ? o.Enum : TestEnum.Unspecified)
151166
: TestEnum.Small) == TestEnum.Medium).ToListAsync());
152167

153-
await (entities.Where(o => (o.Enum == TestEnum.Large ? o.Other : o.Other).Name == "test").ToListAsync());
154-
}
168+
await (TestEntitiesInDb.Where(o => (o.Enum == TestEnum.Large ? o.Other : o.Other).Name == "test").ToListAsync());
155169
}
156170

157171
[Test]
158172
public async Task CanQueryComplexExpressionOnTestEnumAsync()
159173
{
160174
var type = TestEnum.Unspecified;
161-
using (var session = OpenSession())
162-
using (var trans = session.BeginTransaction())
175+
176+
Expression<Func<EnumEntity, bool>> predicate = user => (user.NullableEnum == TestEnum.Large
177+
? TestEnum.Medium
178+
: user.NullableEnum ?? user.Enum
179+
) == type;
180+
181+
var query = await (TestEntitiesInDb.Where(predicate).Select(entity => new ProjectedEnum
163182
{
164-
var entities = session.Query<EnumEntity>();
165-
166-
var query = await ((from user in entities
167-
where (user.NullableEnum == TestEnum.Large
168-
? TestEnum.Medium
169-
: user.NullableEnum ?? user.Enum
170-
) == type
171-
select new
172-
{
173-
user,
174-
simple = user.Enum,
175-
condition = user.Enum == TestEnum.Large ? TestEnum.Medium : user.Enum,
176-
coalesce = user.NullableEnum ?? TestEnum.Medium
177-
}).ToListAsync());
178-
179-
Assert.That(query.Count, Is.EqualTo(1));
180-
}
183+
Entity = entity,
184+
Simple = entity.Enum,
185+
Condition = entity.Enum == TestEnum.Large ? TestEnum.Medium : entity.Enum,
186+
Coalesce = entity.NullableEnum ?? TestEnum.Medium
187+
}).ToListAsync());
188+
189+
var targetCount = TestEntities.Count(predicate); //the truth
190+
Assert.That(targetCount, Is.GreaterThan(0)); //test sanity check
191+
Assert.That(query.Count, Is.EqualTo(targetCount));
192+
193+
Assert.That(query, Is.All.Matches<ProjectedEnum>(x => x.Simple == x.Entity.Enum));
194+
Assert.That(query, Is.All.Matches<ProjectedEnum>(x => x.Condition == (x.Entity.Enum == TestEnum.Large ? TestEnum.Medium : x.Entity.Enum)));
195+
Assert.That(query, Is.All.Matches<ProjectedEnum>(x => x.Coalesce == (x.Entity.NullableEnum ?? TestEnum.Medium)));
196+
181197
}
182198

183199
public class EnumEntity
@@ -189,6 +205,7 @@ public class EnumEntity
189205
public virtual TestEnum? NullableEnum { get; set; }
190206

191207
public virtual EnumEntity Other { get; set; }
208+
public virtual Guid BatchId { get; set; }
192209
}
193210

194211
public enum TestEnum
@@ -218,5 +235,13 @@ public override string Name
218235

219236
public override SqlType SqlType => SqlTypeFactory.GetAnsiString(255);
220237
}
238+
239+
private class ProjectedEnum
240+
{
241+
public TestEnum Simple { get; internal set; }
242+
public TestEnum Condition { get; internal set; }
243+
public TestEnum Coalesce { get; internal set; }
244+
public EnumEntity Entity { get; internal set; }
245+
}
221246
}
222247
}

0 commit comments

Comments
 (0)