Skip to content

Commit 7d8d59f

Browse files
author
Daniel Laberge
committed
Added failing tests for NH-3459
1 parent 8dddfbe commit 7d8d59f

File tree

3 files changed

+151
-0
lines changed

3 files changed

+151
-0
lines changed
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
using System;
2+
using System.Linq;
3+
using NHibernate.Cfg.MappingSchema;
4+
using NHibernate.Linq;
5+
using NHibernate.Mapping.ByCode;
6+
using NUnit.Framework;
7+
8+
namespace NHibernate.Test.NHSpecificTest.NH3459
9+
{
10+
[TestFixture]
11+
public class Fixture : TestCaseMappingByCode
12+
{
13+
protected override HbmMapping GetMappings()
14+
{
15+
var mapper = new ModelMapper();
16+
mapper.Class<Order>(rc =>
17+
{
18+
rc.Table("Orders");
19+
rc.Id(x => x.Id, m => m.Generator(Generators.GuidComb));
20+
rc.Property(x => x.Name);
21+
rc.Set(x => x.OrderLines, m =>
22+
{
23+
m.Inverse(true);
24+
m.Key(k =>
25+
{
26+
k.Column("OrderId");
27+
k.NotNullable(true);
28+
});
29+
m.Cascade(Mapping.ByCode.Cascade.All.Include(Mapping.ByCode.Cascade.DeleteOrphans));
30+
m.Access(Accessor.NoSetter);
31+
}, m => m.OneToMany());
32+
});
33+
mapper.Class<OrderLine>(rc =>
34+
{
35+
rc.Table("OrderLines");
36+
rc.Id(x => x.Id, m => m.Generator(Generators.GuidComb));
37+
rc.Property(x => x.Manufacturer);
38+
rc.ManyToOne(x => x.Order, m => m.Column("OrderId"));
39+
});
40+
41+
return mapper.CompileMappingForAllExplicitlyAddedEntities();
42+
}
43+
44+
protected override void OnSetUp()
45+
{
46+
using (var session = OpenSession())
47+
using (var transaction = session.BeginTransaction())
48+
{
49+
var o1 = new Order {Name = "Order 1"};
50+
session.Save(o1);
51+
52+
var o2 = new Order {Name = "Order 2"};
53+
session.Save(o2);
54+
55+
session.Save(new OrderLine {Manufacturer = "AMD", Order = o2});
56+
57+
var o3 = new Order {Name = "Order 3"};
58+
session.Save(o3);
59+
60+
session.Save(new OrderLine {Manufacturer = "AMD", Order = o3});
61+
session.Save(new OrderLine {Manufacturer = "NVIDIA", Order = o3});
62+
session.Save(new OrderLine {Manufacturer = "INTEL", Order = o3});
63+
64+
transaction.Commit();
65+
}
66+
}
67+
68+
protected override void OnTearDown()
69+
{
70+
using (var session = OpenSession())
71+
using (var transaction = session.BeginTransaction())
72+
{
73+
session.Delete("from System.Object");
74+
75+
session.Flush();
76+
transaction.Commit();
77+
}
78+
}
79+
80+
[Test]
81+
public void LeftOuterJoinAndGroupBy()
82+
{
83+
using (var session = OpenSession())
84+
using (session.BeginTransaction())
85+
{
86+
var result = (from o in session.Query<Order>()
87+
from ol in o.OrderLines.DefaultIfEmpty()
88+
group ol by ol.Manufacturer into grp
89+
select new {grp.Key}).ToList();
90+
91+
Assert.AreEqual(4, result.Count);
92+
}
93+
}
94+
95+
[Test]
96+
public void LeftOuterJoinWithInnerRestrictionAndGroupBy()
97+
{
98+
using (var session = OpenSession())
99+
using (session.BeginTransaction())
100+
{
101+
var result = (from o in session.Query<Order>()
102+
from ol in o.OrderLines.Where(x => x.Manufacturer == "AMD").DefaultIfEmpty()
103+
group o by o.Name into grp
104+
select new {grp.Key}).ToList();
105+
106+
Assert.AreEqual(3, result.Count);
107+
}
108+
}
109+
110+
[Test]
111+
public void LeftOuterJoinWithOuterRestrictionAndGroupBy()
112+
{
113+
using (var session = OpenSession())
114+
using (session.BeginTransaction())
115+
{
116+
var result = (from o in session.Query<Order>()
117+
from ol in o.OrderLines.DefaultIfEmpty().Where(x => x.Manufacturer == "AMD")
118+
group o by o.Name into grp
119+
select new { grp.Key }).ToList();
120+
121+
Assert.AreEqual(2, result.Count);
122+
}
123+
}
124+
}
125+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace NHibernate.Test.NHSpecificTest.NH3459
5+
{
6+
public class Order
7+
{
8+
private readonly IEnumerable<OrderLine> _orderLines = new List<OrderLine>();
9+
public virtual Guid Id { get; set; }
10+
public virtual string Name { get; set; }
11+
12+
public virtual IEnumerable<OrderLine> OrderLines
13+
{
14+
get { return _orderLines; }
15+
}
16+
}
17+
18+
public class OrderLine
19+
{
20+
public virtual Guid Id { get; set; }
21+
public virtual string Manufacturer { get; set; }
22+
public virtual Order Order { get; set; }
23+
}
24+
}

src/NHibernate.Test/NHibernate.Test.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,8 @@
670670
<Compile Include="NHSpecificTest\BagWithLazyExtraAndFilter\Domain.cs" />
671671
<Compile Include="NHSpecificTest\BagWithLazyExtraAndFilter\Fixture.cs" />
672672
<Compile Include="Component\Basic\ComponentWithUniqueConstraintTests.cs" />
673+
<Compile Include="NHSpecificTest\NH3459\Fixture.cs" />
674+
<Compile Include="NHSpecificTest\NH3459\Order.cs" />
673675
<Compile Include="NHSpecificTest\NH2692\Fixture.cs" />
674676
<Compile Include="NHSpecificTest\NH2692\Model.cs" />
675677
<Compile Include="NHSpecificTest\NH2772\Model.cs" />

0 commit comments

Comments
 (0)