Skip to content

Commit 7c5a3fb

Browse files
committed
Added unit test for #750
1 parent 63a288e commit 7c5a3fb

File tree

5 files changed

+290
-0
lines changed

5 files changed

+290
-0
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
using System.Linq;
2+
using NHibernate.Criterion;
3+
using NHibernate.Linq;
4+
using NHibernate.Transform;
5+
using NUnit.Framework;
6+
7+
namespace NHibernate.Test.NHSpecificTest.NH0750
8+
{
9+
public class ProductSummary
10+
{
11+
public int ProductId { get; set; }
12+
13+
public string Name { get; set; }
14+
15+
public int TotalQuantity { get; set; }
16+
17+
public decimal TotalPrice { get; set; }
18+
}
19+
20+
[TestFixture]
21+
public class Fixture : BugTestCase
22+
{
23+
protected override void OnSetUp()
24+
{
25+
using (ISession session = OpenSession())
26+
using (ITransaction tx = session.BeginTransaction())
27+
{
28+
var greenTea = new Product()
29+
{
30+
ProductId = 1,
31+
Name = "Green Tea",
32+
UnitPrice = 5
33+
};
34+
35+
session.Save(greenTea);
36+
37+
var blackTea = new Product()
38+
{
39+
ProductId = 2,
40+
Name = "Black Tea",
41+
UnitPrice = 10
42+
};
43+
44+
session.Save(blackTea);
45+
46+
var greenTeaOrder = new Order()
47+
{
48+
OrderId = 1,
49+
OrderDate = System.DateTime.Now
50+
};
51+
52+
session.Save(greenTeaOrder);
53+
54+
greenTeaOrder.OrderLines.Add(new OrderLine() { Order = greenTeaOrder, Product = greenTea, Quantity = 2, UnitPrice = greenTea.UnitPrice ?? 0 });
55+
56+
session.Save(greenTeaOrder);
57+
58+
var blackTeaOrder = new Order()
59+
{
60+
OrderId = 2,
61+
OrderDate = System.DateTime.Now
62+
};
63+
64+
session.Save(blackTeaOrder);
65+
66+
blackTeaOrder.OrderLines.Add(new OrderLine() { Order = blackTeaOrder, Product = blackTea, Quantity = 5, UnitPrice = blackTea.UnitPrice ?? 0 });
67+
68+
session.Save(blackTeaOrder);
69+
tx.Commit();
70+
}
71+
}
72+
73+
[Test]
74+
public void MapQueryResultWithAliasToBeanTransformer()
75+
{
76+
Assert.DoesNotThrow(() => GetSaleSummaries());
77+
}
78+
79+
public void GetSaleSummaries()
80+
{
81+
using (var session = OpenSession())
82+
using (var tx = session.BeginTransaction())
83+
{
84+
var criteria = session.CreateCriteria<Order>("O")
85+
.CreateCriteria("O.OrderLines", "OI", SqlCommand.JoinType.InnerJoin)
86+
.CreateCriteria("OI.Product", "P", SqlCommand.JoinType.InnerJoin);
87+
88+
var summaeries = criteria.SetProjection(Projections.ProjectionList().Add(Projections.Property("P.ProductId"), "ProductId")
89+
.Add(Projections.Property("P.Name"), "Name")
90+
.Add(Projections.Sum(Projections.Cast(NHibernateUtil.Int32, Projections.Property("OI.Quantity"))), "TotalQuantity")
91+
.Add(Projections.Sum("OI.UnitPrice"), "TotalPrice")
92+
.Add(Projections.GroupProperty("P.ProductId"))
93+
.Add(Projections.GroupProperty("P.Name")))
94+
.SetResultTransformer(Transformers.AliasToBean(typeof(ProductSummary)))
95+
.List<ProductSummary>();
96+
tx.Commit();
97+
}
98+
}
99+
}
100+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" namespace="NHibernate.Test.NHSpecificTest.NH0750">
3+
4+
<class name="Order" table="Orders">
5+
<id name="OrderId" column="OrderId" type="int" unsaved-value="0"
6+
access="field.camelcase-underscore">
7+
<generator class="assigned" />
8+
</id>
9+
<property name="OrderDate" column="OrderDate" type="DateTime"
10+
access="field.camelcase-underscore"/>
11+
<set name="OrderLines" lazy="true" access="field.camelcase-underscore"
12+
cascade="all-delete-orphan" inverse="true">
13+
<key column="OrderId"/>
14+
<one-to-many class="OrderLine"/>
15+
</set>
16+
</class>
17+
18+
<class name="OrderLine" table="OrderLines">
19+
<id name="OrderLineId" column="OrderLineId" type="int" unsaved-value="0"
20+
access="field.camelcase-underscore">
21+
<generator class="native" />
22+
</id>
23+
<many-to-one name="Order" class="Order" column="OrderId" not-null="true"
24+
access="field.camelcase-underscore" fetch="select"/>
25+
<many-to-one name="Product" class="Product" column="ProductId" not-null="true"
26+
access="field.camelcase-underscore" fetch="select"/>
27+
<property name="UnitPrice" column="UnitPrice" type="Decimal"
28+
not-null="true" access="field.camelcase-underscore"/>
29+
<property name="Quantity" column="Quantity" type="int"
30+
not-null="true" access="field.camelcase-underscore"/>
31+
</class>
32+
33+
<class name="Product" table="Products">
34+
<id name="ProductId" column="ProductId" type="int" unsaved-value="0" access="field.camelcase-underscore">
35+
<generator class="assigned" />
36+
</id>
37+
<property name="Name" column="ProductName" type="string" length="40" not-null="true" access="field.camelcase-underscore" />
38+
<property name="UnitPrice" column="UnitPrice" type="Decimal" access="field.camelcase-underscore" />
39+
<bag name="OrderLines" lazy="true" access="field.camelcase-underscore" cascade="none">
40+
<key column="ProductId" />
41+
<one-to-many class="OrderLine" />
42+
</bag>
43+
</class>
44+
45+
</hibernate-mapping>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Collections.ObjectModel;
4+
5+
namespace NHibernate.Test.NHSpecificTest.NH0750
6+
{
7+
public class Order
8+
{
9+
private readonly ISet<OrderLine> _orderLines;
10+
private DateTime? _orderDate;
11+
private int _orderId;
12+
13+
public Order()
14+
{
15+
_orderLines = new HashSet<OrderLine>();
16+
}
17+
18+
public virtual int OrderId
19+
{
20+
get { return _orderId; }
21+
set { _orderId = value; }
22+
}
23+
24+
public virtual DateTime? OrderDate
25+
{
26+
get { return _orderDate; }
27+
set { _orderDate = value; }
28+
}
29+
30+
public virtual ISet<OrderLine> OrderLines
31+
{
32+
get { return _orderLines; }
33+
}
34+
35+
public virtual void AddOrderLine(OrderLine orderLine)
36+
{
37+
if (!_orderLines.Contains(orderLine))
38+
{
39+
orderLine.Order = this;
40+
_orderLines.Add(orderLine);
41+
}
42+
}
43+
44+
public virtual void RemoveOrderLine(OrderLine orderLine)
45+
{
46+
if (_orderLines.Contains(orderLine))
47+
{
48+
_orderLines.Remove(orderLine);
49+
orderLine.Order = null;
50+
}
51+
}
52+
}
53+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
namespace NHibernate.Test.NHSpecificTest.NH0750
2+
{
3+
public class OrderLine
4+
{
5+
private int _orderLineId;
6+
private Order _order;
7+
private Product _product;
8+
private int _quantity;
9+
private decimal _unitPrice;
10+
11+
public OrderLine() : this(null, null)
12+
{
13+
}
14+
15+
public OrderLine(Order order, Product product)
16+
{
17+
_order = order;
18+
_product = product;
19+
}
20+
21+
public virtual int OrderLineId
22+
{
23+
get { return _orderLineId; }
24+
set { _orderLineId = value; }
25+
}
26+
27+
public virtual Order Order
28+
{
29+
get { return _order; }
30+
set { _order = value; }
31+
}
32+
33+
public virtual Product Product
34+
{
35+
get { return _product; }
36+
set { _product = value; }
37+
}
38+
39+
public virtual decimal UnitPrice
40+
{
41+
get { return _unitPrice; }
42+
set { _unitPrice = value; }
43+
}
44+
45+
public virtual int Quantity
46+
{
47+
get { return _quantity; }
48+
set { _quantity = value; }
49+
}
50+
}
51+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System.Collections.Generic;
2+
using System.Collections.ObjectModel;
3+
4+
namespace NHibernate.Test.NHSpecificTest.NH0750
5+
{
6+
public class Product
7+
{
8+
private readonly IList<OrderLine> _orderLines;
9+
private decimal? _unitPrice;
10+
private int _productId;
11+
private string _name;
12+
13+
public Product()
14+
{
15+
_orderLines = new List<OrderLine>();
16+
}
17+
18+
public virtual int ProductId
19+
{
20+
get { return _productId; }
21+
set { _productId = value; }
22+
}
23+
24+
public virtual string Name
25+
{
26+
get { return _name; }
27+
set { _name = value; }
28+
}
29+
30+
public virtual decimal? UnitPrice
31+
{
32+
get { return _unitPrice; }
33+
set { _unitPrice = value; }
34+
}
35+
36+
public virtual ReadOnlyCollection<OrderLine> OrderLines
37+
{
38+
get { return new ReadOnlyCollection<OrderLine>(_orderLines); }
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)