Skip to content

Commit 43dae8f

Browse files
committed
Basic tests for update & delete
1 parent d5b37d7 commit 43dae8f

20 files changed

+1350
-1
lines changed
Lines changed: 264 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,264 @@
1+
using EfCore.Ydb.FunctionalTests.TestUtilities;
2+
using Microsoft.EntityFrameworkCore.BulkUpdates;
3+
using Microsoft.EntityFrameworkCore.TestUtilities;
4+
using Xunit;
5+
using Xunit.Abstractions;
6+
7+
namespace EfCore.Ydb.FunctionalTests.AllTests.BulkUpdates;
8+
9+
public class ComplexTypeBulkUpdatesYdbTest(
10+
ComplexTypeBulkUpdatesYdbTest.ComplexTypeBulkUpdatesYdbFixture fixture,
11+
ITestOutputHelper testOutputHelper
12+
) : ComplexTypeBulkUpdatesRelationalTestBase<ComplexTypeBulkUpdatesYdbTest.ComplexTypeBulkUpdatesYdbFixture>(fixture,
13+
testOutputHelper)
14+
{
15+
public override async Task Delete_entity_type_with_complex_type(bool async)
16+
=> await SharedTestMethods.TestIgnoringBase(
17+
base.Delete_entity_type_with_complex_type,
18+
Fixture.TestSqlLoggerFactory,
19+
async,
20+
"""
21+
DELETE FROM `Customer`
22+
WHERE `Name` = 'Monty Elias'
23+
"""
24+
);
25+
26+
public override async Task Update_property_inside_complex_type(bool async)
27+
=> await SharedTestMethods.TestIgnoringBase(
28+
base.Update_property_inside_complex_type,
29+
Fixture.TestSqlLoggerFactory,
30+
async,
31+
"""
32+
SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`
33+
FROM `Customer` AS `c`
34+
WHERE `c`.`ShippingAddress_ZipCode` = 7728
35+
""",
36+
"""
37+
UPDATE `Customer`
38+
SET `ShippingAddress_ZipCode` = 12345
39+
WHERE `ShippingAddress_ZipCode` = 7728
40+
"""
41+
);
42+
43+
public override async Task Update_property_inside_nested_complex_type(bool async)
44+
=> await SharedTestMethods.TestIgnoringBase(
45+
base.Update_property_inside_nested_complex_type,
46+
Fixture.TestSqlLoggerFactory,
47+
async,
48+
"""
49+
SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`
50+
FROM `Customer` AS `c`
51+
WHERE `c`.`ShippingAddress_Country_Code` = 'US'
52+
""",
53+
"""
54+
UPDATE `Customer`
55+
SET `ShippingAddress_Country_FullName` = 'United States Modified'
56+
WHERE `ShippingAddress_Country_Code` = 'US'
57+
"""
58+
);
59+
60+
[ConditionalTheory(Skip = "Concatenation of strings is not implemented yet")]
61+
[MemberData(nameof(IsAsyncData))]
62+
public override async Task Update_multiple_properties_inside_multiple_complex_types_and_on_entity_type(bool async)
63+
=> await SharedTestMethods.TestIgnoringBase(
64+
base.Update_multiple_properties_inside_multiple_complex_types_and_on_entity_type,
65+
Fixture.TestSqlLoggerFactory,
66+
async,
67+
"""
68+
UPDATE `Customer`
69+
SET "BillingAddress_ZipCode" = 54321,
70+
"ShippingAddress_ZipCode" = c."BillingAddress_ZipCode",
71+
"Name" = c."Name" || 'Modified'
72+
WHERE c."ShippingAddress_ZipCode" = 7728
73+
"""
74+
);
75+
76+
public override async Task Update_projected_complex_type(bool async)
77+
=> await SharedTestMethods.TestIgnoringBase(
78+
base.Update_projected_complex_type,
79+
Fixture.TestSqlLoggerFactory,
80+
async,
81+
"""
82+
SELECT `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`
83+
FROM `Customer` AS `c`
84+
""",
85+
"""
86+
UPDATE `Customer`
87+
SET `ShippingAddress_ZipCode` = 12345
88+
"""
89+
);
90+
91+
public override async Task Update_multiple_projected_complex_types_via_anonymous_type(bool async)
92+
=> await SharedTestMethods.TestIgnoringBase(
93+
base.Update_multiple_projected_complex_types_via_anonymous_type,
94+
Fixture.TestSqlLoggerFactory,
95+
async,
96+
"""
97+
SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`
98+
FROM `Customer` AS `c`
99+
""",
100+
"""
101+
UPDATE `Customer`
102+
SET `BillingAddress_ZipCode` = 54321,
103+
`ShippingAddress_ZipCode` = `BillingAddress_ZipCode`
104+
"""
105+
);
106+
107+
public override async Task Update_projected_complex_type_via_OrderBy_Skip(bool async)
108+
{
109+
// TODO: Implement later
110+
}
111+
112+
public override async Task Update_complex_type_to_parameter(bool async)
113+
=> await SharedTestMethods.TestIgnoringBase(
114+
base.Update_complex_type_to_parameter,
115+
Fixture.TestSqlLoggerFactory,
116+
async,
117+
"""
118+
SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`
119+
FROM `Customer` AS `c`
120+
""",
121+
"""
122+
$__complex_type_newAddress_0_AddressLine1='New AddressLine1'
123+
$__complex_type_newAddress_0_AddressLine2='New AddressLine2'
124+
$__complex_type_newAddress_0_Tags='["new_tag1","new_tag2"]'
125+
$__complex_type_newAddress_0_ZipCode='99999' (Nullable = true)
126+
$__complex_type_newAddress_0_Code='FR'
127+
$__complex_type_newAddress_0_FullName='France'
128+
129+
UPDATE `Customer`
130+
SET `ShippingAddress_AddressLine1` = @__complex_type_newAddress_0_AddressLine1,
131+
`ShippingAddress_AddressLine2` = @__complex_type_newAddress_0_AddressLine2,
132+
`ShippingAddress_Tags` = @__complex_type_newAddress_0_Tags,
133+
`ShippingAddress_ZipCode` = @__complex_type_newAddress_0_ZipCode,
134+
`ShippingAddress_Country_Code` = @__complex_type_newAddress_0_Code,
135+
`ShippingAddress_Country_FullName` = @__complex_type_newAddress_0_FullName
136+
"""
137+
);
138+
139+
public override async Task Update_nested_complex_type_to_parameter(bool async)
140+
=> await SharedTestMethods.TestIgnoringBase(
141+
base.Update_nested_complex_type_to_parameter,
142+
Fixture.TestSqlLoggerFactory,
143+
async,
144+
"""
145+
SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`
146+
FROM `Customer` AS `c`
147+
""",
148+
"""
149+
$__complex_type_newCountry_0_Code='FR'
150+
$__complex_type_newCountry_0_FullName='France'
151+
152+
UPDATE `Customer`
153+
SET `ShippingAddress_Country_Code` = @__complex_type_newCountry_0_Code,
154+
`ShippingAddress_Country_FullName` = @__complex_type_newCountry_0_FullName
155+
"""
156+
);
157+
158+
public override async Task Update_complex_type_to_another_database_complex_type(bool async)
159+
=> await SharedTestMethods.TestIgnoringBase(
160+
base.Update_complex_type_to_another_database_complex_type,
161+
Fixture.TestSqlLoggerFactory,
162+
async,
163+
"""
164+
SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`
165+
FROM `Customer` AS `c`
166+
""",
167+
"""
168+
UPDATE `Customer`
169+
SET `ShippingAddress_AddressLine1` = `BillingAddress_AddressLine1`,
170+
`ShippingAddress_AddressLine2` = `BillingAddress_AddressLine2`,
171+
`ShippingAddress_Tags` = `BillingAddress_Tags`,
172+
`ShippingAddress_ZipCode` = `BillingAddress_ZipCode`,
173+
`ShippingAddress_Country_Code` = `ShippingAddress_Country_Code`,
174+
`ShippingAddress_Country_FullName` = `ShippingAddress_Country_FullName`
175+
"""
176+
);
177+
178+
public override async Task Update_complex_type_to_inline_without_lambda(bool async)
179+
=> await SharedTestMethods.TestIgnoringBase(
180+
base.Update_complex_type_to_inline_without_lambda,
181+
Fixture.TestSqlLoggerFactory,
182+
async,
183+
"""
184+
SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`
185+
FROM `Customer` AS `c`
186+
""",
187+
"""
188+
UPDATE `Customer`
189+
SET `ShippingAddress_AddressLine1` = 'New AddressLine1',
190+
`ShippingAddress_AddressLine2` = 'New AddressLine2',
191+
`ShippingAddress_Tags` = '["new_tag1","new_tag2"]',
192+
`ShippingAddress_ZipCode` = 99999,
193+
`ShippingAddress_Country_Code` = 'FR',
194+
`ShippingAddress_Country_FullName` = 'France'
195+
"""
196+
);
197+
198+
public override async Task Update_complex_type_to_inline_with_lambda(bool async)
199+
=> await SharedTestMethods.TestIgnoringBase(
200+
base.Update_complex_type_to_inline_with_lambda,
201+
Fixture.TestSqlLoggerFactory,
202+
async,
203+
"""
204+
SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`
205+
FROM `Customer` AS `c`
206+
""",
207+
"""
208+
UPDATE `Customer`
209+
SET `ShippingAddress_AddressLine1` = 'New AddressLine1',
210+
`ShippingAddress_AddressLine2` = 'New AddressLine2',
211+
`ShippingAddress_Tags` = '["new_tag1","new_tag2"]',
212+
`ShippingAddress_ZipCode` = 99999,
213+
`ShippingAddress_Country_Code` = 'FR',
214+
`ShippingAddress_Country_FullName` = 'France'
215+
"""
216+
);
217+
218+
[ConditionalTheory(Skip = "Inner query contains OFFSET without LIMIT. Impossible statement in YDB")]
219+
[MemberData(nameof(IsAsyncData))]
220+
public override async Task Update_complex_type_to_another_database_complex_type_with_subquery(bool async)
221+
=> await SharedTestMethods.TestIgnoringBase(
222+
base.Update_complex_type_to_another_database_complex_type_with_subquery,
223+
Fixture.TestSqlLoggerFactory,
224+
async,
225+
"""
226+
@p='1'
227+
228+
UPDATE `Customer`
229+
SET "ShippingAddress_AddressLine1" = c1."BillingAddress_AddressLine1",
230+
"ShippingAddress_AddressLine2" = c1."BillingAddress_AddressLine2",
231+
"ShippingAddress_Tags" = c1."BillingAddress_Tags",
232+
"ShippingAddress_ZipCode" = c1."BillingAddress_ZipCode",
233+
"ShippingAddress_Country_Code" = c1."ShippingAddress_Country_Code",
234+
"ShippingAddress_Country_FullName" = c1."ShippingAddress_Country_FullName"
235+
FROM (
236+
SELECT c."Id", c."BillingAddress_AddressLine1", c."BillingAddress_AddressLine2", c."BillingAddress_Tags", c."BillingAddress_ZipCode", c."ShippingAddress_Country_Code", c."ShippingAddress_Country_FullName"
237+
FROM `Customer` AS c
238+
ORDER BY c."Id" NULLS FIRST
239+
OFFSET @p
240+
) AS c1
241+
WHERE c0."Id" = c1."Id"
242+
""");
243+
244+
public override async Task Update_collection_inside_complex_type(bool async)
245+
=> await SharedTestMethods.TestIgnoringBase(
246+
base.Update_collection_inside_complex_type,
247+
Fixture.TestSqlLoggerFactory,
248+
async,
249+
"""
250+
SELECT `c`.`Id`, `c`.`Name`, `c`.`BillingAddress_AddressLine1`, `c`.`BillingAddress_AddressLine2`, `c`.`BillingAddress_Tags`, `c`.`BillingAddress_ZipCode`, `c`.`BillingAddress_Country_Code`, `c`.`BillingAddress_Country_FullName`, `c`.`ShippingAddress_AddressLine1`, `c`.`ShippingAddress_AddressLine2`, `c`.`ShippingAddress_Tags`, `c`.`ShippingAddress_ZipCode`, `c`.`ShippingAddress_Country_Code`, `c`.`ShippingAddress_Country_FullName`
251+
FROM `Customer` AS `c`
252+
""",
253+
"""
254+
UPDATE `Customer`
255+
SET `ShippingAddress_Tags` = '["new_tag1","new_tag2"]'
256+
"""
257+
);
258+
259+
public class ComplexTypeBulkUpdatesYdbFixture : ComplexTypeBulkUpdatesRelationalFixtureBase
260+
{
261+
protected override ITestStoreFactory TestStoreFactory
262+
=> YdbTestStoreFactory.Instance;
263+
}
264+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using EfCore.Ydb.FunctionalTests.TestUtilities;
2+
using Microsoft.EntityFrameworkCore.BulkUpdates;
3+
using Microsoft.EntityFrameworkCore.TestUtilities;
4+
5+
namespace EfCore.Ydb.FunctionalTests.AllTests.BulkUpdates;
6+
7+
// TODO: need fix
8+
class NonSharedModelBulkUpdatesYdbTest : NonSharedModelBulkUpdatesRelationalTestBase
9+
{
10+
protected override ITestStoreFactory TestStoreFactory
11+
=> YdbTestStoreFactory.Instance;
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using EfCore.Ydb.FunctionalTests.TestUtilities;
2+
using Microsoft.EntityFrameworkCore.BulkUpdates;
3+
using Microsoft.EntityFrameworkCore.Infrastructure;
4+
using Microsoft.EntityFrameworkCore.TestUtilities;
5+
6+
namespace EfCore.Ydb.FunctionalTests.AllTests.BulkUpdates;
7+
8+
public class NorthwindBulkUpdatesYdbFixture<TModelCustomizer> : NorthwindBulkUpdatesRelationalFixture<TModelCustomizer>
9+
where TModelCustomizer : ITestModelCustomizer, new()
10+
{
11+
protected override ITestStoreFactory TestStoreFactory
12+
=> YdbNorthwindTestStoreFactory.Instance;
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using Microsoft.EntityFrameworkCore.BulkUpdates;
2+
using Microsoft.EntityFrameworkCore.TestUtilities;
3+
using Xunit.Abstractions;
4+
5+
namespace EfCore.Ydb.FunctionalTests.AllTests.BulkUpdates;
6+
7+
// TODO: Await Norhhwind
8+
class NorthwindBulkUpdatesYdbTest(
9+
NorthwindBulkUpdatesYdbFixture<NoopModelCustomizer> fixture,
10+
ITestOutputHelper testOutputHelper)
11+
: NorthwindBulkUpdatesRelationalTestBase<NorthwindBulkUpdatesYdbFixture<NoopModelCustomizer>>(fixture, testOutputHelper)
12+
{
13+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace EfCore.Ydb.FunctionalTests.AllTests.BulkUpdates;
2+
3+
public class TPCFiltersInheritanceBulkUpdatesYdbFixture : TPCInheritanceBulkUpdatesYdbFixture
4+
{
5+
public override bool EnableFilters
6+
=> true;
7+
}

0 commit comments

Comments
 (0)