-
Notifications
You must be signed in to change notification settings - Fork 3.1k
/
CustomConvertersCosmosTest.cs
186 lines (144 loc) · 7.05 KB
/
CustomConvertersCosmosTest.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using Microsoft.EntityFrameworkCore.Metadata.Internal;
namespace Microsoft.EntityFrameworkCore.Cosmos;
public class CustomConvertersCosmosTest : CustomConvertersTestBase<CustomConvertersCosmosTest.CustomConvertersCosmosFixture>
{
public CustomConvertersCosmosTest(CustomConvertersCosmosFixture fixture)
: base(fixture)
{
Fixture.TestSqlLoggerFactory.Clear();
}
[ConditionalTheory(Skip = "Issue #17246 No Explicit Convert")]
public override Task Can_filter_projection_with_inline_enum_variable(bool async)
=> base.Can_filter_projection_with_inline_enum_variable(async);
[ConditionalTheory(Skip = "Issue #17246 No Explicit Convert")]
public override Task Can_filter_projection_with_captured_enum_variable(bool async)
=> base.Can_filter_projection_with_captured_enum_variable(async);
[ConditionalFact(Skip = "Issue #17246 No Explicit Convert")]
public override void Can_query_with_null_parameters_using_any_nullable_data_type()
=> base.Can_query_with_null_parameters_using_any_nullable_data_type();
[ConditionalFact(Skip = "Issue #16920")]
public override void Can_insert_and_read_back_with_string_key()
=> base.Can_insert_and_read_back_with_string_key();
[ConditionalFact(Skip = "Issue #17246 No Explicit Convert")]
public override void Can_query_and_update_with_conversion_for_custom_type()
=> base.Can_query_and_update_with_conversion_for_custom_type();
[ConditionalFact(Skip = "Issue #16920")]
public override void Can_query_and_update_with_nullable_converter_on_primary_key()
=> base.Can_query_and_update_with_nullable_converter_on_primary_key();
[ConditionalFact(Skip = "Issue #16920")]
public override void Can_insert_and_read_back_with_binary_key()
=> base.Can_insert_and_read_back_with_binary_key();
[ConditionalFact(Skip = "Issue #16920")]
public override void Can_insert_and_read_back_with_case_insensitive_string_key()
=> base.Can_insert_and_read_back_with_case_insensitive_string_key();
[ConditionalFact(Skip = "Issue #17246 No Explicit Convert")]
public override void Can_insert_and_query_struct_to_string_converter_for_pk()
=> base.Can_insert_and_query_struct_to_string_converter_for_pk();
[ConditionalFact(Skip = "Issue #17670")]
public override void Can_read_back_mapped_enum_from_collection_first_or_default()
=> base.Can_read_back_mapped_enum_from_collection_first_or_default();
[ConditionalFact(Skip = "Issue #17246")]
public override void Can_read_back_bool_mapped_as_int_through_navigation()
=> base.Can_read_back_bool_mapped_as_int_through_navigation();
[ConditionalFact(Skip = "Issue #17246")]
public override void Value_conversion_is_appropriately_used_for_join_condition()
=> base.Value_conversion_is_appropriately_used_for_join_condition();
[ConditionalFact(Skip = "Issue #17246")]
public override void Value_conversion_is_appropriately_used_for_left_join_condition()
=> base.Value_conversion_is_appropriately_used_for_left_join_condition();
[ConditionalFact]
public override void Where_bool_gets_converted_to_equality_when_value_conversion_is_used()
{
base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used();
AssertSql(
"""
SELECT c
FROM root c
WHERE (c["Discriminator"] IN ("Blog", "RssBlog") AND (c["IsVisible"] = "Y"))
""");
}
[ConditionalFact]
public override void Where_negated_bool_gets_converted_to_equality_when_value_conversion_is_used()
{
base.Where_negated_bool_gets_converted_to_equality_when_value_conversion_is_used();
AssertSql(
"""
SELECT c
FROM root c
WHERE (c["Discriminator"] IN ("Blog", "RssBlog") AND NOT((c["IsVisible"] = "Y")))
""");
}
[ConditionalFact]
public override void Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_EFProperty()
{
base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_EFProperty();
AssertSql(
"""
SELECT c
FROM root c
WHERE (c["Discriminator"] IN ("Blog", "RssBlog") AND (c["IsVisible"] = "Y"))
""");
}
[ConditionalFact]
public override void Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_indexer()
{
base.Where_bool_gets_converted_to_equality_when_value_conversion_is_used_using_indexer();
AssertSql(
"""
SELECT c
FROM root c
WHERE (c["Discriminator"] IN ("Blog", "RssBlog") AND NOT((c["IndexerVisible"] = "Aye")))
""");
}
[ConditionalFact(Skip = "Issue#27678")]
public override void Optional_owned_with_converter_reading_non_nullable_column()
=> base.Optional_owned_with_converter_reading_non_nullable_column();
public override void Value_conversion_on_enum_collection_contains()
=> Assert.Contains(
CoreStrings.TranslationFailed("")[47..],
Assert.Throws<InvalidOperationException>(() => base.Value_conversion_on_enum_collection_contains()).Message);
public override void GroupBy_converted_enum()
{
Assert.Contains(
CoreStrings.TranslationFailed("")[21..],
Assert.Throws<InvalidOperationException>(() => base.GroupBy_converted_enum()).Message);
}
private void AssertSql(params string[] expected)
=> Fixture.TestSqlLoggerFactory.AssertBaseline(expected);
public class CustomConvertersCosmosFixture : CustomConvertersFixtureBase
{
protected override ITestStoreFactory TestStoreFactory
=> CosmosTestStoreFactory.Instance;
public override bool StrictEquality
=> true;
public override int IntegerPrecision
=> 53;
public override bool SupportsAnsi
=> false;
public override bool SupportsUnicodeToAnsiConversion
=> false;
public override bool SupportsLargeStringComparisons
=> true;
public override bool SupportsBinaryKeys
=> true;
public override bool SupportsDecimalComparisons
=> true;
public override DateTime DefaultDateTime
=> new();
public override bool PreservesDateTimeKind
=> true;
public TestSqlLoggerFactory TestSqlLoggerFactory
=> (TestSqlLoggerFactory)ListLoggerFactory;
protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context)
{
base.OnModelCreating(modelBuilder, context);
var shadowJObject = (Property)modelBuilder.Entity<BuiltInDataTypesShadow>().Property("__jObject").Metadata;
shadowJObject.SetConfigurationSource(ConfigurationSource.Convention);
var nullableShadowJObject = (Property)modelBuilder.Entity<BuiltInNullableDataTypesShadow>().Property("__jObject").Metadata;
nullableShadowJObject.SetConfigurationSource(ConfigurationSource.Convention);
modelBuilder.Entity<SimpleCounter>(b => b.ToContainer("SimpleCounters"));
}
}
}