Skip to content

Commit 9930eb2

Browse files
committed
Add unit tests for converters
1 parent 217f5d1 commit 9930eb2

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
@@ -374,20 +374,36 @@ public void WhenEfCoreValueConverterUsesValueConverter()
374374
}
375375

376376
[Fact]
377-
public async Task WhenDapperValueConverterUsesValueConverter()
377+
public Task WhenDapperValueConverterUsesValueConverter_Id()
378+
=> WhenDapperValueConverterUsesValueConverter(g => new ConvertersGuidId(g));
379+
380+
[Fact]
381+
public Task WhenDapperValueConverterUsesValueConverter_Converter()
382+
=> WhenDapperValueConverterUsesValueConverter(g => new GuidId1(g));
383+
384+
private async Task WhenDapperValueConverterUsesValueConverter<T>(Func<Guid, T> newFunc)
378385
{
379386
using var connection = new SqliteConnection("DataSource=:memory:");
380387
await connection.OpenAsync();
381388

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

384391
var value = Assert.Single(results);
385-
Assert.Equal(value, new ConvertersGuidId(Guid.Parse("5640dad4-862a-4738-9e3c-c76dc227eb66")));
392+
Assert.Equal(value, newFunc(Guid.Parse("5640dad4-862a-4738-9e3c-c76dc227eb66")));
386393
}
387394

388395
#if NET6_0_OR_GREATER
389396
[Fact]
390-
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter()
397+
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter_Id()
398+
=> WhenConventionBasedEfCoreValueConverterUsesValueConverter(x => x.Entities,
399+
new TestEntity { Id = ConvertersGuidId.New() });
400+
401+
[Fact]
402+
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter_Converter()
403+
=> WhenConventionBasedEfCoreValueConverterUsesValueConverter(c => c.Entities3,
404+
new TestEntity3 { Id = GuidId1.New() });
405+
406+
private void WhenConventionBasedEfCoreValueConverterUsesValueConverter<T>(Func<ConventionsDbContext, DbSet<T>> dbsetFunc, T entity) where T : class
391407
{
392408
var connection = new SqliteConnection("DataSource=:memory:");
393409
connection.Open();
@@ -399,13 +415,12 @@ public void WhenConventionBasedEfCoreValueConverterUsesValueConverter()
399415
using (var context = new ConventionsDbContext(options))
400416
{
401417
context.Database.EnsureCreated();
402-
context.Entities.Add(
403-
new TestEntity { Id = ConvertersGuidId.New() });
418+
dbsetFunc(context).Add(entity);
404419
context.SaveChanges();
405420
}
406421
using (var context = new ConventionsDbContext(options))
407422
{
408-
var all = context.Entities.ToList();
423+
var all = dbsetFunc(context).ToList();
409424
Assert.Single(all);
410425
}
411426
}
@@ -519,6 +534,7 @@ internal class ConventionsDbContext : DbContext
519534
{
520535
public DbSet<TestEntity> Entities { get; set; }
521536
public DbSet<TestEntity2> Entities2 { get; set; }
537+
public DbSet<TestEntity3> Entities3 { get; set; }
522538

523539
public ConventionsDbContext(DbContextOptions options) : base(options)
524540
{
@@ -532,6 +548,9 @@ protected override void ConfigureConventions(ModelConfigurationBuilder configura
532548
configurationBuilder
533549
.Properties<ConvertersGuidId2>()
534550
.HaveConversion<ConvertersGuidId2.EfCoreValueConverter>();
551+
configurationBuilder
552+
.Properties<GuidId1>()
553+
.HaveConversion<Guid1Converters.EfCoreValueConverter>();
535554
}
536555

537556
protected override void OnModelCreating(ModelBuilder modelBuilder)
@@ -550,6 +569,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
550569
.Property(x => x.Id)
551570
.ValueGeneratedNever();
552571
});
572+
modelBuilder
573+
.Entity<TestEntity3>(builder =>
574+
{
575+
builder
576+
.Property(x => x.Id)
577+
.ValueGeneratedNever();
578+
});
553579
}
554580
}
555581
#endif
@@ -605,6 +631,11 @@ internal class TestEntity2
605631
public ConvertersGuidId2 Id { get; set; }
606632
}
607633

634+
internal class TestEntity3
635+
{
636+
public GuidId1 Id { get; set; }
637+
}
638+
608639
internal class EntityWithNullableId2
609640
{
610641
public ConvertersGuidId2? Id { get; set; }

test/StronglyTypedIds.IntegrationTests/IntIdTests.cs

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

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

281-
var results = await connection.QueryAsync<ConvertersIntId>("SELECT 123");
288+
var results = await connection.QueryAsync<T>("SELECT 123");
282289

283290
var value = Assert.Single(results);
284-
Assert.Equal(new ConvertersIntId(123), value);
291+
Assert.Equal(newFunc(123), value);
285292
}
286293

287294
[Fact(Skip = "Requires localdb to be available")]
@@ -321,7 +328,16 @@ public void TypeConverter_CanConvertToAndFrom(object value)
321328

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

341356
using (var context = new ConventionsDbContext(options))
342357
{
343-
var all = context.Entities.ToList();
358+
var all = dbsetFunc(context).ToList();
344359
Assert.Single(all);
345360
}
346361
}
@@ -499,6 +514,7 @@ internal class ConventionsDbContext : DbContext
499514
{
500515
public DbSet<TestEntity> Entities { get; set; }
501516
public DbSet<TestEntity2> Entities2 { get; set; }
517+
public DbSet<TestEntity3> Entities3 { get; set; }
502518

503519
public ConventionsDbContext(DbContextOptions options) : base(options)
504520
{
@@ -512,6 +528,9 @@ protected override void ConfigureConventions(ModelConfigurationBuilder configura
512528
configurationBuilder
513529
.Properties<ConvertersIntId2>()
514530
.HaveConversion<ConvertersIntId2.EfCoreValueConverter>();
531+
configurationBuilder
532+
.Properties<IntId>()
533+
.HaveConversion<IntConverters.EfCoreValueConverter>();
515534
}
516535

517536
protected override void OnModelCreating(ModelBuilder modelBuilder)
@@ -530,6 +549,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
530549
.Property(x => x.Id)
531550
.ValueGeneratedNever();
532551
});
552+
modelBuilder
553+
.Entity<TestEntity3>(builder =>
554+
{
555+
builder
556+
.Property(x => x.Id)
557+
.ValueGeneratedNever();
558+
});
533559
}
534560
}
535561
#endif
@@ -579,6 +605,11 @@ internal class TestEntity2
579605
public ConvertersIntId2 Id { get; set; }
580606
}
581607

608+
internal class TestEntity3
609+
{
610+
public IntId Id { get; set; }
611+
}
612+
582613
internal class EntityWithNullableId2
583614
{
584615
public ConvertersIntId2? Id { get; set; }

test/StronglyTypedIds.IntegrationTests/LongIdTests.cs

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

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

293-
var results = await connection.QueryAsync<ConvertersLongId>("SELECT 123");
300+
var results = await connection.QueryAsync<T>("SELECT 123");
294301

295302
var value = Assert.Single(results);
296-
Assert.Equal(value, new ConvertersLongId(123));
303+
Assert.Equal(value, newFunc(123));
297304
}
298305

299306
[Fact(Skip = "Requires localdb to be available")]
@@ -319,7 +326,16 @@ public void WhenDapperValueConverterAndDecimalUsesValueConverter()
319326

320327
#if NET6_0_OR_GREATER
321328
[Fact]
322-
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter()
329+
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter_Id()
330+
=> WhenConventionBasedEfCoreValueConverterUsesValueConverter(x => x.Entities,
331+
new TestEntity { Id = new ConvertersLongId(123) });
332+
333+
[Fact]
334+
public void WhenConventionBasedEfCoreValueConverterUsesValueConverter_Converter()
335+
=> WhenConventionBasedEfCoreValueConverterUsesValueConverter(c => c.Entities3,
336+
new TestEntity3 { Id = new LongId(123) });
337+
338+
private void WhenConventionBasedEfCoreValueConverterUsesValueConverter<T>(Func<ConventionsDbContext, DbSet<T>> dbsetFunc, T entity) where T : class
323339
{
324340
var connection = new SqliteConnection("DataSource=:memory:");
325341
connection.Open();
@@ -331,13 +347,12 @@ public void WhenConventionBasedEfCoreValueConverterUsesValueConverter()
331347
using (var context = new ConventionsDbContext(options))
332348
{
333349
context.Database.EnsureCreated();
334-
context.Entities.Add(
335-
new TestEntity { Id = new ConvertersLongId(123) });
350+
dbsetFunc(context).Add(entity);
336351
context.SaveChanges();
337352
}
338353
using (var context = new ConventionsDbContext(options))
339354
{
340-
var all = context.Entities.ToList();
355+
var all = dbsetFunc(context).ToList();
341356
Assert.Single(all);
342357
}
343358
}
@@ -481,6 +496,7 @@ internal class ConventionsDbContext : DbContext
481496
{
482497
public DbSet<TestEntity> Entities { get; set; }
483498
public DbSet<TestEntity2> Entities2 { get; set; }
499+
public DbSet<TestEntity3> Entities3 { get; set; }
484500

485501
public ConventionsDbContext(DbContextOptions options) : base(options)
486502
{
@@ -494,6 +510,9 @@ protected override void ConfigureConventions(ModelConfigurationBuilder configura
494510
configurationBuilder
495511
.Properties<ConvertersLongId2>()
496512
.HaveConversion<ConvertersLongId2.EfCoreValueConverter>();
513+
configurationBuilder
514+
.Properties<LongId>()
515+
.HaveConversion<LongConverters.EfCoreValueConverter>();
497516
}
498517

499518
protected override void OnModelCreating(ModelBuilder modelBuilder)
@@ -512,6 +531,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
512531
.Property(x => x.Id)
513532
.ValueGeneratedNever();
514533
});
534+
modelBuilder
535+
.Entity<TestEntity3>(builder =>
536+
{
537+
builder
538+
.Property(x => x.Id)
539+
.ValueGeneratedNever();
540+
});
515541
}
516542
}
517543
#endif
@@ -561,6 +587,11 @@ internal class TestEntity2
561587
public ConvertersLongId2 Id { get; set; }
562588
}
563589

590+
internal class TestEntity3
591+
{
592+
public LongId Id { get; set; }
593+
}
594+
564595
internal class EntityWithNullableId2
565596
{
566597
public ConvertersLongId2? Id { get; set; }

0 commit comments

Comments
 (0)