Add appsettings config load for tests

Enables the config to be changed outside of the test
appsettings.local.json is not checked into the repo
This commit is contained in:
David Barker
2020-01-24 12:57:51 +08:00
parent f1265ec3df
commit 80b35e3baf
4 changed files with 72 additions and 25 deletions
@@ -1,5 +1,6 @@
using AspNetCore.Identity.MongoDbCore.Extensions;
using AspNetCore.Identity.MongoDbCore.Infrastructure;
using Microsoft.Extensions.Configuration;
using System;
namespace AspNetCore.Identity.MongoDbCore.IntegrationTests.Infrastructure
@@ -12,22 +13,47 @@ namespace AspNetCore.Identity.MongoDbCore.IntegrationTests.Infrastructure
public static class Container
{
public static MongoDbIdentityConfiguration MongoDbIdentityConfiguration = new MongoDbIdentityConfiguration
public static IConfiguration Configuration { get; set; }
static Container()
{
MongoDbSettings = new MongoDbSettings
var builder = new ConfigurationBuilder()
.SetBasePath(System.Environment.CurrentDirectory)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
//per user config that is not committed to repo, use this to override settings (e.g. connection string) based on your local environment.
.AddJsonFile($"appsettings.local.json", optional: true);
//builder.AddEnvironmentVariables();
Configuration = builder.Build();
var databaseSettings = Configuration.Load<MongoDbSettings>("MongoDbSettings");
MongoDbIdentityConfiguration = new MongoDbIdentityConfiguration()
{
ConnectionString = "mongodb://localhost:27017",
DatabaseName = "MongoDbTests"
},
IdentityOptionsAction = options =>
MongoDbSettings = databaseSettings,
IdentityOptionsAction = (options) =>
{
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.User.AllowedUserNameCharacters = null;
}
};
lock (Locks.MongoInitLock)
{
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.User.AllowedUserNameCharacters = null;
_mongoDbRepository = new MongoRepository(
databaseSettings.ConnectionString,
databaseSettings.DatabaseName);
_mongoDbRepository2 = new MongoRepository(
databaseSettings.ConnectionString,
databaseSettings.DatabaseName);
}
};
}
public static MongoDbIdentityConfiguration MongoDbIdentityConfiguration { get; set; }
public static IServiceProvider Instance { get; set; }
@@ -36,19 +62,6 @@ namespace AspNetCore.Identity.MongoDbCore.IntegrationTests.Infrastructure
private static readonly IMongoRepository _mongoDbRepository2;
static Container()
{
lock (Locks.MongoInitLock)
{
_mongoDbRepository = new MongoRepository(
MongoDbIdentityConfiguration.MongoDbSettings.ConnectionString,
MongoDbIdentityConfiguration.MongoDbSettings.DatabaseName);
_mongoDbRepository2 = new MongoRepository(
MongoDbIdentityConfiguration.MongoDbSettings.ConnectionString,
MongoDbIdentityConfiguration.MongoDbSettings.DatabaseName);
}
}
public static IMongoRepository MongoRepository
{
get
@@ -65,4 +78,20 @@ namespace AspNetCore.Identity.MongoDbCore.IntegrationTests.Infrastructure
}
}
}
public static class ConfigurationExtensions
{
public static T Load<T>(this IConfiguration configuration, string key) where T : new()
{
var instance = new T();
configuration.GetSection(key).Bind(instance);
return instance;
}
public static T Load<T>(this IConfiguration configuration, string key, T instance) where T : new()
{
configuration.GetSection(key).Bind(instance);
return instance;
}
}
}