Skip to content

Commit cc31c44

Browse files
maca88fredericDelaporte
authored andcommitted
Add OData test for single property $expand
1 parent 6b71ce6 commit cc31c44

File tree

2 files changed

+62
-16
lines changed

2 files changed

+62
-16
lines changed

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

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,21 @@ protected override void OnSetUp()
3737
_edmModel = CreatEdmModel();
3838
}
3939

40+
[TestCase("$expand=Customer", 830, "Customer")]
41+
[TestCase("$expand=OrderLines", 830, "OrderLines")]
42+
public async Task ExpandAsync(string queryString, int expectedRows, string expandedProperty)
43+
{
44+
var query = ApplyFilter(session.Query<Order>(), queryString);
45+
Assert.That(query, Is.AssignableTo<IQueryable<ISelectExpandWrapper>>());
46+
47+
var results = await (((IQueryable<ISelectExpandWrapper>) query).ToListAsync());
48+
Assert.That(results, Has.Count.EqualTo(expectedRows));
49+
50+
var dict = results[0].ToDictionary();
51+
Assert.That(dict.TryGetValue(expandedProperty, out var value), Is.True);
52+
Assert.That(value, Is.Not.Null);
53+
}
54+
4055
[TestCase("$apply=groupby((Customer/CustomerId))", 89)]
4156
[TestCase("$apply=groupby((Customer/CustomerId))&$orderby=Customer/CustomerId", 89)]
4257
[TestCase("$apply=groupby((Customer/CustomerId, ShippingAddress/PostalCode), aggregate(OrderId with average as Average, Employee/EmployeeId with max as Max))", 89)]
@@ -82,14 +97,14 @@ private static IEdmModel CreatEdmModel()
8297
{
8398
var builder = new ODataConventionModelBuilder();
8499

85-
var adressModel = builder.ComplexType<Address>();
86-
adressModel.Property(o => o.City);
87-
adressModel.Property(o => o.Country);
88-
adressModel.Property(o => o.Fax);
89-
adressModel.Property(o => o.PhoneNumber);
90-
adressModel.Property(o => o.PostalCode);
91-
adressModel.Property(o => o.Region);
92-
adressModel.Property(o => o.Street);
100+
var addressModel = builder.ComplexType<Address>();
101+
addressModel.Property(o => o.City);
102+
addressModel.Property(o => o.Country);
103+
addressModel.Property(o => o.Fax);
104+
addressModel.Property(o => o.PhoneNumber);
105+
addressModel.Property(o => o.PostalCode);
106+
addressModel.Property(o => o.Region);
107+
addressModel.Property(o => o.Street);
93108

94109
var customerModel = builder.EntitySet<Customer>(nameof(Customer));
95110
customerModel.EntityType.HasKey(o => o.CustomerId);
@@ -98,6 +113,13 @@ private static IEdmModel CreatEdmModel()
98113
customerModel.EntityType.ComplexProperty(o => o.Address);
99114
customerModel.EntityType.HasMany(o => o.Orders);
100115

116+
var orderLineModel = builder.EntitySet<OrderLine>(nameof(OrderLine));
117+
orderLineModel.EntityType.HasKey(o => o.Id);
118+
orderLineModel.EntityType.Property(o => o.Discount);
119+
orderLineModel.EntityType.Property(o => o.Quantity);
120+
orderLineModel.EntityType.Property(o => o.UnitPrice);
121+
orderLineModel.EntityType.HasRequired(o => o.Order);
122+
101123
var orderModel = builder.EntitySet<Order>(nameof(Order));
102124
orderModel.EntityType.HasKey(o => o.OrderId);
103125
orderModel.EntityType.Property(o => o.Freight);
@@ -108,6 +130,7 @@ private static IEdmModel CreatEdmModel()
108130
orderModel.EntityType.ComplexProperty(o => o.ShippingAddress);
109131
orderModel.EntityType.HasRequired(o => o.Customer);
110132
orderModel.EntityType.HasOptional(o => o.Employee);
133+
orderModel.EntityType.HasMany(o => o.OrderLines);
111134

112135
var employeeModel = builder.EntitySet<Employee>(nameof(Employee));
113136
employeeModel.EntityType.HasKey(o => o.EmployeeId);

src/NHibernate.Test/Linq/ODataTests.cs

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,21 @@ protected override void OnSetUp()
2525
_edmModel = CreatEdmModel();
2626
}
2727

28+
[TestCase("$expand=Customer", 830, "Customer")]
29+
[TestCase("$expand=OrderLines", 830, "OrderLines")]
30+
public void Expand(string queryString, int expectedRows, string expandedProperty)
31+
{
32+
var query = ApplyFilter(session.Query<Order>(), queryString);
33+
Assert.That(query, Is.AssignableTo<IQueryable<ISelectExpandWrapper>>());
34+
35+
var results = ((IQueryable<ISelectExpandWrapper>) query).ToList();
36+
Assert.That(results, Has.Count.EqualTo(expectedRows));
37+
38+
var dict = results[0].ToDictionary();
39+
Assert.That(dict.TryGetValue(expandedProperty, out var value), Is.True);
40+
Assert.That(value, Is.Not.Null);
41+
}
42+
2843
[TestCase("$apply=groupby((Customer/CustomerId))", 89)]
2944
[TestCase("$apply=groupby((Customer/CustomerId))&$orderby=Customer/CustomerId", 89)]
3045
[TestCase("$apply=groupby((Customer/CustomerId, ShippingAddress/PostalCode), aggregate(OrderId with average as Average, Employee/EmployeeId with max as Max))", 89)]
@@ -70,14 +85,14 @@ private static IEdmModel CreatEdmModel()
7085
{
7186
var builder = new ODataConventionModelBuilder();
7287

73-
var adressModel = builder.ComplexType<Address>();
74-
adressModel.Property(o => o.City);
75-
adressModel.Property(o => o.Country);
76-
adressModel.Property(o => o.Fax);
77-
adressModel.Property(o => o.PhoneNumber);
78-
adressModel.Property(o => o.PostalCode);
79-
adressModel.Property(o => o.Region);
80-
adressModel.Property(o => o.Street);
88+
var addressModel = builder.ComplexType<Address>();
89+
addressModel.Property(o => o.City);
90+
addressModel.Property(o => o.Country);
91+
addressModel.Property(o => o.Fax);
92+
addressModel.Property(o => o.PhoneNumber);
93+
addressModel.Property(o => o.PostalCode);
94+
addressModel.Property(o => o.Region);
95+
addressModel.Property(o => o.Street);
8196

8297
var customerModel = builder.EntitySet<Customer>(nameof(Customer));
8398
customerModel.EntityType.HasKey(o => o.CustomerId);
@@ -86,6 +101,13 @@ private static IEdmModel CreatEdmModel()
86101
customerModel.EntityType.ComplexProperty(o => o.Address);
87102
customerModel.EntityType.HasMany(o => o.Orders);
88103

104+
var orderLineModel = builder.EntitySet<OrderLine>(nameof(OrderLine));
105+
orderLineModel.EntityType.HasKey(o => o.Id);
106+
orderLineModel.EntityType.Property(o => o.Discount);
107+
orderLineModel.EntityType.Property(o => o.Quantity);
108+
orderLineModel.EntityType.Property(o => o.UnitPrice);
109+
orderLineModel.EntityType.HasRequired(o => o.Order);
110+
89111
var orderModel = builder.EntitySet<Order>(nameof(Order));
90112
orderModel.EntityType.HasKey(o => o.OrderId);
91113
orderModel.EntityType.Property(o => o.Freight);
@@ -96,6 +118,7 @@ private static IEdmModel CreatEdmModel()
96118
orderModel.EntityType.ComplexProperty(o => o.ShippingAddress);
97119
orderModel.EntityType.HasRequired(o => o.Customer);
98120
orderModel.EntityType.HasOptional(o => o.Employee);
121+
orderModel.EntityType.HasMany(o => o.OrderLines);
99122

100123
var employeeModel = builder.EntitySet<Employee>(nameof(Employee));
101124
employeeModel.EntityType.HasKey(o => o.EmployeeId);

0 commit comments

Comments
 (0)