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>();
await seedersManager.ExecuteAsync();
await seedersManager.ExecuteSeedAsync();
}
}

View File

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

View File

@ -1,39 +1,38 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace BuildingBlocks.EFCore;
public class SeedManager(
IServiceProvider serviceProvider
)
: ISeedManager
ILogger<SeedManager> logger,
IWebHostEnvironment env,
IServiceProvider serviceProvider
) : ISeedManager
{
public async Task ExecuteAsync()
public async Task ExecuteSeedAsync()
{
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>();
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("Test Seed {SeederName} is started.", seeder.GetType().Name);
await seeder.SeedAllAsync();
logger.LogInformation("Test Seed {SeederName} is completed.", seeder.GetType().Name);
}
logger.LogInformation("Seed {SeederName} is started.", seeder.GetType().Name);
await seeder.SeedAllAsync();
logger.LogInformation("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 completed.", seeder.GetType().Name);
}
logger.LogInformation("Seed {SeederName} is started.", 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>();
if (env.EnvironmentName != "test")
{
services.AddHostedService<PersistMessageBackgroundService>();
}
services.AddHostedService<PersistMessageBackgroundService>();
return services;
}

View File

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