Fix add user secrets (#44838)
authorVadim Galaktionov <gala-vadim@narod.ru>
Fri, 20 Nov 2020 17:17:20 +0000 (20:17 +0300)
committerGitHub <noreply@github.com>
Fri, 20 Nov 2020 17:17:20 +0000 (09:17 -0800)
src/libraries/Microsoft.Extensions.Configuration.UserSecrets/src/UserSecretsConfigurationExtensions.cs
src/libraries/Microsoft.Extensions.Configuration.UserSecrets/tests/ConfigurationExtensionTest.cs

index bdd31d0..86139fa 100644 (file)
@@ -131,7 +131,7 @@ namespace Microsoft.Extensions.Configuration
             UserSecretsIdAttribute attribute = assembly.GetCustomAttribute<UserSecretsIdAttribute>();
             if (attribute != null)
             {
-                return AddUserSecrets(configuration, attribute.UserSecretsId, reloadOnChange);
+                return AddUserSecretsInternal(configuration, attribute.UserSecretsId, optional, reloadOnChange);
             }
 
             if (!optional)
@@ -169,6 +169,9 @@ namespace Microsoft.Extensions.Configuration
         /// <param name="reloadOnChange">Whether the configuration should be reloaded if the file changes.</param>
         /// <returns>The configuration builder.</returns>
         public static IConfigurationBuilder AddUserSecrets(this IConfigurationBuilder configuration, string userSecretsId, bool reloadOnChange)
+            => AddUserSecretsInternal(configuration, userSecretsId, true, reloadOnChange);
+
+        private static IConfigurationBuilder AddUserSecretsInternal(IConfigurationBuilder configuration, string userSecretsId, bool optional, bool reloadOnChange)
         {
             if (configuration == null)
             {
@@ -180,16 +183,16 @@ namespace Microsoft.Extensions.Configuration
                 throw new ArgumentNullException(nameof(userSecretsId));
             }
 
-            return AddSecretsFile(configuration, PathHelper.GetSecretsPathFromSecretsId(userSecretsId), reloadOnChange);
+            return AddSecretsFile(configuration, PathHelper.GetSecretsPathFromSecretsId(userSecretsId), optional, reloadOnChange);
         }
 
-        private static IConfigurationBuilder AddSecretsFile(IConfigurationBuilder configuration, string secretPath, bool reloadOnChange)
+        private static IConfigurationBuilder AddSecretsFile(IConfigurationBuilder configuration, string secretPath, bool optional, bool reloadOnChange)
         {
             string directoryPath = Path.GetDirectoryName(secretPath);
             PhysicalFileProvider fileProvider = Directory.Exists(directoryPath)
                 ? new PhysicalFileProvider(directoryPath)
                 : null;
-            return configuration.AddJsonFile(fileProvider, PathHelper.SecretsFileName, optional: true, reloadOnChange);
+            return configuration.AddJsonFile(fileProvider, PathHelper.SecretsFileName, optional, reloadOnChange);
         }
     }
 }
index 44fa286..7859e9f 100644 (file)
@@ -108,6 +108,19 @@ namespace Microsoft.Extensions.Configuration.UserSecrets.Test
         }
 
         [Fact]
+        public void AddUserSecrets_DoesThrowsIfNotOptionalAndSecretDoesNotExist()
+        {
+            var secretId = Assembly.GetExecutingAssembly().GetName().Name;
+            var secretPath = PathHelper.GetSecretsPathFromSecretsId(secretId);
+            if (File.Exists(secretPath))
+            {
+                File.Delete(secretPath);
+            }
+
+            Assert.Throws<FileNotFoundException>(() => new ConfigurationBuilder().AddUserSecrets(Assembly.GetExecutingAssembly(), false).Build());
+        }
+
+        [Fact]
         [ActiveIssue("https://github.com/dotnet/runtime/issues/34580", TestPlatforms.Windows, TargetFrameworkMonikers.Netcoreapp, TestRuntimes.Mono)]
         public void AddUserSecrets_With_SecretsId_Passed_Explicitly()
         {