Files
Umbraco-CMS/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/ConfigureConnectionStringsTests.cs
Ronald Barendse 7087c3d9f6 v10: Use ForceCreateDatabase during unattended install and extend GetUmbracoConnectionString extension methods (#12397)
* 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)
2022-05-17 12:59:16 +02:00

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}"));
});
}
}