Skip to content

Commit a94329c

Browse files
Strengthen the multi-table assert and fix the insert case
1 parent cef9a8f commit a94329c

File tree

3 files changed

+105
-18
lines changed

3 files changed

+105
-18
lines changed

src/NHibernate.Test/Async/NHSpecificTest/GH1921/Fixture.cs

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
//------------------------------------------------------------------------------
99

1010

11+
using System.Linq;
1112
using NUnit.Framework;
13+
using NHibernate.Linq;
1214

1315
namespace NHibernate.Test.NHSpecificTest.GH1921
1416
{
@@ -102,23 +104,37 @@ public async Task DmlDeleteAsync(bool filtered)
102104

103105
[TestCase(null)]
104106
[TestCase("NameFilter")]
105-
[TestCase("OtherNameFilter", IgnoreReason = "Not supported")]
107+
[TestCase("OtherNameFilter")]
106108
public async Task MultiTableDmlInsertAsync(string filter, CancellationToken cancellationToken = default(CancellationToken))
107109
{
110+
var isFiltered = !string.IsNullOrEmpty(filter);
111+
108112
using (var session = OpenSession())
109113
using (var transaction = session.BeginTransaction())
110114
{
111-
if (!string.IsNullOrEmpty(filter))
115+
if (isFiltered)
112116
session.EnableFilter(filter).SetParameter("name", "Bob");
113117
var rowCount =
114118
await (session
115119
.CreateQuery(
116120
// No insert of OtherName: not supported (INSERT statements cannot refer to superclass/joined properties)
117-
"insert into MultiTableEntity (Name) select e.Name from Entity e")
121+
"insert into MultiTableEntity (Name) select e.Name from MultiTableEntity e")
118122
.ExecuteUpdateAsync(cancellationToken));
119123
await (transaction.CommitAsync(cancellationToken));
120124

121-
Assert.That(rowCount, Is.EqualTo(string.IsNullOrEmpty(filter) ? 2 : 1));
125+
Assert.That(rowCount, Is.EqualTo(isFiltered ? 1 : 2), "ResultCount");
126+
}
127+
128+
using (var session = OpenSession())
129+
using (var transaction = session.BeginTransaction())
130+
{
131+
Assert.That(
132+
await (session.Query<MultiTableEntity>().CountAsync(e => e.Name != "Bob", cancellationToken)),
133+
Is.EqualTo(isFiltered ? 1 : 2), "Name != \"Bob\"");
134+
Assert.That(
135+
await (session.Query<MultiTableEntity>().CountAsync(e => e.OtherName == null, cancellationToken)),
136+
Is.EqualTo(isFiltered ? 1 : 2), "OtherName is null");
137+
await (transaction.CommitAsync(cancellationToken));
122138
}
123139
}
124140

@@ -127,10 +143,12 @@ public async Task DmlDeleteAsync(bool filtered)
127143
[TestCase("OtherNameFilter")]
128144
public async Task MultiTableDmlUpdateAsync(string filter, CancellationToken cancellationToken = default(CancellationToken))
129145
{
146+
var isFiltered = !string.IsNullOrEmpty(filter);
147+
130148
using (var session = OpenSession())
131149
using (var transaction = session.BeginTransaction())
132150
{
133-
if (!string.IsNullOrEmpty(filter))
151+
if (isFiltered)
134152
session.EnableFilter(filter).SetParameter("name", "Bob");
135153
var rowCount =
136154
await (session
@@ -142,7 +160,19 @@ public async Task DmlDeleteAsync(bool filtered)
142160
.ExecuteUpdateAsync(cancellationToken));
143161
await (transaction.CommitAsync(cancellationToken));
144162

145-
Assert.That(rowCount, Is.EqualTo(string.IsNullOrEmpty(filter) ? 2 : 1));
163+
Assert.That(rowCount, Is.EqualTo(isFiltered ? 1 : 2), "ResultCount");
164+
}
165+
166+
using (var session = OpenSession())
167+
using (var transaction = session.BeginTransaction())
168+
{
169+
Assert.That(
170+
await (session.Query<MultiTableEntity>().CountAsync(e => e.Name == "newName", cancellationToken)),
171+
Is.EqualTo(isFiltered ? 1 : 2), "Name == \"newName\"");
172+
Assert.That(
173+
await (session.Query<MultiTableEntity>().CountAsync(e => e.OtherName == "newOtherName", cancellationToken)),
174+
Is.EqualTo(isFiltered ? 1 : 2), "Name == \"newOtherName\"");
175+
await (transaction.CommitAsync(cancellationToken));
146176
}
147177
}
148178

@@ -151,10 +181,12 @@ public async Task DmlDeleteAsync(bool filtered)
151181
[TestCase("OtherNameFilter")]
152182
public async Task MultiTableDmlDeleteAsync(string filter, CancellationToken cancellationToken = default(CancellationToken))
153183
{
184+
var isFiltered = !string.IsNullOrEmpty(filter);
185+
154186
using (var session = OpenSession())
155187
using (var transaction = session.BeginTransaction())
156188
{
157-
if (!string.IsNullOrEmpty(filter))
189+
if (isFiltered)
158190
session.EnableFilter(filter).SetParameter("name", "Bob");
159191
var rowCount =
160192
await (session
@@ -165,7 +197,19 @@ public async Task DmlDeleteAsync(bool filtered)
165197
.ExecuteUpdateAsync(cancellationToken));
166198
await (transaction.CommitAsync(cancellationToken));
167199

168-
Assert.That(rowCount, Is.EqualTo(string.IsNullOrEmpty(filter) ? 2 : 1));
200+
Assert.That(rowCount, Is.EqualTo(isFiltered ? 1 : 2), "ResultCount");
201+
}
202+
203+
using (var session = OpenSession())
204+
using (var transaction = session.BeginTransaction())
205+
{
206+
Assert.That(
207+
await (session.Query<MultiTableEntity>().CountAsync(e => e.Name != "Bob", cancellationToken)),
208+
Is.EqualTo(isFiltered ? 1 : 0), "Name != \"Bob\"");
209+
Assert.That(
210+
await (session.Query<MultiTableEntity>().CountAsync(e => e.OtherName != "Bob", cancellationToken)),
211+
Is.EqualTo(isFiltered ? 1 : 0), "OtherName != \"Bob\"");
212+
await (transaction.CommitAsync(cancellationToken));
169213
}
170214
}
171215
}

src/NHibernate.Test/NHSpecificTest/GH1921/Fixture.cs

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using NUnit.Framework;
1+
using System.Linq;
2+
using NUnit.Framework;
23

34
namespace NHibernate.Test.NHSpecificTest.GH1921
45
{
@@ -90,23 +91,37 @@ public void DmlDelete(bool filtered)
9091

9192
[TestCase(null)]
9293
[TestCase("NameFilter")]
93-
[TestCase("OtherNameFilter", IgnoreReason = "Not supported")]
94+
[TestCase("OtherNameFilter")]
9495
public void MultiTableDmlInsert(string filter)
9596
{
97+
var isFiltered = !string.IsNullOrEmpty(filter);
98+
9699
using (var session = OpenSession())
97100
using (var transaction = session.BeginTransaction())
98101
{
99-
if (!string.IsNullOrEmpty(filter))
102+
if (isFiltered)
100103
session.EnableFilter(filter).SetParameter("name", "Bob");
101104
var rowCount =
102105
session
103106
.CreateQuery(
104107
// No insert of OtherName: not supported (INSERT statements cannot refer to superclass/joined properties)
105-
"insert into MultiTableEntity (Name) select e.Name from Entity e")
108+
"insert into MultiTableEntity (Name) select e.Name from MultiTableEntity e")
106109
.ExecuteUpdate();
107110
transaction.Commit();
108111

109-
Assert.That(rowCount, Is.EqualTo(string.IsNullOrEmpty(filter) ? 2 : 1));
112+
Assert.That(rowCount, Is.EqualTo(isFiltered ? 1 : 2), "ResultCount");
113+
}
114+
115+
using (var session = OpenSession())
116+
using (var transaction = session.BeginTransaction())
117+
{
118+
Assert.That(
119+
session.Query<MultiTableEntity>().Count(e => e.Name != "Bob"),
120+
Is.EqualTo(isFiltered ? 1 : 2), "Name != \"Bob\"");
121+
Assert.That(
122+
session.Query<MultiTableEntity>().Count(e => e.OtherName == null),
123+
Is.EqualTo(isFiltered ? 1 : 2), "OtherName is null");
124+
transaction.Commit();
110125
}
111126
}
112127

@@ -115,10 +130,12 @@ public void MultiTableDmlInsert(string filter)
115130
[TestCase("OtherNameFilter")]
116131
public void MultiTableDmlUpdate(string filter)
117132
{
133+
var isFiltered = !string.IsNullOrEmpty(filter);
134+
118135
using (var session = OpenSession())
119136
using (var transaction = session.BeginTransaction())
120137
{
121-
if (!string.IsNullOrEmpty(filter))
138+
if (isFiltered)
122139
session.EnableFilter(filter).SetParameter("name", "Bob");
123140
var rowCount =
124141
session
@@ -130,7 +147,19 @@ public void MultiTableDmlUpdate(string filter)
130147
.ExecuteUpdate();
131148
transaction.Commit();
132149

133-
Assert.That(rowCount, Is.EqualTo(string.IsNullOrEmpty(filter) ? 2 : 1));
150+
Assert.That(rowCount, Is.EqualTo(isFiltered ? 1 : 2), "ResultCount");
151+
}
152+
153+
using (var session = OpenSession())
154+
using (var transaction = session.BeginTransaction())
155+
{
156+
Assert.That(
157+
session.Query<MultiTableEntity>().Count(e => e.Name == "newName"),
158+
Is.EqualTo(isFiltered ? 1 : 2), "Name == \"newName\"");
159+
Assert.That(
160+
session.Query<MultiTableEntity>().Count(e => e.OtherName == "newOtherName"),
161+
Is.EqualTo(isFiltered ? 1 : 2), "Name == \"newOtherName\"");
162+
transaction.Commit();
134163
}
135164
}
136165

@@ -139,10 +168,12 @@ public void MultiTableDmlUpdate(string filter)
139168
[TestCase("OtherNameFilter")]
140169
public void MultiTableDmlDelete(string filter)
141170
{
171+
var isFiltered = !string.IsNullOrEmpty(filter);
172+
142173
using (var session = OpenSession())
143174
using (var transaction = session.BeginTransaction())
144175
{
145-
if (!string.IsNullOrEmpty(filter))
176+
if (isFiltered)
146177
session.EnableFilter(filter).SetParameter("name", "Bob");
147178
var rowCount =
148179
session
@@ -153,7 +184,19 @@ public void MultiTableDmlDelete(string filter)
153184
.ExecuteUpdate();
154185
transaction.Commit();
155186

156-
Assert.That(rowCount, Is.EqualTo(string.IsNullOrEmpty(filter) ? 2 : 1));
187+
Assert.That(rowCount, Is.EqualTo(isFiltered ? 1 : 2), "ResultCount");
188+
}
189+
190+
using (var session = OpenSession())
191+
using (var transaction = session.BeginTransaction())
192+
{
193+
Assert.That(
194+
session.Query<MultiTableEntity>().Count(e => e.Name != "Bob"),
195+
Is.EqualTo(isFiltered ? 1 : 0), "Name != \"Bob\"");
196+
Assert.That(
197+
session.Query<MultiTableEntity>().Count(e => e.OtherName != "Bob"),
198+
Is.EqualTo(isFiltered ? 1 : 0), "OtherName != \"Bob\"");
199+
transaction.Commit();
157200
}
158201
}
159202
}

src/NHibernate.Test/NHSpecificTest/GH1921/Mappings.hbm.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<id name="Id" generator="native"/>
1414
<property name="Name"/>
1515

16-
<join table="SecondTable">
16+
<join table="SecondTable" optional="true">
1717
<key column="Id"/>
1818
<property name="OtherName"/>
1919
</join>

0 commit comments

Comments
 (0)