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);
                }
            });
        }
Пример #3
0
        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);
        }
Пример #4
0
        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}");
            }
        }