Skip to content

Commit 0f500e0

Browse files
committed
Add test for Contains within bulk operations
1 parent 881c813 commit 0f500e0

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
// Copyright (C) 2020 Xtensive LLC.
2+
// This code is distributed under MIT license terms.
3+
// See the License.txt file in the project root for more information.
4+
5+
using System;
6+
using System.Linq;
7+
using NUnit.Framework;
8+
using Xtensive.Orm.BulkOperations.ContainsTestModel;
9+
using Xtensive.Orm.Configuration;
10+
11+
namespace Xtensive.Orm.BulkOperations.ContainsTestModel
12+
{
13+
[HierarchyRoot]
14+
[KeyGenerator(KeyGeneratorKind.None)]
15+
public class TagType : Entity
16+
{
17+
[Field, Key]
18+
public long Id { get; private set; }
19+
20+
[Field]
21+
public int ProjectedValueAdjustment { get; set; }
22+
23+
public TagType(Session session, long id)
24+
:base(session, id)
25+
{
26+
}
27+
}
28+
}
29+
30+
namespace Xtensive.Orm.BulkOperations.Tests
31+
{
32+
public class ContainsTest : AutoBuildTest
33+
{
34+
private long[] tagIds;
35+
36+
protected override DomainConfiguration BuildConfiguration()
37+
{
38+
var configuration = base.BuildConfiguration();
39+
configuration.Types.Register(typeof(TagType).Assembly, typeof(TagType).Namespace);
40+
return configuration;
41+
}
42+
43+
protected override void PopulateData()
44+
{
45+
tagIds = Enumerable.Range(0, 100).Select(i => (long) i).ToArray();
46+
using (var session = Domain.OpenSession())
47+
using (var transaction = session.OpenTransaction()) {
48+
foreach (var id in tagIds.Concat(Enumerable.Repeat(1000, 1).Select(i => (long) i)))
49+
new TagType(session, id) { ProjectedValueAdjustment = -1 };
50+
transaction.Complete();
51+
}
52+
}
53+
54+
[Test]
55+
public void Test1()
56+
{
57+
using (var session = Domain.OpenSession())
58+
using (var tx = session.OpenTransaction()) {
59+
var updatedRows = session.Query.All<TagType>()
60+
.Where(t => t.Id.In(tagIds))
61+
.Set(t => t.ProjectedValueAdjustment, 2)
62+
.Update();
63+
Assert.That(updatedRows, Is.EqualTo(100));
64+
Assert.That(session.Query.All<TagType>().Count(t => t.ProjectedValueAdjustment == 2 && t.Id <= 200), Is.EqualTo(100));
65+
Assert.That(session.Query.All<TagType>().Count(t => t.ProjectedValueAdjustment == -1 && t.Id > 700), Is.EqualTo(1));
66+
}
67+
}
68+
69+
[Test]
70+
public void Test2()
71+
{
72+
using (var session = Domain.OpenSession())
73+
using (var tx = session.OpenTransaction()) {
74+
var updatedRows = session.Query.All<TagType>()
75+
.Where(t => t.Id.In(IncludeAlgorithm.ComplexCondition, tagIds))
76+
.Set(t => t.ProjectedValueAdjustment, 2)
77+
.Update();
78+
Assert.That(updatedRows, Is.EqualTo(100));
79+
Assert.That(session.Query.All<TagType>().Count(t => t.ProjectedValueAdjustment == 2 && t.Id <= 200), Is.EqualTo(100));
80+
Assert.That(session.Query.All<TagType>().Count(t => t.ProjectedValueAdjustment == -1 && t.Id > 700), Is.EqualTo(1));
81+
}
82+
}
83+
84+
[Test]
85+
public void Test3()
86+
{
87+
using (var session = Domain.OpenSession())
88+
using (var tx = session.OpenTransaction()) {
89+
Assert.Throws<NotSupportedException>(() => session.Query.All<TagType>()
90+
.Where(t => t.Id.In(IncludeAlgorithm.TemporaryTable, tagIds))
91+
.Set(t => t.ProjectedValueAdjustment, 2)
92+
.Update());
93+
}
94+
}
95+
96+
[Test]
97+
public void Test4()
98+
{
99+
using (var session = Domain.OpenSession())
100+
using (var tx = session.OpenTransaction()) {
101+
var updatedRows = session.Query.All<TagType>()
102+
.Where(t => tagIds.Contains(t.Id))
103+
.Set(t => t.ProjectedValueAdjustment, 2)
104+
.Update();
105+
Assert.That(updatedRows, Is.EqualTo(100));
106+
Assert.That(session.Query.All<TagType>().Count(t => t.ProjectedValueAdjustment == 2 && t.Id <= 200), Is.EqualTo(100));
107+
Assert.That(session.Query.All<TagType>().Count(t => t.ProjectedValueAdjustment == -1 && t.Id > 700), Is.EqualTo(1));
108+
}
109+
}
110+
}
111+
}

0 commit comments

Comments
 (0)