Skip to content

Commit a0e5da2

Browse files
committed
Add unit tests for converters
1 parent 99a61d2 commit a0e5da2

File tree

8 files changed

+194
-30
lines changed

8 files changed

+194
-30
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using StronglyTypedIds.IntegrationTests.Types;
2+
3+
namespace StronglyTypedIds.IntegrationTests;
4+
5+
[StronglyTypedIdConverters<GuidId1>("guid-dapper", "guid-efcore")]
6+
internal partial struct Guid1Converters { }
7+
8+
[StronglyTypedIdConverters<IntId>("int-dapper", "int-efcore")]
9+
internal partial struct IntConverters { }
10+
11+
[StronglyTypedIdConverters<LongId>("long-dapper", "long-efcore")]
12+
internal partial struct LongConverters { }
13+
14+
[StronglyTypedIdConverters<StringId>("string-dapper", "string-efcore")]
15+
internal partial struct StringConverters { }

test/StronglyTypedIds.IntegrationTests.ExternalIds/StronglyTypedIds.IntegrationTests.ExternalIds.csproj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,15 @@
66
<IsPackable>false</IsPackable>
77
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
88
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<ProjectReference Include="..\..\src\StronglyTypedIds\StronglyTypedIds.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
12+
<ProjectReference Include="..\..\src\StronglyTypedIds.Attributes\StronglyTypedIds.Attributes.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="true" />
13+
</ItemGroup>
14+
15+
<ItemGroup>
16+
<AdditionalFiles Include="$(MSBuildThisFileDirectory)..\..\src\StronglyTypedIds.Templates\*.typedid" Link="Templates\%(Filename)%(Extension)" />
17+
</ItemGroup>
918

1019
<ItemGroup>
1120
<Compile Include="..\StronglyTypedIds.IntegrationTests\*.cs" Link="%(Filename)%(Extension)" />

test/StronglyTypedIds.IntegrationTests/DapperTypeHandlers.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ public static void AddHandlers()
1919
SqlMapper.AddTypeHandler(new ConvertersStringId2.DapperTypeHandler());
2020
SqlMapper.AddTypeHandler(new NullableStringId.DapperTypeHandler());
2121
SqlMapper.AddTypeHandler(new NewIdId1.DapperTypeHandler());
22+
SqlMapper.AddTypeHandler(new Guid1Converters.DapperTypeHandler());
23+
SqlMapper.AddTypeHandler(new IntConverters.DapperTypeHandler());
24+
SqlMapper.AddTypeHandler(new LongConverters.DapperTypeHandler());
25+
SqlMapper.AddTypeHandler(new StringConverters.DapperTypeHandler());
2226
}
2327
}
2428
}

test/StronglyTypedIds.IntegrationTests/Enums.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,14 @@ internal readonly partial struct VeryNestedId
7272
}
7373
}
7474

75+
[StronglyTypedIdConverters<GuidId1>("guid-dapper", "guid-efcore")]
76+
internal partial struct Guid1Converters { }
77+
78+
[StronglyTypedIdConverters<IntId>("int-dapper", "int-efcore")]
79+
internal partial struct IntConverters { }
80+
81+
[StronglyTypedIdConverters<LongId>("long-dapper", "long-efcore")]
82+
internal partial struct LongConverters { }
83+
84+
[StronglyTypedIdConverters<StringId>("string-dapper", "string-efcore")]
85+
internal partial struct StringConverters { }

test/StronglyTypedIds.IntegrationTests/GuidIdTests.cs

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -355,20 +355,36 @@ public void WhenEfCoreValueConverterUsesValueConverter()
355355
}
356356

357357
[Fact]
358-
public async Task WhenDapperValueConverterUsesValueConverter()
358+
public Task WhenDapperValueConverterUsesValueConverter_Id()
359+
=> WhenDapperValueConverterUsesValueConverter(g => new ConvertersGuidId(g));
360+
361+
[Fact]
362+
public Task WhenDapperValueConverterUsesValueConverter_Converter()
363+
=> WhenDapperValueConverterUsesValueConverter(g => new GuidId1(g));
364+
365+
private async Task WhenDapperValueConverterUsesValueConverter<T>(Func<Guid, T> newFunc)
359366
{
360367
using var connection = new SqliteConnection("DataSource=:memory:");
361368
await connection.OpenAsync();
362369

363-
var results = await connection.QueryAsync<ConvertersGuidId>("SELECT '5640dad4-862a-4738-9e3c-c76dc227eb66'");
370+
var results = await connection.QueryAsync<T>("SELECT '5640dad4-862a-4738-9e3c-c76dc227eb66'");
364371

365372
var value = Assert.Single(results);
366-
Assert.Equal(value, new ConvertersGuidId(Guid.Parse("5640dad4-862a-4738-9e3c-c76dc227eb66")));
373+
Assert.Equal(value, newFunc(Guid.Parse("5640dad4-862a-4738-9e3c-c76dc227eb66")));
367374
}
368375

369376
#if NET6_0_OR_GREATER
370377
[Fact]
371-
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter()
378+
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter_Id()
379+
=> WhenConventionBasedEfCoreValueConverterUsesValueConverter(x => x.Entities,
380+
new TestEntity { Id = ConvertersGuidId.New() });
381+
382+
[Fact]
383+
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter_Converter()
384+
=> WhenConventionBasedEfCoreValueConverterUsesValueConverter(c => c.Entities3,
385+
new TestEntity3 { Id = GuidId1.New() });
386+
387+
private void WhenConventionBasedEfCoreValueConverterUsesValueConverter<T>(Func<ConventionsDbContext, DbSet<T>> dbsetFunc, T entity) where T : class
372388
{
373389
var connection = new SqliteConnection("DataSource=:memory:");
374390
connection.Open();
@@ -380,13 +396,12 @@ public void WhenConventionBasedEfCoreValueConverterUsesValueConverter()
380396
using (var context = new ConventionsDbContext(options))
381397
{
382398
context.Database.EnsureCreated();
383-
context.Entities.Add(
384-
new TestEntity { Id = ConvertersGuidId.New() });
399+
dbsetFunc(context).Add(entity);
385400
context.SaveChanges();
386401
}
387402
using (var context = new ConventionsDbContext(options))
388403
{
389-
var all = context.Entities.ToList();
404+
var all = dbsetFunc(context).ToList();
390405
Assert.Single(all);
391406
}
392407
}
@@ -500,6 +515,7 @@ internal class ConventionsDbContext : DbContext
500515
{
501516
public DbSet<TestEntity> Entities { get; set; }
502517
public DbSet<TestEntity2> Entities2 { get; set; }
518+
public DbSet<TestEntity3> Entities3 { get; set; }
503519

504520
public ConventionsDbContext(DbContextOptions options) : base(options)
505521
{
@@ -513,6 +529,9 @@ protected override void ConfigureConventions(ModelConfigurationBuilder configura
513529
configurationBuilder
514530
.Properties<ConvertersGuidId2>()
515531
.HaveConversion<ConvertersGuidId2.EfCoreValueConverter>();
532+
configurationBuilder
533+
.Properties<GuidId1>()
534+
.HaveConversion<Guid1Converters.EfCoreValueConverter>();
516535
}
517536

518537
protected override void OnModelCreating(ModelBuilder modelBuilder)
@@ -531,6 +550,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
531550
.Property(x => x.Id)
532551
.ValueGeneratedNever();
533552
});
553+
modelBuilder
554+
.Entity<TestEntity3>(builder =>
555+
{
556+
builder
557+
.Property(x => x.Id)
558+
.ValueGeneratedNever();
559+
});
534560
}
535561
}
536562
#endif
@@ -586,6 +612,11 @@ internal class TestEntity2
586612
public ConvertersGuidId2 Id { get; set; }
587613
}
588614

615+
internal class TestEntity3
616+
{
617+
public GuidId1 Id { get; set; }
618+
}
619+
589620
internal class EntityWithNullableId2
590621
{
591622
public ConvertersGuidId2? Id { get; set; }

test/StronglyTypedIds.IntegrationTests/IntIdTests.cs

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -272,15 +272,22 @@ public void WhenEfCoreValueConverterUsesValueConverter()
272272
}
273273

274274
[Fact]
275-
public async Task WhenDapperValueConverterUsesValueConverter()
275+
public Task WhenDapperValueConverterUsesValueConverter_Id()
276+
=> WhenDapperValueConverterUsesValueConverter(g => new ConvertersIntId(g));
277+
278+
[Fact]
279+
public Task WhenDapperValueConverterUsesValueConverter_Converter()
280+
=> WhenDapperValueConverterUsesValueConverter(g => new IntId(g));
281+
282+
private async Task WhenDapperValueConverterUsesValueConverter<T>(Func<int, T> newFunc)
276283
{
277284
using var connection = new SqliteConnection("DataSource=:memory:");
278285
await connection.OpenAsync();
279286

280-
var results = await connection.QueryAsync<ConvertersIntId>("SELECT 123");
287+
var results = await connection.QueryAsync<T>("SELECT 123");
281288

282289
var value = Assert.Single(results);
283-
Assert.Equal(new ConvertersIntId(123), value);
290+
Assert.Equal(newFunc(123), value);
284291
}
285292

286293
[Fact(Skip = "Requires localdb to be available")]
@@ -320,7 +327,16 @@ public void TypeConverter_CanConvertToAndFrom(object value)
320327

321328
#if NET6_0_OR_GREATER
322329
[Fact]
323-
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter()
330+
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter_Id()
331+
=> WhenConventionBasedEfCoreValueConverterUsesValueConverter(x => x.Entities,
332+
new TestEntity { Id = new ConvertersIntId(123) });
333+
334+
[Fact]
335+
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter_Converter()
336+
=> WhenConventionBasedEfCoreValueConverterUsesValueConverter(c => c.Entities3,
337+
new TestEntity3 { Id = new IntId(123) });
338+
339+
private void WhenConventionBasedEfCoreValueConverterUsesValueConverter<T>(Func<ConventionsDbContext, DbSet<T>> dbsetFunc, T entity) where T : class
324340
{
325341
var connection = new SqliteConnection("DataSource=:memory:");
326342
connection.Open();
@@ -332,14 +348,13 @@ public void WhenConventionBasedEfCoreValueConverterUsesValueConverter()
332348
using (var context = new ConventionsDbContext(options))
333349
{
334350
context.Database.EnsureCreated();
335-
context.Entities.Add(
336-
new TestEntity {Id = new ConvertersIntId(123)});
351+
dbsetFunc(context).Add(entity);
337352
context.SaveChanges();
338353
}
339354

340355
using (var context = new ConventionsDbContext(options))
341356
{
342-
var all = context.Entities.ToList();
357+
var all = dbsetFunc(context).ToList();
343358
Assert.Single(all);
344359
}
345360
}
@@ -479,6 +494,7 @@ internal class ConventionsDbContext : DbContext
479494
{
480495
public DbSet<TestEntity> Entities { get; set; }
481496
public DbSet<TestEntity2> Entities2 { get; set; }
497+
public DbSet<TestEntity3> Entities3 { get; set; }
482498

483499
public ConventionsDbContext(DbContextOptions options) : base(options)
484500
{
@@ -492,6 +508,9 @@ protected override void ConfigureConventions(ModelConfigurationBuilder configura
492508
configurationBuilder
493509
.Properties<ConvertersIntId2>()
494510
.HaveConversion<ConvertersIntId2.EfCoreValueConverter>();
511+
configurationBuilder
512+
.Properties<IntId>()
513+
.HaveConversion<IntConverters.EfCoreValueConverter>();
495514
}
496515

497516
protected override void OnModelCreating(ModelBuilder modelBuilder)
@@ -510,6 +529,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
510529
.Property(x => x.Id)
511530
.ValueGeneratedNever();
512531
});
532+
modelBuilder
533+
.Entity<TestEntity3>(builder =>
534+
{
535+
builder
536+
.Property(x => x.Id)
537+
.ValueGeneratedNever();
538+
});
513539
}
514540
}
515541
#endif
@@ -559,6 +585,11 @@ internal class TestEntity2
559585
public ConvertersIntId2 Id { get; set; }
560586
}
561587

588+
internal class TestEntity3
589+
{
590+
public IntId Id { get; set; }
591+
}
592+
562593
internal class EntityWithNullableId2
563594
{
564595
public ConvertersIntId2? Id { get; set; }

test/StronglyTypedIds.IntegrationTests/LongIdTests.cs

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -284,15 +284,22 @@ public void WhenEfCoreValueConverterUsesValueConverter()
284284
}
285285

286286
[Fact]
287-
public async Task WhenDapperValueConverterUsesValueConverter()
287+
public Task WhenDapperValueConverterUsesValueConverter_Id()
288+
=> WhenDapperValueConverterUsesValueConverter(g => new ConvertersLongId(g));
289+
290+
[Fact]
291+
public Task WhenDapperValueConverterUsesValueConverter_Converter()
292+
=> WhenDapperValueConverterUsesValueConverter(g => new LongId(g));
293+
294+
private async Task WhenDapperValueConverterUsesValueConverter<T>(Func<int, T> newFunc)
288295
{
289296
using var connection = new SqliteConnection("DataSource=:memory:");
290297
await connection.OpenAsync();
291298

292-
var results = await connection.QueryAsync<ConvertersLongId>("SELECT 123");
299+
var results = await connection.QueryAsync<T>("SELECT 123");
293300

294301
var value = Assert.Single(results);
295-
Assert.Equal(value, new ConvertersLongId(123));
302+
Assert.Equal(value, newFunc(123));
296303
}
297304

298305
[Fact(Skip = "Requires localdb to be available")]
@@ -318,7 +325,16 @@ public void WhenDapperValueConverterAndDecimalUsesValueConverter()
318325

319326
#if NET6_0_OR_GREATER
320327
[Fact]
321-
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter()
328+
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter_Id()
329+
=> WhenConventionBasedEfCoreValueConverterUsesValueConverter(x => x.Entities,
330+
new TestEntity { Id = new ConvertersLongId(123) });
331+
332+
[Fact]
333+
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter_Converter()
334+
=> WhenConventionBasedEfCoreValueConverterUsesValueConverter(c => c.Entities3,
335+
new TestEntity3 { Id = new LongId(123) });
336+
337+
private void WhenConventionBasedEfCoreValueConverterUsesValueConverter<T>(Func<ConventionsDbContext, DbSet<T>> dbsetFunc, T entity) where T : class
322338
{
323339
var connection = new SqliteConnection("DataSource=:memory:");
324340
connection.Open();
@@ -330,13 +346,12 @@ public void WhenConventionBasedEfCoreValueConverterUsesValueConverter()
330346
using (var context = new ConventionsDbContext(options))
331347
{
332348
context.Database.EnsureCreated();
333-
context.Entities.Add(
334-
new TestEntity { Id = new ConvertersLongId(123) });
349+
dbsetFunc(context).Add(entity);
335350
context.SaveChanges();
336351
}
337352
using (var context = new ConventionsDbContext(options))
338353
{
339-
var all = context.Entities.ToList();
354+
var all = dbsetFunc(context).ToList();
340355
Assert.Single(all);
341356
}
342357
}
@@ -461,6 +476,7 @@ internal class ConventionsDbContext : DbContext
461476
{
462477
public DbSet<TestEntity> Entities { get; set; }
463478
public DbSet<TestEntity2> Entities2 { get; set; }
479+
public DbSet<TestEntity3> Entities3 { get; set; }
464480

465481
public ConventionsDbContext(DbContextOptions options) : base(options)
466482
{
@@ -474,6 +490,9 @@ protected override void ConfigureConventions(ModelConfigurationBuilder configura
474490
configurationBuilder
475491
.Properties<ConvertersLongId2>()
476492
.HaveConversion<ConvertersLongId2.EfCoreValueConverter>();
493+
configurationBuilder
494+
.Properties<LongId>()
495+
.HaveConversion<LongConverters.EfCoreValueConverter>();
477496
}
478497

479498
protected override void OnModelCreating(ModelBuilder modelBuilder)
@@ -492,6 +511,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
492511
.Property(x => x.Id)
493512
.ValueGeneratedNever();
494513
});
514+
modelBuilder
515+
.Entity<TestEntity3>(builder =>
516+
{
517+
builder
518+
.Property(x => x.Id)
519+
.ValueGeneratedNever();
520+
});
495521
}
496522
}
497523
#endif
@@ -541,6 +567,11 @@ internal class TestEntity2
541567
public ConvertersLongId2 Id { get; set; }
542568
}
543569

570+
internal class TestEntity3
571+
{
572+
public LongId Id { get; set; }
573+
}
574+
544575
internal class EntityWithNullableId2
545576
{
546577
public ConvertersLongId2? Id { get; set; }

0 commit comments

Comments
 (0)