fix: fix db-update exception in tests

This commit is contained in:
Meysam Hadeli 2024-12-19 03:09:50 +03:30
parent bd345ae949
commit cc8989a6b3
5 changed files with 28 additions and 28 deletions

View File

@ -137,6 +137,6 @@ public static class Extensions
var seedersManager = scope.ServiceProvider.GetRequiredService<ISeedManager>(); var seedersManager = scope.ServiceProvider.GetRequiredService<ISeedManager>();
await seedersManager.ExecuteAsync(); await seedersManager.ExecuteSeedAsync();
} }
} }

View File

@ -2,5 +2,6 @@ namespace BuildingBlocks.EFCore;
public interface ISeedManager public interface ISeedManager
{ {
Task ExecuteAsync(); Task ExecuteSeedAsync();
Task ExecuteTestSeedAsync();
} }

View File

@ -1,39 +1,38 @@
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace BuildingBlocks.EFCore; namespace BuildingBlocks.EFCore;
public class SeedManager( public class SeedManager(
IServiceProvider serviceProvider ILogger<SeedManager> logger,
) IWebHostEnvironment env,
: ISeedManager IServiceProvider serviceProvider
) : ISeedManager
{ {
public async Task ExecuteAsync() public async Task ExecuteSeedAsync()
{ {
await using var scope = serviceProvider.CreateAsyncScope(); await using var scope = serviceProvider.CreateAsyncScope();
var logger = scope.ServiceProvider.GetRequiredService<ILogger<SeedManager>>();
var env = scope.ServiceProvider.GetRequiredService<IWebHostEnvironment>();
var dataSeeders = scope.ServiceProvider.GetServices<IDataSeeder>(); var dataSeeders = scope.ServiceProvider.GetServices<IDataSeeder>();
if (env.IsEnvironment("test")) foreach (var seeder in dataSeeders.Where(x => x is not ITestDataSeeder))
{ {
foreach (var seeder in dataSeeders.Where(x => x is ITestDataSeeder)) logger.LogInformation("Seed {SeederName} is started.", seeder.GetType().Name);
{ await seeder.SeedAllAsync();
logger.LogInformation("Test Seed {SeederName} is started.", seeder.GetType().Name); logger.LogInformation("Seed {SeederName} is completed.", seeder.GetType().Name);
await seeder.SeedAllAsync();
logger.LogInformation("Test Seed {SeederName} is completed.", seeder.GetType().Name);
}
} }
else }
public async Task ExecuteTestSeedAsync()
{
await using var scope = serviceProvider.CreateAsyncScope();
var dataSeeders = scope.ServiceProvider.GetServices<IDataSeeder>();
foreach (var seeder in dataSeeders.Where(x => x is not ITestDataSeeder))
{ {
foreach (var seeder in dataSeeders.Where(x => x is not ITestDataSeeder)) logger.LogInformation("Seed {SeederName} is started.", seeder.GetType().Name);
{ await seeder.SeedAllAsync();
logger.LogInformation("Seed {SeederName} is started.", seeder.GetType().Name); logger.LogInformation("Seed {SeederName} is completed.", seeder.GetType().Name);
await seeder.SeedAllAsync();
logger.LogInformation("Seed {SeederName} is completed.", seeder.GetType().Name);
}
} }
} }
} }

View File

@ -51,10 +51,7 @@ public static class Extensions
services.AddScoped<IPersistMessageProcessor, PersistMessageProcessor>(); services.AddScoped<IPersistMessageProcessor, PersistMessageProcessor>();
if (env.EnvironmentName != "test") services.AddHostedService<PersistMessageBackgroundService>();
{
services.AddHostedService<PersistMessageBackgroundService>();
}
return services; return services;
} }

View File

@ -52,6 +52,7 @@ where TEntryPoint : class
public CancellationTokenSource CancellationTokenSource; public CancellationTokenSource CancellationTokenSource;
public PersistMessageBackgroundService PersistMessageBackgroundService => ServiceProvider.GetRequiredService<PersistMessageBackgroundService>(); public PersistMessageBackgroundService PersistMessageBackgroundService => ServiceProvider.GetRequiredService<PersistMessageBackgroundService>();
public ISeedManager SeedManager => ServiceProvider.GetRequiredService<ISeedManager>();
public HttpClient HttpClient public HttpClient HttpClient
{ {
@ -95,7 +96,7 @@ where TEntryPoint : class
{ {
TestRegistrationServices?.Invoke(services); TestRegistrationServices?.Invoke(services);
services.ReplaceSingleton(AddHttpContextAccessorMock); services.ReplaceSingleton(AddHttpContextAccessorMock);
// services.RemoveAll<IHostedService>(); services.RemoveAll<IHostedService>();
services.AddSingleton<PersistMessageBackgroundService>(); services.AddSingleton<PersistMessageBackgroundService>();
// Register all ITestDataSeeder implementations dynamically // Register all ITestDataSeeder implementations dynamically
@ -609,6 +610,8 @@ where TEntryPoint : class
_reSpawnerDefaultDb = await Respawner.CreateAsync( _reSpawnerDefaultDb = await Respawner.CreateAsync(
DefaultDbConnection, DefaultDbConnection,
new RespawnerOptions { DbAdapter = DbAdapter.Postgres }); new RespawnerOptions { DbAdapter = DbAdapter.Postgres });
await Fixture.SeedManager.ExecuteTestSeedAsync();
} }
} }