Skip to content
This repository was archived by the owner on Feb 1, 2025. It is now read-only.

Commit 99b0651

Browse files
authored
Add tests for DateTime to tstz mapping issue (#317)
* add tests for DateTime to tstz mapping issue * verify fix
1 parent 464711f commit 99b0651

File tree

5 files changed

+49
-12
lines changed

5 files changed

+49
-12
lines changed

Directory.Packages.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<PackageVersion Include="NUnit" Version="3.13.3" />
66
<PackageVersion Include="FluentAssertions" Version="6.10.0" />
77

8-
<PackageVersion Include="linq2db" Version="5.1.0" />
9-
<PackageVersion Include="linq2db.Tools" Version="5.1.0" />
8+
<PackageVersion Include="linq2db" Version="5.2.0" />
9+
<PackageVersion Include="linq2db.Tools" Version="5.2.0" />
1010

1111
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
1212

@@ -17,7 +17,7 @@
1717
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
1818

1919
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="7.0.0" />
20-
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.3" />
20+
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime" Version="7.0.3" />
2121
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.3" />
2222
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.3" />
2323

Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests.csproj

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44

55
<ItemGroup>
66
<PackageReference Include="FluentAssertions" />
7-
</ItemGroup>
8-
9-
<ItemGroup>
10-
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" />
7+
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime" />
118
</ItemGroup>
129

1310
<ItemGroup>

Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/Models/NpgSqlEntities/NpgSqlEnititesContext.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,19 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
3030
entity.Property<uint>(nameof(NpgSqlEntities.EntityWithXmin.xmin)).IsRowVersion();
3131
});
3232

33+
modelBuilder.Entity<TimeStampEntity>(e =>
34+
{
35+
e.Property(e => e.Timestamp1).HasColumnType("timestamp");
36+
e.Property(e => e.Timestamp2).HasColumnType("timestamp");
37+
e.Property(e => e.TimestampTZ1).HasColumnType("timestamp with time zone");
38+
e.Property(e => e.TimestampTZ2).HasColumnType("timestamp with time zone");
39+
e.Property(e => e.TimestampTZ3).HasColumnType("timestamp with time zone");
40+
});
3341
}
3442

3543
public virtual DbSet<Event> Events { get; set; } = null!;
3644
public virtual DbSet<EntityWithArrays> EntityWithArrays { get; set; } = null!;
3745
public virtual DbSet<EntityWithXmin> EntityWithXmin { get; set; } = null!;
38-
46+
public virtual DbSet<TimeStampEntity> TimeStamps { get; set; } = null!;
3947
}
4048
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using NodaTime;
3+
4+
namespace LinqToDB.EntityFrameworkCore.PostgreSQL.Tests.Models.NpgSqlEntities
5+
{
6+
public class TimeStampEntity
7+
{
8+
public int Id { get; set; }
9+
public DateTime Timestamp1 { get; set; }
10+
public LocalDateTime Timestamp2 { get; set; }
11+
public DateTime TimestampTZ1 { get; set; }
12+
public DateTimeOffset TimestampTZ2 { get; set; }
13+
public Instant TimestampTZ3 { get; set; }
14+
}
15+
}

Tests/LinqToDB.EntityFrameworkCore.PostgreSQL.Tests/NpgSqlTests.cs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using LinqToDB.EntityFrameworkCore.BaseTests;
77
using LinqToDB.EntityFrameworkCore.PostgreSQL.Tests.Models.NpgSqlEntities;
88
using Microsoft.EntityFrameworkCore;
9+
using NodaTime;
910
using NUnit.Framework;
1011

1112
namespace LinqToDB.EntityFrameworkCore.PostgreSQL.Tests
@@ -23,10 +24,9 @@ static NpgSqlTests()
2324
public NpgSqlTests()
2425
{
2526
var optionsBuilder = new DbContextOptionsBuilder<NpgSqlEnititesContext>();
26-
//new SqlServerDbContextOptionsBuilder(optionsBuilder);
2727

28-
//optionsBuilder.UseNpgsql("Server=DBHost;Port=5432;Database=TestData;User Id=postgres;Password=TestPassword;Pooling=true;MinPoolSize=10;MaxPoolSize=100;");
29-
optionsBuilder.UseNpgsql("Server=localhost;Port=5415;Database=TestData;User Id=postgres;Password=Password12!;Pooling=true;MinPoolSize=10;MaxPoolSize=100;");
28+
//optionsBuilder.UseNpgsql("Server=DBHost;Port=5432;Database=TestData;User Id=postgres;Password=TestPassword;Pooling=true;MinPoolSize=10;MaxPoolSize=100;", o => o.UseNodaTime());
29+
optionsBuilder.UseNpgsql("Server=localhost;Port=5415;Database=TestData;User Id=postgres;Password=Password12!;Pooling=true;MinPoolSize=10;MaxPoolSize=100;", o => o.UseNodaTime());
3030
optionsBuilder.UseLoggerFactory(TestUtils.LoggerFactory);
3131

3232
_options = optionsBuilder.Options;
@@ -100,7 +100,6 @@ public void TestConcurrencyToken()
100100
db.BulkCopy(toInsert);
101101
}
102102

103-
104103
[Test]
105104
public void TestUnnest()
106105
{
@@ -119,5 +118,23 @@ where Sql.Ext.PostgreSQL().Overlaps(m.Guids, guids)
119118
query.Invoking(q => q.ToArray()).Should().NotThrow();
120119
}
121120

121+
[Test]
122+
public void TestDateTimeKind([Values] DateTimeKind kind)
123+
{
124+
using var db = CreateNpgSqlEntitiesContext();
125+
using var dc = db.CreateLinqToDBConnection();
126+
127+
var dt = new DateTime(DateTime.Now.Ticks, kind);
128+
var dto = DateTimeOffset.Now;
129+
var ins = Instant.FromDateTimeOffset(dto);
130+
var ldt = LocalDateTime.FromDateTime(DateTime.Now);
131+
132+
db.TimeStamps.Where(e => e.Timestamp1 == dt).ToLinqToDB().ToArray();
133+
db.TimeStamps.Where(e => e.Timestamp2 == ldt).ToLinqToDB().ToArray();
134+
db.TimeStamps.Where(e => e.TimestampTZ1 == dt).ToLinqToDB().ToArray();
135+
db.TimeStamps.Where(e => e.TimestampTZ2 == dto).ToLinqToDB().ToArray();
136+
db.TimeStamps.Where(e => e.TimestampTZ3 == ins).ToLinqToDB().ToArray();
137+
}
138+
122139
}
123140
}

0 commit comments

Comments
 (0)