public TestFixture() { // Configure services var services = new ServiceCollection(); services.AddEntityFrameworkInMemoryDatabase() .AddDbContext <ConduitDbContext>(options => options.UseInMemoryDatabase($"{Guid.NewGuid().ToString()}.db")); services.AddIdentity <ConduitUser, IdentityRole>() .AddEntityFrameworkStores <ConduitDbContext>(); // Configure HTTP context for authentication var context = new DefaultHttpContext(); context.Features.Set <IHttpAuthenticationFeature>(new HttpAuthenticationFeature()); services.AddSingleton <IHttpContextAccessor>(_ => new HttpContextAccessor { HttpContext = context }); // Configure current user accessor as a provider var serviceProvider = services.BuildServiceProvider(); // Initialize the database with seed data and context accessors services var databaseContext = serviceProvider.GetRequiredService <ConduitDbContext>(); ConduitDbInitializer.Initialize(databaseContext); // Create the services from configured providers Mapper = AutoMapperFactory.Create(); MachineDateTime = new DateTimeTest(); TokenService = new TokenServiceTest(); Context = databaseContext; UserManager = serviceProvider.GetRequiredService <UserManager <ConduitUser> >(); CurrentUserContext = new CurrentUserContextTest(UserManager); }
protected override void ConfigureWebHost(IWebHostBuilder builder) { builder.ConfigureServices(services => { // Create a new service provider. var serviceProvider = new ServiceCollection() .AddEntityFrameworkInMemoryDatabase() .BuildServiceProvider(); services.AddDbContext <ConduitDbContext>(options => { options.UseInMemoryDatabase("InMemoryDbForTesting"); options.UseInternalServiceProvider(serviceProvider); }); // Build the service provider. var provider = services.BuildServiceProvider(); // Create a scope to obtain a reference to the database using (var scope = provider.CreateScope()) { var scopedServices = scope.ServiceProvider; var conduitDbContext = scopedServices.GetRequiredService <ConduitDbContext>(); // Ensure the database is created. conduitDbContext.Database.EnsureCreated(); // Seed the database with test data. ConduitDbInitializer.Initialize(conduitDbContext); } }); }
public static ConduitDbContext Create(out ConduitUser user) { var options = new DbContextOptionsBuilder <ConduitDbContext>() .UseInMemoryDatabase("Brewdude.Application.Tests.Db") .Options; var context = new ConduitDbContext(options); context.Database.EnsureCreated(); ConduitDbInitializer.Initialize(context); user = context.Users.FirstOrDefault(); return(context); }
public static void Main(string[] args) { var host = CreateWebHostBuilder(args).Build(); var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); // Seed database using (var scope = host.Services.CreateScope()) { try { var context = scope.ServiceProvider.GetService <ConduitDbContext>(); // Drop the tables to recreate them with fresh data every server re-roll Console.WriteLine("Initializing database contexts"); var timer = new Stopwatch(); timer.Start(); context.Database.Migrate(); // Remove database seed for passing postman tests ConduitDbInitializer.Initialize(context); timer.Stop(); Console.WriteLine($"Seeding databases, time to initialize {timer.ElapsedMilliseconds} ms"); } catch (Exception e) { var logger = scope.ServiceProvider.GetRequiredService <ILogger <Program> >(); logger.LogError(e, "Could not seed database"); } } try { host.Run(); } catch (Exception e) { Console.WriteLine($"Host terminated unexpectedly. Reason: {e.Message}"); } }