Added unit tests for introduced unit test configuration setting builders.

This commit is contained in:
Andy Butland
2020-09-21 08:44:11 +02:00
parent d5d6082d07
commit d55b54ce49
15 changed files with 292 additions and 27 deletions

View File

@@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations;
using System;
using System.ComponentModel.DataAnnotations;
using System.Net.Mail;
using Umbraco.Core.Configuration.Models.Validation;
@@ -16,7 +17,18 @@ namespace Umbraco.Core.Configuration.Models
public string PickupDirectoryLocation { get; set; }
public SmtpDeliveryMethod DeliveryMethod { get; set; }
// See notes on ContentSettings.MacroErrors
internal string DeliveryMethod { get; set; }
public SmtpDeliveryMethod DeliveryMethodValue
{
get
{
return Enum.TryParse<SmtpDeliveryMethod>(DeliveryMethod, true, out var value)
? value
: SmtpDeliveryMethod.Network;
}
}
public string Username { get; set; }

View File

@@ -1,4 +1,5 @@
using Microsoft.Extensions.Options;
using System.Net.Mail;
using Microsoft.Extensions.Options;
namespace Umbraco.Core.Configuration.Models.Validation
{
@@ -17,7 +18,8 @@ namespace Umbraco.Core.Configuration.Models.Validation
private bool ValidateSmtpSetting(SmtpSettings value, out string message)
{
return ValidateOptionalEntry("Global:Smtp", value, "A valid From email address is required", out message);
return ValidateOptionalEntry("Global:Smtp", value, "A valid From email address is required", out message) &&
ValidateStringIsOneOfEnumValues("Global:Smtp:DeliveryMethod", value.DeliveryMethod, typeof(SmtpDeliveryMethod), out message);
}
}
}

View File

@@ -89,7 +89,7 @@ namespace Umbraco.Core
}
var mailMessage = ConstructEmailMessage(message);
if (_globalSettings.Smtp.DeliveryMethod == SmtpDeliveryMethod.Network)
if (_globalSettings.Smtp.DeliveryMethodValue == SmtpDeliveryMethod.Network)
{
await client.SendAsync(mailMessage);
}

View File

@@ -4,9 +4,22 @@ namespace Umbraco.Tests.Common.Builders
{
public class NuCacheSettingsBuilder : BuilderBase<NuCacheSettings>
{
private int? _bTreeBlockSize;
public NuCacheSettingsBuilder WithBTreeBlockSize(int bTreeBlockSize)
{
_bTreeBlockSize = bTreeBlockSize;
return this;
}
public override NuCacheSettings Build()
{
return new NuCacheSettings();
var bTreeBlockSize = _bTreeBlockSize ?? 4096;
return new NuCacheSettings
{
BTreeBlockSize = bTreeBlockSize
};
}
}
}

View File

@@ -17,7 +17,7 @@ namespace Umbraco.Tests.Common.Builders
private string _host;
private int? _port;
private string _pickupDirectoryLocation;
private SmtpDeliveryMethod? _deliveryMethod;
private string _deliveryMethod;
private string _username;
private string _password;
@@ -43,7 +43,7 @@ namespace Umbraco.Tests.Common.Builders
return this;
}
public SmtpSettingsBuilder<TParent> WithPost(int port)
public SmtpSettingsBuilder<TParent> WithPort(int port)
{
_port = port;
return this;
@@ -61,19 +61,25 @@ namespace Umbraco.Tests.Common.Builders
return this;
}
public SmtpSettingsBuilder<TParent> WithDeliveryMethod(SmtpDeliveryMethod deliveryMethod)
public SmtpSettingsBuilder<TParent> WithDeliveryMethod(string deliveryMethod)
{
_deliveryMethod = deliveryMethod;
return this;
}
public SmtpSettingsBuilder<TParent> WithDeliveryMethod(SmtpDeliveryMethod deliveryMethod)
{
_deliveryMethod = deliveryMethod.ToString();
return this;
}
public override SmtpSettings Build()
{
var from = _from ?? null;
var host = _host ?? null;
var port = _port ?? 25;
var pickupDirectoryLocation = _pickupDirectoryLocation ?? null;
var deliveryMethod = _deliveryMethod ?? SmtpDeliveryMethod.Network;
var deliveryMethod = _deliveryMethod ?? SmtpDeliveryMethod.Network.ToString();
var username = _username ?? null;
var password = _password ?? null;

View File

@@ -10,7 +10,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
public class ContentSettingsValidationTests
{
[Test]
public void ReturnsSuccessResponseForValidConfiguration()
public void Returns_Success_ForValid_Configuration()
{
var validator = new ContentSettingsValidator();
var options = BuildContentSettings();
@@ -19,7 +19,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
}
[Test]
public void ReturnsFailResponseForConfigurationWithInvalidMacroErrorsField()
public void Returns_Fail_For_Configuration_With_Invalid_MacroErrors_Field()
{
var validator = new ContentSettingsValidator();
var options = BuildContentSettings(macroErrors: "invalid");
@@ -28,7 +28,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
}
[Test]
public void ReturnsFailResponseForConfigurationWithInvalidError404CollectionDueToDuplicateId()
public void Returns_Fail_For_Configuration_With_Invalid_Error404Collection_Due_To_Duplicate_Id()
{
var validator = new ContentSettingsValidator();
var options = BuildContentSettings(contentXPath: "/aaa/bbb");
@@ -37,7 +37,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
}
[Test]
public void ReturnsFailResponseForConfigurationWithInvalidError404CollectionDueToEmptyCulture()
public void Returns_Fail_For_Configuration_With_Invalid_Error404Collection_Due_To_Empty_Culture()
{
var validator = new ContentSettingsValidator();
var options = BuildContentSettings(culture: string.Empty);
@@ -46,7 +46,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
}
[Test]
public void ReturnsFailResponseForConfigurationWithInvalidAutoFillImagePropertiesCollection()
public void Returns_Fail_For_Configuration_With_Invalid_AutoFillImageProperties_Collection()
{
var validator = new ContentSettingsValidator();
var options = BuildContentSettings(culture: string.Empty);

View File

@@ -9,28 +9,38 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
public class GlobalSettingsValidationTests
{
[Test]
public void ReturnsSuccessResponseForValidConfiguration()
public void Returns_Success_ForValid_Configuration()
{
var validator = new GlobalSettingsValidator();
var options = BuildGlobalSettings("test@test.com");
var options = BuildGlobalSettings();
var result = validator.Validate("settings", options);
Assert.True(result.Succeeded);
}
[Test]
public void ReturnsFailResponseForConfigurationWithInvalidSmtpFromField()
public void Returns_Fail_For_Configuration_With_Invalid_SmtpFrom_Field()
{
var validator = new GlobalSettingsValidator();
var options = BuildGlobalSettings("invalid");
var options = BuildGlobalSettings(smtpEmail: "invalid");
var result = validator.Validate("settings", options);
Assert.False(result.Succeeded);
}
private static GlobalSettings BuildGlobalSettings(string smtpEmail)
[Test]
public void Returns_Fail_For_Configuration_With_Invalid_SmtpDeliveryMethod_Field()
{
var validator = new GlobalSettingsValidator();
var options = BuildGlobalSettings(smtpDeliveryMethod: "invalid");
var result = validator.Validate("settings", options);
Assert.False(result.Succeeded);
}
private static GlobalSettings BuildGlobalSettings(string smtpEmail = "test@test.com", string smtpDeliveryMethod = "Network")
{
return new GlobalSettingsBuilder()
.AddSmtpSettings()
.WithFrom(smtpEmail)
.WithDeliveryMethod(smtpDeliveryMethod)
.Done()
.Build();
}

View File

@@ -8,7 +8,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
public class HostingSettingsValidatorTests
{
[Test]
public void ReturnsSuccessResponseForValidConfiguration()
public void Returns_Success_ForValid_Configuration()
{
var validator = new HostingSettingsValidator();
var options = new HostingSettingsBuilder().Build();
@@ -17,7 +17,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
}
[Test]
public void ReturnsFailResponseForConfigurationWithInvalidLocalTempStorageLocationField()
public void Returns_Fail_For_Configuration_With_Invalid_LocalTempStorage_Field()
{
var validator = new HostingSettingsValidator();
var options = new HostingSettingsBuilder().WithLocalTempStorageLocation("invalid").Build();

View File

@@ -8,7 +8,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
public class ModelsBuilderSettingsValidatorTests
{
[Test]
public void ReturnsSuccessResponseForValidConfiguration()
public void Returns_Success_ForValid_Configuration()
{
var validator = new ModelsBuilderSettingsValidator();
var options = new ModelsBuilderSettingsBuilder().Build();
@@ -17,7 +17,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
}
[Test]
public void ReturnsFailResponseForConfigurationWithInvalidModelsModeField()
public void Returns_Fail_For_Configuration_With_Invalid_ModelsMode_Field()
{
var validator = new ModelsBuilderSettingsValidator();
var options = new ModelsBuilderSettingsBuilder().WithModelsMode("invalid").Build();

View File

@@ -8,7 +8,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
public class RequestHandlerSettingsValidatorTests
{
[Test]
public void ReturnsSuccessResponseForValidConfiguration()
public void Returns_Success_ForValid_Configuration()
{
var validator = new RequestHandlerSettingsValidator();
var options = new RequestHandlerSettingsBuilder().Build();
@@ -17,7 +17,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation
}
[Test]
public void ReturnsFailResponseForConfigurationWithInvalidConvertUrlsToAsciiField()
public void Returns_Fail_For_Configuration_With_Invalid_ConvertUrlsToAscii_Field()
{
var validator = new RequestHandlerSettingsValidator();
var options = new RequestHandlerSettingsBuilder().WithConvertUrlsToAscii("invalid").Build();

View File

@@ -0,0 +1,65 @@
using System;
using System.Linq;
using NUnit.Framework;
using Umbraco.Tests.Common.Builders;
namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders
{
[TestFixture]
public class ContentSettingsBuilderTests
{
[Test]
public void Is_Built_Correctly()
{
// Arrange
const string autoFillImagePropertyAlias = "x";
const string autoFillImagePropertyWidthFieldAlias = "w";
const string autoFillImagePropertyHeightFieldAlias = "h";
const string autoFillImagePropertyLengthFieldAlias = "l";
const string autoFillImagePropertyExtensionFieldAlias = "e";
const int errorPageContentId = 100;
var errorPageContentKey = Guid.NewGuid();
const string errorPageContentXPath = "/aaa/bbb";
const string errorPageCulture = "en-GB";
var builder = new ContentSettingsBuilder();
// Act
var contentSettings = builder
.AddImaging()
.AddAutoFillImageProperty()
.WithAlias(autoFillImagePropertyAlias)
.WithWidthFieldAlias(autoFillImagePropertyWidthFieldAlias)
.WithHeightFieldAlias(autoFillImagePropertyHeightFieldAlias)
.WithLengthFieldAlias(autoFillImagePropertyLengthFieldAlias)
.WithExtensionFieldAlias(autoFillImagePropertyExtensionFieldAlias)
.Done()
.Done()
.AddErrorPage()
.WithContentId(errorPageContentId)
.WithContentKey(errorPageContentKey)
.WithContentXPath(errorPageContentXPath)
.WithCulture(errorPageCulture)
.Done()
.Build();
// Assert
Assert.AreEqual(1, contentSettings.Imaging.AutoFillImageProperties.Count());
var autoFillImageProperty = contentSettings.Imaging.AutoFillImageProperties.First();
Assert.AreEqual(autoFillImagePropertyAlias, autoFillImageProperty.Alias);
Assert.AreEqual(autoFillImagePropertyWidthFieldAlias, autoFillImageProperty.WidthFieldAlias);
Assert.AreEqual(autoFillImagePropertyHeightFieldAlias, autoFillImageProperty.HeightFieldAlias);
Assert.AreEqual(autoFillImagePropertyLengthFieldAlias, autoFillImageProperty.LengthFieldAlias);
Assert.AreEqual(autoFillImagePropertyExtensionFieldAlias, autoFillImageProperty.ExtensionFieldAlias);
Assert.AreEqual(1, contentSettings.Error404Collection.Count());
var errorPage = contentSettings.Error404Collection.First();
Assert.AreEqual(errorPageContentId, errorPage.ContentId);
Assert.AreEqual(errorPageContentKey, errorPage.ContentKey);
Assert.AreEqual(errorPageContentXPath, errorPage.ContentXPath);
Assert.AreEqual(errorPageCulture, errorPage.Culture);
}
}
}

View File

@@ -0,0 +1,104 @@
using System.Net.Mail;
using NUnit.Framework;
using Umbraco.Tests.Common.Builders;
namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders
{
[TestFixture]
public class GlobalSettingsBuilderTests
{
[Test]
public void Is_Built_Correctly()
{
// Arrange
const string configurationStatus = "9.0.1";
const string databaseFactoryServerVersion = "testServerVersion";
const string defaultUiLanguage = "en-GB";
const bool disableElectionForSingleServer = true;
const bool hideTopLevelNodeFromPath = true;
const bool installEmptyDatabase = true;
const bool installMissingDatabase = true;
const string umbracoPath = "~/testumbraco";
const string registerType = "testRegisterType";
const string reservedPaths = "/custom";
const string reservedUrls = "~/custom,";
const int timeOutInMinutes = 20;
const string umbracoCssPath = "~/testcss";
const string umbracoMediaPath = "~/testmedia";
const string umbracoScriptsPath = "~/testscripts";
const string mainDomLock = "testMainDomLock";
const string noNodesViewPath = "~/config/splashes/MyNoNodes.cshtml";
const bool useHttps = true;
const int versionCheckPeriod = 1;
const string smtpFrom = "test@test.com";
const string smtpHost = "test.com";
const int smtpPort = 225;
const SmtpDeliveryMethod smtpDeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
const string smtpPickupDirectoryLocation = "c:\\test";
const string smtpUsername = "testuser";
const string smtpPassword = "testpass";
var builder = new GlobalSettingsBuilder();
// Act
var globalSettings = builder
.WithConfigurationStatus(configurationStatus)
.WithDatabaseFactoryServerVersion(databaseFactoryServerVersion)
.WithDefaultUiLanguage(defaultUiLanguage)
.WithDisableElectionForSingleServer(disableElectionForSingleServer)
.WithHideTopLevelNodeFromPath(hideTopLevelNodeFromPath)
.WithInstallEmptyDatabase(installEmptyDatabase)
.WithInstallMissingDatabase(installMissingDatabase)
.WithUmbracoPath(umbracoPath)
.WithRegisterType(registerType)
.WithReservedPaths(reservedPaths)
.WithReservedUrls(reservedUrls)
.WithTimeOutInMinutes(timeOutInMinutes)
.WithUmbracoCssPath(umbracoCssPath)
.WithUmbracoMediaPath(umbracoMediaPath)
.WithUmbracoScriptsPath(umbracoScriptsPath)
.WithMainDomLock(mainDomLock)
.WithNoNodesViewPath(noNodesViewPath)
.WithUseHttps(useHttps)
.WithVersionCheckPeriod(versionCheckPeriod)
.AddSmtpSettings()
.WithFrom(smtpFrom)
.WithHost(smtpHost)
.WithPort(smtpPort)
.WithDeliveryMethod(smtpDeliveryMethod.ToString())
.WithPickupDirectoryLocation(smtpPickupDirectoryLocation)
.WithUsername(smtpUsername)
.WithPassword(smtpPassword)
.Done()
.Build();
// Assert
Assert.AreEqual(configurationStatus, globalSettings.ConfigurationStatus);
Assert.AreEqual(databaseFactoryServerVersion, globalSettings.DatabaseFactoryServerVersion);
Assert.AreEqual(defaultUiLanguage, globalSettings.DefaultUILanguage);
Assert.AreEqual(disableElectionForSingleServer, globalSettings.DisableElectionForSingleServer);
Assert.AreEqual(hideTopLevelNodeFromPath, globalSettings.HideTopLevelNodeFromPath);
Assert.AreEqual(installEmptyDatabase, globalSettings.InstallEmptyDatabase);
Assert.AreEqual(installMissingDatabase, globalSettings.InstallMissingDatabase);
Assert.AreEqual(umbracoPath, globalSettings.UmbracoPath);
Assert.AreEqual(registerType, globalSettings.RegisterType);
Assert.AreEqual(reservedPaths, globalSettings.ReservedPaths);
Assert.AreEqual(reservedUrls, globalSettings.ReservedUrls);
Assert.AreEqual(timeOutInMinutes, globalSettings.TimeOutInMinutes);
Assert.AreEqual(umbracoCssPath, globalSettings.UmbracoCssPath);
Assert.AreEqual(umbracoMediaPath, globalSettings.UmbracoMediaPath);
Assert.AreEqual(umbracoScriptsPath, globalSettings.UmbracoScriptsPath);
Assert.AreEqual(mainDomLock, globalSettings.MainDomLock);
Assert.AreEqual(noNodesViewPath, globalSettings.NoNodesViewPath);
Assert.AreEqual(useHttps, globalSettings.UseHttps);
Assert.AreEqual(versionCheckPeriod, globalSettings.VersionCheckPeriod);
Assert.AreEqual(smtpFrom, globalSettings.Smtp.From);
Assert.AreEqual(smtpHost, globalSettings.Smtp.Host);
Assert.AreEqual(smtpPort, globalSettings.Smtp.Port);
Assert.AreEqual(smtpDeliveryMethod, globalSettings.Smtp.DeliveryMethodValue);
Assert.AreEqual(smtpPickupDirectoryLocation, globalSettings.Smtp.PickupDirectoryLocation);
Assert.AreEqual(smtpUsername, globalSettings.Smtp.Username);
Assert.AreEqual(smtpPassword, globalSettings.Smtp.Password);
}
}
}

View File

@@ -0,0 +1,27 @@
using NUnit.Framework;
using Umbraco.Core.Configuration;
using Umbraco.Tests.Common.Builders;
namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders
{
[TestFixture]
public class ModelsBuilderSettingsBuilderTests
{
[Test]
public void Is_Built_Correctly()
{
// Arrange
const string modelsMode = "PureLive";
var builder = new ModelsBuilderSettingsBuilder();
// Act
var modelsBuilderSettings = builder
.WithModelsMode(modelsMode)
.Build();
// Assert
Assert.AreEqual(ModelsMode.PureLive, modelsBuilderSettings.ModelsModeValue);
}
}
}

View File

@@ -0,0 +1,26 @@
using NUnit.Framework;
using Umbraco.Tests.Common.Builders;
namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders
{
[TestFixture]
public class NuCacheSettingsBuilderTests
{
[Test]
public void Is_Built_Correctly()
{
// Arrange
const int bTreeBlockSize = 2048;
var builder = new NuCacheSettingsBuilder();
// Act
var nuCacheSettings = builder
.WithBTreeBlockSize(bTreeBlockSize)
.Build();
// Assert
Assert.AreEqual(bTreeBlockSize, nuCacheSettings.BTreeBlockSize);
}
}
}

View File

@@ -138,7 +138,7 @@ namespace Umbraco.Extensions
services.Configure<ContentSettings>(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Content"), o => o.BindNonPublicProperties = true);
services.Configure<CoreDebugSettings>(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Core:Debug"));
services.Configure<ExceptionFilterSettings>(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ExceptionFilter"));
services.Configure<GlobalSettings>(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Global"));
services.Configure<GlobalSettings>(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Global"), o => o.BindNonPublicProperties = true);
services.Configure<HealthChecksSettings>(configuration.GetSection(Constants.Configuration.ConfigPrefix + "HealthChecks"));
services.Configure<HostingSettings>(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Hosting"), o => o.BindNonPublicProperties = true);
services.Configure<ImagingSettings>(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Imaging"));