* Add extension methods to get the Umbraco connection string/provider name from configuration
* Added tests for configuration extension methods.
* Fix issue with InstallMissingDatabase and ForceCreateDatabase
* Fix comments
* Revert casing change in GenerateConnectionString
* Re-add AddOptions (without config binding) to fix test
* Update src/Umbraco.Core/Configuration/Models/ConnectionStrings.cs
Co-authored-by: Ronald Barendse <ronald@barend.se>
* Update src/Umbraco.Core/Configuration/Models/ConnectionStrings.cs
* Update src/Umbraco.Infrastructure/Runtime/RuntimeState.cs
* Whitespace and documentation updates
* Add DatabaseProviderMetadataExtensions
* Filter before ordering
* Replace DataDirectory placeholder when setting connection string
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
(cherry picked from commit 8e6e262c7f)
102 lines
3.7 KiB
C#
102 lines
3.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Options;
|
|
using NUnit.Framework;
|
|
using Umbraco.Cms.Core;
|
|
using Umbraco.Cms.Core.Configuration;
|
|
using Umbraco.Cms.Core.Configuration.Models;
|
|
using Umbraco.Cms.Tests.UnitTests.AutoFixture;
|
|
|
|
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Configuration;
|
|
|
|
[TestFixture]
|
|
public class ConfigureConnectionStringsTests
|
|
{
|
|
private const string UmbracoDbDsn = Constants.System.UmbracoConnectionName;
|
|
|
|
private IOptionsSnapshot<ConnectionStrings> GetOptions(IDictionary<string, string> configValues = null)
|
|
{
|
|
var configurationBuilder = new ConfigurationBuilder();
|
|
if (configValues != null)
|
|
{
|
|
configurationBuilder.AddInMemoryCollection(configValues);
|
|
}
|
|
|
|
var configuration = configurationBuilder.Build();
|
|
|
|
var services = new ServiceCollection();
|
|
services.AddOptions();
|
|
services.AddSingleton<IConfigureOptions<ConnectionStrings>, ConfigureConnectionStrings>();
|
|
services.AddSingleton<IConfiguration>(configuration);
|
|
|
|
var container = services.BuildServiceProvider();
|
|
return container.GetRequiredService<IOptionsSnapshot<ConnectionStrings>>();
|
|
}
|
|
|
|
[Test]
|
|
public void Configure_WithConfigMissingProvider_SetsDefaultValue()
|
|
{
|
|
var result = GetOptions();
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(result.Value.ProviderName, Is.Not.Null);
|
|
Assert.That(result.Value.ProviderName, Is.EqualTo(ConnectionStrings.DefaultProviderName));
|
|
|
|
Assert.That(result.Get(UmbracoDbDsn).ProviderName, Is.Not.Null);
|
|
Assert.That(result.Get(UmbracoDbDsn).ProviderName, Is.EqualTo(ConnectionStrings.DefaultProviderName));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
[AutoMoqData]
|
|
public void Configure_WithConfiguredProvider_RespectsProviderValue(
|
|
string aConnectionString,
|
|
string aProviderName)
|
|
{
|
|
var config = new Dictionary<string, string>
|
|
{
|
|
[$"ConnectionStrings:{UmbracoDbDsn}"] = aConnectionString,
|
|
[$"ConnectionStrings:{UmbracoDbDsn}_ProviderName"] = aProviderName,
|
|
};
|
|
|
|
var result = GetOptions(config);
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(result.Value.ProviderName, Is.Not.Null);
|
|
Assert.That(result.Value.ProviderName, Is.EqualTo(aProviderName));
|
|
|
|
Assert.That(result.Get(UmbracoDbDsn).ProviderName, Is.Not.Null);
|
|
Assert.That(result.Get(UmbracoDbDsn).ProviderName, Is.EqualTo(aProviderName));
|
|
});
|
|
}
|
|
|
|
[Test]
|
|
[AutoMoqData]
|
|
public void Configure_WithDataDirectoryPlaceholderInConnectionStringConfig_ReplacesDataDirectoryPlaceholder(
|
|
string aDataDirectory,
|
|
string aConnectionString,
|
|
string aProviderName)
|
|
{
|
|
AppDomain.CurrentDomain.SetData("DataDirectory", aDataDirectory);
|
|
var config = new Dictionary<string, string>
|
|
{
|
|
[$"ConnectionStrings:{UmbracoDbDsn}"] = $"{ConnectionStrings.DataDirectoryPlaceholder}/{aConnectionString}",
|
|
[$"ConnectionStrings:{UmbracoDbDsn}_ProviderName"] = aProviderName,
|
|
};
|
|
|
|
var result = GetOptions(config);
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(result.Value.ConnectionString, Is.Not.Null);
|
|
Assert.That(result.Value.ConnectionString, Contains.Substring($"{aDataDirectory}/{aConnectionString}"));
|
|
|
|
Assert.That(result.Get(UmbracoDbDsn).ConnectionString, Is.Not.Null);
|
|
Assert.That(result.Get(UmbracoDbDsn).ConnectionString, Contains.Substring($"{aDataDirectory}/{aConnectionString}"));
|
|
});
|
|
}
|
|
}
|