// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Linq; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.TestUtilities; using Xunit; namespace EntityFrameworkCore.Jet { public class JetDateTimeTest : TestBase { [ConditionalFact] public virtual void SanityCheck() { using var context = CreateContext(); context.Database.EnsureCreatedResiliently(); var cookies = context.Cookies .ToList(); Assert.Equal(2, cookies.Count); } [ConditionalFact] public virtual void Where_datetime_with_HasDefaultValue() { using var context = CreateContext(); context.Database.EnsureCreatedResiliently(); var cookies = context.Cookies .Where(o => o.BestServedBeforeDateTime == new DateTime(2021, 12, 31, 13, 42, 21, 123)) .ToList(); Assert.Equal(2, cookies.Count); Assert.True(cookies.All(c => c.BestServedBeforeDateTime == new DateTime(2021, 12, 31, 13, 42, 21))); } [ConditionalFact] public virtual void Where_datetime_with_HasDefaultValue_EnableMillisecondsSupport() { using var context = CreateContext(jetOptions: builder => builder.EnableMillisecondsSupport()); context.Database.EnsureCreatedResiliently(); var cookies = context.Cookies .Where(o => o.BestServedBeforeDateTime == new DateTime(2021, 12, 31, 13, 42, 21, 123)) .ToList(); Assert.Equal(2, cookies.Count); Assert.True(cookies.All(c => c.BestServedBeforeDateTime == new DateTime(2021, 12, 31, 13, 42, 21, 123))); } [ConditionalFact] public virtual void Where_datetime_with_HasDefaultValue_precision() { using var context = CreateContext(); context.Database.EnsureCreatedResiliently(); var cookies = context.Cookies .Where(o => o.BestServedBeforeDateTime == new DateTime(2021, 12, 31, 13, 42, 21, 987)) .ToList(); Assert.Equal(2, cookies.Count); Assert.True(cookies.All(c => c.BestServedBeforeDateTime == new DateTime(2021, 12, 31, 13, 42, 21))); } [ConditionalFact] public virtual void Where_datetime_with_HasDefaultValue_precision_EnableMillisecondsSupport() { using var context = CreateContext(jetOptions: builder => builder.EnableMillisecondsSupport()); context.Database.EnsureCreatedResiliently(); var cookies = context.Cookies .Where(o => o.BestServedBeforeDateTime == new DateTime(2021, 12, 31, 13, 42, 21, 987)) .ToList(); Assert.Empty(cookies); } [ConditionalFact] public virtual void Where_datetime_with_HasDefaultValueSql() { using var context = CreateContext(); context.Database.EnsureCreatedResiliently(); var cookies = context.Cookies .Where(o => o.BestServedAfterDateTime == new DateTime(2020, 12, 31, 13, 42, 21)) .ToList(); Assert.Equal(2, cookies.Count); Assert.True(cookies.All(c => c.BestServedAfterDateTime == new DateTime(2020, 12, 31, 13, 42, 21))); } [ConditionalFact] public virtual void Where_datetime_with_HasDefaultValueSql_EnableMillisecondsSupport() { using var context = CreateContext(jetOptions: builder => builder.EnableMillisecondsSupport()); context.Database.EnsureCreatedResiliently(); var cookies = context.Cookies .Where(o => o.BestServedAfterDateTime == new DateTime(2020, 12, 31, 13, 42, 21)) .ToList(); Assert.Equal(2, cookies.Count); Assert.True(cookies.All(c => c.BestServedAfterDateTime == new DateTime(2020, 12, 31, 13, 42, 21))); } [ConditionalFact] public virtual void Where_datetime_with_fractions() { using var context = CreateContext(); context.Database.EnsureCreatedResiliently(); var cookies = context.Cookies .Where(o => o.PuchasedDateTime == new DateTime(2019, 12, 31, 13, 42, 21, 123)) .ToList(); Assert.Single(cookies); Assert.Equal(new DateTime(2019, 12, 31, 13, 42, 21), cookies[0].PuchasedDateTime); } [ConditionalFact] public virtual void Where_datetime_with_fractions_EnableMillisecondsSupport() { using var context = CreateContext(jetOptions: builder => builder.EnableMillisecondsSupport()); context.Database.EnsureCreatedResiliently(); var cookies = context.Cookies .Where(o => o.PuchasedDateTime == new DateTime(2019, 12, 31, 13, 42, 21, 123)) .ToList(); Assert.Single(cookies); Assert.Equal(new DateTime(2019, 12, 31, 13, 42, 21, 123), cookies[0].PuchasedDateTime); } [ConditionalFact] public virtual void Where_datetime_with_fractions_parameter() { using var context = CreateContext(); var dateTime = new DateTime(2019, 12, 31, 13, 42, 21, 123); var cookies = context.Cookies .Where(o => o.PuchasedDateTime == dateTime) .ToList(); Assert.Single(cookies); Assert.Equal(new DateTime(2019, 12, 31, 13, 42, 21), cookies[0].PuchasedDateTime); } [ConditionalFact] public virtual void Where_datetime_with_fractions_parameter_EnableMillisecondsSupport() { using var context = CreateContext(jetOptions: builder => builder.EnableMillisecondsSupport()); var dateTime = new DateTime(2019, 12, 31, 13, 42, 21, 123); var cookies = context.Cookies .Where(o => o.PuchasedDateTime == dateTime) .ToList(); Assert.Single(cookies); Assert.Equal(new DateTime(2019, 12, 31, 13, 42, 21, 123), cookies[0].PuchasedDateTime); } public class Cookie { public int CookieId { get; set; } public string Name { get; set; } public DateTime PuchasedDateTime { get; set; } public DateTime BestServedBeforeDateTime { get; set; } public DateTime BestServedAfterDateTime { get; set; } } public class Context : ContextBase { public DbSet Cookies { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity( entity => { entity.Property(e => e.BestServedBeforeDateTime) .HasDefaultValue(new DateTime(2021, 12, 31, 13, 42, 21, 123)); entity.Property(e => e.BestServedAfterDateTime) .HasDefaultValueSql("'2020-12-31 13:42:21'"); entity.HasData( new Cookie { CookieId = 1, Name = "Basic", PuchasedDateTime = new DateTime(2019, 12, 31, 13, 42, 21, 123), }, new Cookie { CookieId = 2, Name = "Chocolate Chip", PuchasedDateTime = new DateTime(2019, 12, 24, 18, 09, 04, 234).AddTicks(5678), }); }); } } } }