From c8c0647b42fa5a618a78932d4de93562cb57ef02 Mon Sep 17 00:00:00 2001 From: Andrea Canciani Date: Sun, 9 Feb 2025 00:55:42 +0100 Subject: [PATCH] Update tests --- .../BuiltInDataTypesSqliteTest.cs | 125 ++++++++++++++++-- 1 file changed, 113 insertions(+), 12 deletions(-) diff --git a/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs index f503df97a6a..614f53a34cf 100644 --- a/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/BuiltInDataTypesSqliteTest.cs @@ -1400,12 +1400,6 @@ public virtual void Cant_query_OrderBy_of_converted_types() .Where(e => e.PartitionId == 205); var ex = Assert.Throws( - () => query - .OrderBy(e => e.TestNullableDecimal) - .First()); - Assert.Equal(SqliteStrings.OrderByNotSupported("decimal"), ex.Message); - - ex = Assert.Throws( () => query .OrderBy(e => e.TestNullableDateTimeOffset) .First()); @@ -1457,12 +1451,6 @@ public virtual void Cant_query_ThenBy_of_converted_types() .OrderBy(e => e.PartitionId); var ex = Assert.Throws( - () => query - .ThenBy(e => e.TestNullableDecimal) - .First()); - Assert.Equal(SqliteStrings.OrderByNotSupported("decimal"), ex.Message); - - ex = Assert.Throws( () => query .ThenBy(e => e.TestNullableDateTimeOffset) .First()); @@ -1481,6 +1469,119 @@ public virtual void Cant_query_ThenBy_of_converted_types() Assert.Equal(SqliteStrings.OrderByNotSupported("ulong"), ex.Message); } + + [ConditionalFact] + public virtual void Can_query_OrderBy_of_converted_types() + { + using var context = CreateContext(); + var min = new BuiltInNullableDataTypes + { + Id = 221, + PartitionId = 207, + TestNullableDecimal = 2.000000000000001m, + TestNullableDateTimeOffset = new DateTimeOffset(2018, 1, 1, 12, 0, 0, TimeSpan.Zero), + TestNullableTimeSpan = TimeSpan.FromDays(2), + TestNullableUnsignedInt64 = 0 + }; + context.Add(min); + + var max = new BuiltInNullableDataTypes + { + Id = 222, + PartitionId = 207, + TestNullableDecimal = 10.000000000000001m, + TestNullableDateTimeOffset = new DateTimeOffset(2018, 1, 1, 11, 0, 0, TimeSpan.FromHours(-2)), + TestNullableTimeSpan = TimeSpan.FromDays(10), + TestNullableUnsignedInt64 = long.MaxValue + 1ul + }; + context.Add(max); + + context.SaveChanges(); + + Fixture.TestSqlLoggerFactory.Clear(); + + var query = context.Set() + .Where(e => e.PartitionId == 207); + + var results = query + .OrderBy(e => e.TestNullableDecimal) + .Select(e => e.Id) + .First(); + + AssertSql( + """ +SELECT "b"."Id" +FROM "BuiltInNullableDataTypes" AS "b" +WHERE "b"."PartitionId" = 207 +ORDER BY "b"."TestNullableDecimal" COLLATE EF_DECIMAL +LIMIT 1 +"""); + + var expectedResults = query.AsEnumerable() + .OrderBy(e => e.TestNullableDecimal) + .Select(e => e.Id) + .First(); + + Assert.Equal(expectedResults, results); + } + + [ConditionalFact] + public virtual void Can_query_ThenBy_of_converted_types() + { + using var context = CreateContext(); + var min = new BuiltInNullableDataTypes + { + Id = 223, + PartitionId = 208, + TestNullableDecimal = 2.000000000000001m, + TestNullableDateTimeOffset = new DateTimeOffset(2018, 1, 1, 12, 0, 0, TimeSpan.Zero), + TestNullableTimeSpan = TimeSpan.FromDays(2), + TestNullableUnsignedInt64 = 0 + }; + context.Add(min); + + var max = new BuiltInNullableDataTypes + { + Id = 224, + PartitionId = 208, + TestNullableDecimal = 10.000000000000001m, + TestNullableDateTimeOffset = new DateTimeOffset(2018, 1, 1, 11, 0, 0, TimeSpan.FromHours(-2)), + TestNullableTimeSpan = TimeSpan.FromDays(10), + TestNullableUnsignedInt64 = long.MaxValue + 1ul + }; + context.Add(max); + + context.SaveChanges(); + + Fixture.TestSqlLoggerFactory.Clear(); + + var query = context.Set() + .Where(e => e.PartitionId == 208); + + var results = query + .OrderBy(e => e.PartitionId) + .ThenBy(e => e.TestNullableDecimal) + .Select(e => e.Id) + .First(); + + AssertSql( + """ +SELECT "b"."Id" +FROM "BuiltInNullableDataTypes" AS "b" +WHERE "b"."PartitionId" = 208 +ORDER BY "b"."PartitionId", "b"."TestNullableDecimal" COLLATE EF_DECIMAL +LIMIT 1 +"""); + + var expectedResults = query.AsEnumerable() + .OrderBy(e => e.PartitionId) + .ThenBy(e => e.TestNullableDecimal) + .Select(e => e.Id) + .First(); + + Assert.Equal(expectedResults, results); + } + [ConditionalFact] public virtual void Can_query_using_char_ToLower() {