using System; using System.IO; using Luticate2.Utils.DataAccess; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using TestUtils.DataAccess; namespace TestUtils { public class Tests { public const string RealDbConnectionString = "User ID=dev;Password=dev;Host=localhost;Port=5432;Database=luticate2_utils;Pooling=true;"; public const string RealFsDir = "/tmp/luticate2/"; public static IServiceProvider BuildRealDbServiceProvider() { IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddScoped(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); serviceCollection.AddDbContext(builder => builder.UseNpgsql(RealDbConnectionString), ServiceLifetime.Transient); return serviceCollection.BuildServiceProvider(); } protected static void _TestRealDb(Action func) { var serviceProvider = BuildRealDbServiceProvider(); var transactionScope = serviceProvider.GetService(); transactionScope.BeginTransaction(null); try { func(serviceProvider); } finally { transactionScope.RollbackTransaction(); } } public static void TestRealDb(Action func) { _TestRealDb(provider => { func(provider.GetService()); }); } public static void TestRealDb(Action func) { _TestRealDb(provider => { func(provider.GetService(), provider.GetService()); }); } public static void TestRealFs(Action func) { var tmp = Path.Combine(RealFsDir, "RealFsDir-" + new Random().Next()); try { Directory.CreateDirectory(tmp); func(new LuTmpFsFilesCrudDataAccess(tmp)); } finally { Directory.Delete(tmp, true); } } } }