From 80b35e3baf26107b8e4278518f767d86fc2b62f2 Mon Sep 17 00:00:00 2001 From: David Barker Date: Fri, 24 Jan 2020 12:57:51 +0800 Subject: [PATCH] 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 --- .gitignore | 1 + ...entity.MongoDbCore.IntegrationTests.csproj | 5 ++ .../Infrastructure/Container.cs | 79 +++++++++++++------ .../appsettings.json | 12 +++ 4 files changed, 72 insertions(+), 25 deletions(-) create mode 100644 test/AspNetCore.Identity.MongoDbCore.IntegrationTests/appsettings.json diff --git a/.gitignore b/.gitignore index 11181a0..827bbf5 100644 --- a/.gitignore +++ b/.gitignore @@ -298,3 +298,4 @@ __pycache__/ *.odx.cs *.xsd.cs sample/MongoIdentitySample.Mvc/appsettings.local.json +test/AspNetCore.Identity.MongoDbCore.IntegrationTests/appsettings.local.json diff --git a/test/AspNetCore.Identity.MongoDbCore.IntegrationTests/AspNetCore.Identity.MongoDbCore.IntegrationTests.csproj b/test/AspNetCore.Identity.MongoDbCore.IntegrationTests/AspNetCore.Identity.MongoDbCore.IntegrationTests.csproj index 44f31f6..2ab4ae9 100644 --- a/test/AspNetCore.Identity.MongoDbCore.IntegrationTests/AspNetCore.Identity.MongoDbCore.IntegrationTests.csproj +++ b/test/AspNetCore.Identity.MongoDbCore.IntegrationTests/AspNetCore.Identity.MongoDbCore.IntegrationTests.csproj @@ -33,4 +33,9 @@ + + + Always + + diff --git a/test/AspNetCore.Identity.MongoDbCore.IntegrationTests/Infrastructure/Container.cs b/test/AspNetCore.Identity.MongoDbCore.IntegrationTests/Infrastructure/Container.cs index c2e3de0..523ec3d 100644 --- a/test/AspNetCore.Identity.MongoDbCore.IntegrationTests/Infrastructure/Container.cs +++ b/test/AspNetCore.Identity.MongoDbCore.IntegrationTests/Infrastructure/Container.cs @@ -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"); + + 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(this IConfiguration configuration, string key) where T : new() + { + var instance = new T(); + configuration.GetSection(key).Bind(instance); + return instance; + } + + public static T Load(this IConfiguration configuration, string key, T instance) where T : new() + { + configuration.GetSection(key).Bind(instance); + return instance; + } + } } diff --git a/test/AspNetCore.Identity.MongoDbCore.IntegrationTests/appsettings.json b/test/AspNetCore.Identity.MongoDbCore.IntegrationTests/appsettings.json new file mode 100644 index 0000000..5c53f25 --- /dev/null +++ b/test/AspNetCore.Identity.MongoDbCore.IntegrationTests/appsettings.json @@ -0,0 +1,12 @@ +{ + "MongoDbSettings": { + "ConnectionString": "mongodb://localhost:27017", + "DatabaseName": "MongoDbTests" + }, + "Logging": { + "IncludeScopes": false, + "LogLevel": { + "Default": "Warning" + } + } +}