Skip to content

Commit e4748f0

Browse files
committed
simplify tests
1 parent 8a0974b commit e4748f0

File tree

7 files changed

+335
-287
lines changed

7 files changed

+335
-287
lines changed

.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,5 +381,5 @@ roslynator_binary_operator_new_line = before
381381
roslynator_conditional_operator_new_line = before
382382
roslynator_null_conditional_operator_new_line = before
383383

384-
[*.{json,env,yml,yaml,xml,xsd,html,cshtml,csproj,props,sln,resx}]
384+
[*.{json,env,yml,yaml,xml,xsd,html,cshtml,csproj,props,sln,slnx,resx}]
385385
indent_size = 2
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
using Hikkaba.Tests.Integration;
3+
using Microsoft.Extensions.DependencyInjection;
4+
5+
namespace ReactReduxTodo.Tests.Integration.Models;
6+
7+
internal interface IAppFactorySeedResult : IDisposable
8+
{
9+
IServiceScope Scope { get; set; }
10+
CustomAppFactory AppFactory { get; set; }
11+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System;
2+
using Microsoft.Extensions.DependencyInjection;
3+
4+
namespace ReactReduxTodo.Tests.Integration.Models;
5+
6+
internal interface ISeedResult : IDisposable
7+
{
8+
public IServiceScope Scope { get; set; }
9+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System;
2+
using Hikkaba.Tests.Integration;
3+
using Microsoft.Extensions.DependencyInjection;
4+
5+
namespace ReactReduxTodo.Tests.Integration.Models;
6+
7+
internal sealed class SeedResult : ISeedResult, IAppFactorySeedResult
8+
{
9+
public required IServiceScope Scope { get; set; }
10+
public required CustomAppFactory AppFactory { get; set; }
11+
12+
public void Dispose()
13+
{
14+
Scope.Dispose();
15+
AppFactory.Dispose();
16+
}
17+
}

Hikkaba.Tests.Integration/Tests/Repositories/BanRepositoryTests.cs

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using JetBrains.Annotations;
2020
using Microsoft.EntityFrameworkCore;
2121
using Microsoft.Extensions.DependencyInjection;
22+
using ReactReduxTodo.Tests.Integration.Models;
2223
using Thread = Hikkaba.Data.Entities.Thread;
2324

2425
namespace Hikkaba.Tests.Integration.Tests.Repositories;
@@ -44,10 +45,24 @@ public async Task OneTimeTearDownAsync()
4445
}
4546

4647
[MustDisposeResource]
47-
private async Task<CustomAppFactory> CreateAppFactoryAsync()
48+
private async Task<ISeedResult> Seed(CancellationToken cancellationToken)
4849
{
4950
var connectionString = await _contextManager!.CreateRespawnedDbConnectionStringAsync();
50-
return new CustomAppFactory(connectionString);
51+
var customAppFactory = new CustomAppFactory(connectionString);
52+
53+
var scope = customAppFactory.Services.GetRequiredService<IServiceScopeFactory>().CreateScope();
54+
var dbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
55+
56+
if ((await dbContext.Database.GetPendingMigrationsAsync(cancellationToken)).Any())
57+
{
58+
await dbContext.Database.MigrateAsync(cancellationToken);
59+
}
60+
61+
return new SeedResult
62+
{
63+
Scope = scope,
64+
AppFactory = customAppFactory,
65+
};
5166
}
5267

5368
[CancelAfter(TestDefaults.TestTimeout)]
@@ -61,16 +76,12 @@ public async Task ListBansPaginatedAsync_WhenSearchExact_ReturnsExpectedResult(
6176
CancellationToken cancellationToken)
6277
{
6378
// Arrange
64-
await using var customAppFactory = await CreateAppFactoryAsync();
65-
using var scope = customAppFactory.Services.GetRequiredService<IServiceScopeFactory>().CreateScope();
66-
var timeProvider = scope.ServiceProvider.GetRequiredService<TimeProvider>();
67-
var dbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
68-
var hashService = scope.ServiceProvider.GetRequiredService<IHashService>();
79+
using var seedResult = await Seed(cancellationToken);
80+
using var serviceScope = seedResult.Scope.ServiceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope();
6981

70-
if ((await dbContext.Database.GetPendingMigrationsAsync(cancellationToken)).Any())
71-
{
72-
await dbContext.Database.MigrateAsync(cancellationToken);
73-
}
82+
var dbContext = serviceScope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
83+
var hashService = serviceScope.ServiceProvider.GetRequiredService<IHashService>();
84+
var timeProvider = serviceScope.ServiceProvider.GetRequiredService<TimeProvider>();
7485

7586
// Seed
7687
var admin = new ApplicationUser
@@ -168,7 +179,7 @@ public async Task ListBansPaginatedAsync_WhenSearchExact_ReturnsExpectedResult(
168179

169180
await dbContext.SaveChangesAsync(cancellationToken);
170181

171-
var repository = scope.ServiceProvider.GetRequiredService<IBanRepository>();
182+
var repository = serviceScope.ServiceProvider.GetRequiredService<IBanRepository>();
172183

173184
// Act
174185
var result = await repository.ListBansPaginatedAsync(new BanPagingFilter
@@ -195,16 +206,10 @@ public async Task ListBansPaginatedAsync_WhenSearchInRange_ReturnsExpectedResult
195206
CancellationToken cancellationToken)
196207
{
197208
// Arrange
198-
await using var customAppFactory = await CreateAppFactoryAsync();
199-
using var scope = customAppFactory.Services.GetRequiredService<IServiceScopeFactory>().CreateScope();
200-
var timeProvider = scope.ServiceProvider.GetRequiredService<TimeProvider>();
201-
var dbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
202-
var hashService = scope.ServiceProvider.GetRequiredService<IHashService>();
203-
204-
if ((await dbContext.Database.GetPendingMigrationsAsync(cancellationToken)).Any())
205-
{
206-
await dbContext.Database.MigrateAsync(cancellationToken);
207-
}
209+
using var seedResult = await Seed(cancellationToken);
210+
var dbContext = seedResult.Scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
211+
var hashService = seedResult.Scope.ServiceProvider.GetRequiredService<IHashService>();
212+
var timeProvider = seedResult.Scope.ServiceProvider.GetRequiredService<TimeProvider>();
208213

209214
// Seed
210215
var admin = new ApplicationUser
@@ -306,7 +311,7 @@ public async Task ListBansPaginatedAsync_WhenSearchInRange_ReturnsExpectedResult
306311

307312
await dbContext.SaveChangesAsync(cancellationToken);
308313

309-
var repository = scope.ServiceProvider.GetRequiredService<IBanRepository>();
314+
var repository = seedResult.Scope.ServiceProvider.GetRequiredService<IBanRepository>();
310315

311316
// Act
312317
var result = await repository.ListBansPaginatedAsync(new BanPagingFilter

Hikkaba.Tests.Integration/Tests/Repositories/PostRepositoryTests.cs

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
using Microsoft.EntityFrameworkCore;
2121
using Microsoft.Extensions.DependencyInjection;
2222
using Microsoft.Extensions.Logging;
23+
using ReactReduxTodo.Tests.Integration.Models;
2324
using Thread = Hikkaba.Data.Entities.Thread;
2425

2526
namespace Hikkaba.Tests.Integration.Tests.Repositories;
@@ -44,10 +45,24 @@ public async Task OneTimeTearDownAsync()
4445
}
4546

4647
[MustDisposeResource]
47-
private async Task<CustomAppFactory> CreateAppFactoryAsync()
48+
private async Task<ISeedResult> Seed(CancellationToken cancellationToken)
4849
{
4950
var connectionString = await _contextManager!.CreateRespawnedDbConnectionStringAsync();
50-
return new CustomAppFactory(connectionString);
51+
var customAppFactory = new CustomAppFactory(connectionString);
52+
53+
var scope = customAppFactory.Services.GetRequiredService<IServiceScopeFactory>().CreateScope();
54+
var dbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
55+
56+
if ((await dbContext.Database.GetPendingMigrationsAsync(cancellationToken)).Any())
57+
{
58+
await dbContext.Database.MigrateAsync(cancellationToken);
59+
}
60+
61+
return new SeedResult
62+
{
63+
Scope = scope,
64+
AppFactory = customAppFactory,
65+
};
5166
}
5267

5368
[CancelAfter(TestDefaults.TestTimeout)]
@@ -63,17 +78,11 @@ public async Task SearchPostsPaginatedAsync_WhenSearchQueryIsProvided_ReturnsExp
6378
CancellationToken cancellationToken)
6479
{
6580
// Arrange
66-
await using var customAppFactory = await CreateAppFactoryAsync();
67-
using var scope = customAppFactory.Services.GetRequiredService<IServiceScopeFactory>().CreateScope();
68-
var timeProvider = scope.ServiceProvider.GetRequiredService<TimeProvider>();
69-
var dbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
70-
var hashService = scope.ServiceProvider.GetRequiredService<IHashService>();
71-
var logger = scope.ServiceProvider.GetRequiredService<ILogger<PostRepositoryTests>>();
72-
73-
if ((await dbContext.Database.GetPendingMigrationsAsync(cancellationToken)).Any())
74-
{
75-
await dbContext.Database.MigrateAsync(cancellationToken);
76-
}
81+
using var seedResult = await Seed(cancellationToken);
82+
var dbContext = seedResult.Scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
83+
var hashService = seedResult.Scope.ServiceProvider.GetRequiredService<IHashService>();
84+
var timeProvider = seedResult.Scope.ServiceProvider.GetRequiredService<TimeProvider>();
85+
var logger = seedResult.Scope.ServiceProvider.GetRequiredService<ILogger<PostRepositoryTests>>();
7786

7887
// Seed
7988
var admin = new ApplicationUser
@@ -165,7 +174,7 @@ public async Task SearchPostsPaginatedAsync_WhenSearchQueryIsProvided_ReturnsExp
165174

166175
await DbUtils.WaitForFulltextIndexAsync(logger, dbContext, ["Posts", "Threads"], cancellationToken: cancellationToken);
167176

168-
var repository = scope.ServiceProvider.GetRequiredService<IPostRepository>();
177+
var repository = seedResult.Scope.ServiceProvider.GetRequiredService<IPostRepository>();
169178

170179
// Act
171180
var result = await repository.SearchPostsPaginatedAsync(new SearchPostsPagingFilter

0 commit comments

Comments
 (0)