From 1f8d7f18be71f6ff969feb48a3ba7baa1cb0d410 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Fri, 18 Sep 2020 11:30:26 +0200 Subject: [PATCH 01/17] Added configuration validation for content and request handler settings. --- .../Configuration/Models/ContentErrorPage.cs | 25 ++++++++--- .../Models/ContentImagingSettings.cs | 4 ++ .../Configuration/Models/ContentSettings.cs | 15 +++++-- .../Validation/ConfigurationValidationBase.cs | 27 ++++++++++++ .../Validation/ContentSettingsValidation.cs | 43 +++++++++++++++++++ .../RequestHandlerSettingsValidation.cs | 23 ++++++++++ .../Routing/NotFoundHandlerHelper.cs | 2 +- .../Configurations/GlobalSettingsTests.cs | 3 +- .../UmbracoCoreServiceCollectionExtensions.cs | 5 ++- .../Macros/MacroRenderer.cs | 2 +- src/Umbraco.Web/Macros/MacroRenderer.cs | 2 +- 11 files changed, 136 insertions(+), 15 deletions(-) create mode 100644 src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs create mode 100644 src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidation.cs create mode 100644 src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidation.cs diff --git a/src/Umbraco.Core/Configuration/Models/ContentErrorPage.cs b/src/Umbraco.Core/Configuration/Models/ContentErrorPage.cs index 8971dda5cc..ec4869d3b4 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentErrorPage.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentErrorPage.cs @@ -4,12 +4,25 @@ namespace Umbraco.Core.Configuration.Models { public class ContentErrorPage { - //TODO introduce validation, to check only one of key/id/xPath is used. - public int ContentId { get; } - public Guid ContentKey { get; } - public string ContentXPath { get; } - public bool HasContentId { get; } - public bool HasContentKey { get; } + public int ContentId { get; set; } + + public Guid ContentKey { get; set; } + + public string ContentXPath { get; set; } + + public bool HasContentId => ContentId != 0; + + public bool HasContentKey => ContentKey != Guid.Empty; + + public bool HasContentXPath => !string.IsNullOrEmpty(ContentXPath); + public string Culture { get; set; } + + public bool IsValid() + { + // Entry is valid if Culture and one and only one of ContentId, ContentKey or ContentXPath is provided. + return !string.IsNullOrWhiteSpace(Culture) && + ((HasContentId ? 1 : 0) + (HasContentKey ? 1 : 0) + (HasContentXPath ? 1 : 0) == 1); + } } } diff --git a/src/Umbraco.Core/Configuration/Models/ContentImagingSettings.cs b/src/Umbraco.Core/Configuration/Models/ContentImagingSettings.cs index 018936896c..681dcbbe88 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentImagingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentImagingSettings.cs @@ -24,9 +24,13 @@ namespace Umbraco.Core.Configuration.Models private class ImagingAutoFillUploadField : IImagingAutoFillUploadField { public string Alias { get; set; } + public string WidthFieldAlias { get; set; } + public string HeightFieldAlias { get; set; } + public string LengthFieldAlias { get; set; } + public string ExtensionFieldAlias { get; set; } } } diff --git a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs index 5158a5c746..00b9ef2181 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Macros; namespace Umbraco.Core.Configuration.Models @@ -16,11 +15,21 @@ namespace Umbraco.Core.Configuration.Models public bool ResolveUrlsFromTextString { get; set; } = false; - public IEnumerable Error404Collection { get; set; } = Array.Empty(); + public ContentErrorPage[] Error404Collection { get; set; } = Array.Empty(); public string PreviewBadge { get; set; } = DefaultPreviewBadge; - public MacroErrorBehaviour MacroErrors { get; set; } = MacroErrorBehaviour.Inline; + public string MacroErrors { get; set; } = MacroErrorBehaviour.Inline.ToString(); + + public MacroErrorBehaviour MacroErrorsBehaviour + { + get + { + return Enum.TryParse(MacroErrors, true, out var value) + ? value + : MacroErrorBehaviour.Inline; + } + } public IEnumerable DisallowedUploadFiles { get; set; } = new[] { "ashx", "aspx", "ascx", "config", "cshtml", "vbhtml", "asmx", "air", "axd" }; diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs b/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs new file mode 100644 index 0000000000..d311b5157c --- /dev/null +++ b/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Umbraco.Core.Configuration.Models.Validation +{ + public abstract class ConfigurationValidationBase + { + public bool ValidateStringIsOneOfValidValues(string configPath, string value, IEnumerable validValues, out string message) + { + if (!validValues.InvariantContains(value)) + { + message = $"Configuration entry {configPath} contains an invalid value '{value}', it should be one of the following: '{string.Join(", ", validValues)}'."; + return false; + } + + message = string.Empty; + return true; + } + + public bool ValidateStringIsOneOfEnumValues(string configPath, string value, Type enumType, out string message) + { + var validValues = Enum.GetValues(enumType).OfType().Select(x => x.ToString().ToFirstLowerInvariant()); + return ValidateStringIsOneOfValidValues(configPath, value, validValues, out message); + } + } +} diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidation.cs b/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidation.cs new file mode 100644 index 0000000000..8693cfd218 --- /dev/null +++ b/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidation.cs @@ -0,0 +1,43 @@ +using System.Collections.Generic; +using System.Linq; +using Microsoft.Extensions.Options; +using Umbraco.Core.Macros; + +namespace Umbraco.Core.Configuration.Models.Validation +{ + public class ContentSettingsValidation : ConfigurationValidationBase, IValidateOptions + { + public ValidateOptionsResult Validate(string name, ContentSettings options) + { + string message; + if (!ValidateMacroErrors(options.MacroErrors, out message)) + { + return ValidateOptionsResult.Fail(message); + } + + if (!ValidateError404Collection(options.Error404Collection, out message)) + { + return ValidateOptionsResult.Fail(message); + } + + return ValidateOptionsResult.Success; + } + + private bool ValidateMacroErrors(string value, out string message) + { + return ValidateStringIsOneOfEnumValues("Content:MacroErrors", value, typeof(MacroErrorBehaviour), out message); + } + + private bool ValidateError404Collection(IEnumerable values, out string message) + { + if (values.Any(x => !x.IsValid())) + { + message = $"Configuration entry Content:Error404Collection contains one or more invalid values. Culture and one and only one of ContentId, ContentKey and ContentXPath must be specified for each entry."; + return false; + } + + message = string.Empty; + return true; + } + } +} diff --git a/src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidation.cs b/src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidation.cs new file mode 100644 index 0000000000..022f0289d8 --- /dev/null +++ b/src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidation.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.Options; + +namespace Umbraco.Core.Configuration.Models.Validation +{ + public class RequestHandlerSettingsValidation : ConfigurationValidationBase, IValidateOptions + { + public ValidateOptionsResult Validate(string name, RequestHandlerSettings options) + { + if (!ValidateConvertUrlsToAscii(options.ConvertUrlsToAscii, out var message)) + { + return ValidateOptionsResult.Fail(message); + } + + return ValidateOptionsResult.Success; + } + + private bool ValidateConvertUrlsToAscii(string value, out string message) + { + var validValues = new[] { "try", "true", "false" }; + return ValidateStringIsOneOfValidValues("RequestHandler:ConvertUrlsToAscii", value, validValues, out message); + } + } +} diff --git a/src/Umbraco.Infrastructure/Routing/NotFoundHandlerHelper.cs b/src/Umbraco.Infrastructure/Routing/NotFoundHandlerHelper.cs index 20fbe9a1ef..459d95466d 100644 --- a/src/Umbraco.Infrastructure/Routing/NotFoundHandlerHelper.cs +++ b/src/Umbraco.Infrastructure/Routing/NotFoundHandlerHelper.cs @@ -62,7 +62,7 @@ namespace Umbraco.Web.Routing } /// - /// Returns the content id based on the configured IContentErrorPage section + /// Returns the content id based on the configured ContentErrorPage section. /// /// /// diff --git a/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs b/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs index a7b148c8e5..59d5aa516d 100644 --- a/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs +++ b/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs @@ -1,5 +1,4 @@ -using Moq; -using NUnit.Framework; +using NUnit.Framework; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.Models; using Umbraco.Tests.Common.Builders; diff --git a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs index 44fb18a159..09e4c0c82a 100644 --- a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs @@ -18,6 +18,7 @@ using Umbraco.Core.Cache; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.Models; +using Umbraco.Core.Configuration.Models.Validation; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Logging.Serilog; @@ -126,6 +127,9 @@ namespace Umbraco.Extensions { if (configuration == null) throw new ArgumentNullException(nameof(configuration)); + services.AddSingleton, ContentSettingsValidation>(); + services.AddSingleton, RequestHandlerSettingsValidation>(); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ActiveDirectory")); services.Configure(configuration.GetSection("ConnectionStrings"), o => o.BindNonPublicProperties = true); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Content")); @@ -149,7 +153,6 @@ namespace Umbraco.Extensions services.Configure(configuration.GetSection(Constants.Configuration.ConfigSecurityPrefix + "UserPassword")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "WebRouting")); - return services; } diff --git a/src/Umbraco.Web.Common/Macros/MacroRenderer.cs b/src/Umbraco.Web.Common/Macros/MacroRenderer.cs index 58c1e59338..5114f4a20f 100644 --- a/src/Umbraco.Web.Common/Macros/MacroRenderer.cs +++ b/src/Umbraco.Web.Common/Macros/MacroRenderer.cs @@ -290,7 +290,7 @@ namespace Umbraco.Web.Macros Alias = macro.Alias, MacroSource = macro.MacroSource, Exception = e, - Behaviour = _contentSettings.MacroErrors + Behaviour = _contentSettings.MacroErrorsBehaviour }; switch (macroErrorEventArgs.Behaviour) diff --git a/src/Umbraco.Web/Macros/MacroRenderer.cs b/src/Umbraco.Web/Macros/MacroRenderer.cs index 8d13c03e8b..8c11478c78 100644 --- a/src/Umbraco.Web/Macros/MacroRenderer.cs +++ b/src/Umbraco.Web/Macros/MacroRenderer.cs @@ -290,7 +290,7 @@ namespace Umbraco.Web.Macros Alias = macro.Alias, MacroSource = macro.MacroSource, Exception = e, - Behaviour = _contentSettings.MacroErrors + Behaviour = _contentSettings.MacroErrorsBehaviour }; switch (macroErrorEventArgs.Behaviour) From eb62789b68d14c8efae1ce98e74e4456ed51b6ec Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Fri, 18 Sep 2020 12:02:12 +0200 Subject: [PATCH 02/17] Added configuration validation for content imaging settings. --- .../ContentSettingsExtensions.cs | 2 +- .../Configuration/Models/ContentErrorPage.cs | 10 ++++---- .../Models/ContentImagingSettings.cs | 22 +++--------------- .../Models/ImagingAutoFillUploadField.cs | 23 +++++++++++++++++++ .../Validation/ConfigurationValidationBase.cs | 12 ++++++++++ .../Validation/ContentSettingsValidation.cs | 20 +++++++++------- .../Models/Validation/ValidatableEntryBase.cs | 15 ++++++++++++ .../Media/UploadAutoFillProperties.cs | 11 ++++----- 8 files changed, 77 insertions(+), 38 deletions(-) create mode 100644 src/Umbraco.Core/Configuration/Models/ImagingAutoFillUploadField.cs create mode 100644 src/Umbraco.Core/Configuration/Models/Validation/ValidatableEntryBase.cs diff --git a/src/Umbraco.Core/Configuration/ContentSettingsExtensions.cs b/src/Umbraco.Core/Configuration/ContentSettingsExtensions.cs index 21ebe55f2f..7bf8f0fa15 100644 --- a/src/Umbraco.Core/Configuration/ContentSettingsExtensions.cs +++ b/src/Umbraco.Core/Configuration/ContentSettingsExtensions.cs @@ -39,7 +39,7 @@ namespace Umbraco.Core.Configuration /// /// The property type alias. /// The auto-fill configuration for the specified property alias, or null. - public static IImagingAutoFillUploadField GetConfig(this ContentSettings contentSettings, string propertyTypeAlias) + public static ImagingAutoFillUploadField GetConfig(this ContentSettings contentSettings, string propertyTypeAlias) { var autoFillConfigs = contentSettings.Imaging.AutoFillImageProperties; return autoFillConfigs?.FirstOrDefault(x => x.Alias == propertyTypeAlias); diff --git a/src/Umbraco.Core/Configuration/Models/ContentErrorPage.cs b/src/Umbraco.Core/Configuration/Models/ContentErrorPage.cs index ec4869d3b4..6a362c93a3 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentErrorPage.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentErrorPage.cs @@ -1,8 +1,10 @@ using System; +using System.ComponentModel.DataAnnotations; +using Umbraco.Core.Configuration.Models.Validation; namespace Umbraco.Core.Configuration.Models { - public class ContentErrorPage + public class ContentErrorPage : ValidatableEntryBase { public int ContentId { get; set; } @@ -16,12 +18,12 @@ namespace Umbraco.Core.Configuration.Models public bool HasContentXPath => !string.IsNullOrEmpty(ContentXPath); + [Required] public string Culture { get; set; } - public bool IsValid() + internal override bool IsValid() { - // Entry is valid if Culture and one and only one of ContentId, ContentKey or ContentXPath is provided. - return !string.IsNullOrWhiteSpace(Culture) && + return base.IsValid() && ((HasContentId ? 1 : 0) + (HasContentKey ? 1 : 0) + (HasContentXPath ? 1 : 0) == 1); } } diff --git a/src/Umbraco.Core/Configuration/Models/ContentImagingSettings.cs b/src/Umbraco.Core/Configuration/Models/ContentImagingSettings.cs index 681dcbbe88..7c1e570426 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentImagingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentImagingSettings.cs @@ -1,7 +1,4 @@ -using System.Collections.Generic; -using Umbraco.Core.Configuration.UmbracoSettings; - -namespace Umbraco.Core.Configuration.Models +namespace Umbraco.Core.Configuration.Models { public class ContentImagingSettings { @@ -17,21 +14,8 @@ namespace Umbraco.Core.Configuration.Models } }; - public IEnumerable ImageFileTypes { get; set; } = new[] { "jpeg", "jpg", "gif", "bmp", "png", "tiff", "tif" }; + public string[] ImageFileTypes { get; set; } = new[] { "jpeg", "jpg", "gif", "bmp", "png", "tiff", "tif" }; - public IEnumerable AutoFillImageProperties { get; set; } = DefaultImagingAutoFillUploadField; - - private class ImagingAutoFillUploadField : IImagingAutoFillUploadField - { - public string Alias { get; set; } - - public string WidthFieldAlias { get; set; } - - public string HeightFieldAlias { get; set; } - - public string LengthFieldAlias { get; set; } - - public string ExtensionFieldAlias { get; set; } - } + public ImagingAutoFillUploadField[] AutoFillImageProperties { get; set; } = DefaultImagingAutoFillUploadField; } } diff --git a/src/Umbraco.Core/Configuration/Models/ImagingAutoFillUploadField.cs b/src/Umbraco.Core/Configuration/Models/ImagingAutoFillUploadField.cs new file mode 100644 index 0000000000..f58e2bb4f8 --- /dev/null +++ b/src/Umbraco.Core/Configuration/Models/ImagingAutoFillUploadField.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; +using Umbraco.Core.Configuration.Models.Validation; + +namespace Umbraco.Core.Configuration.Models +{ + public class ImagingAutoFillUploadField : ValidatableEntryBase + { + [Required] + public string Alias { get; set; } + + [Required] + public string WidthFieldAlias { get; set; } + + [Required] + public string HeightFieldAlias { get; set; } + + [Required] + public string LengthFieldAlias { get; set; } + + [Required] + public string ExtensionFieldAlias { get; set; } + } +} diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs b/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs index d311b5157c..1af1945665 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs @@ -23,5 +23,17 @@ namespace Umbraco.Core.Configuration.Models.Validation var validValues = Enum.GetValues(enumType).OfType().Select(x => x.ToString().ToFirstLowerInvariant()); return ValidateStringIsOneOfValidValues(configPath, value, validValues, out message); } + + public bool ValidateCollection(string configPath, IEnumerable values, string validationDescription, out string message) + { + if (values.Any(x => !x.IsValid())) + { + message = $"Configuration entry {configPath} contains one or more invalid values. {validationDescription}."; + return false; + } + + message = string.Empty; + return true; + } } } diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidation.cs b/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidation.cs index 8693cfd218..527dcc4737 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidation.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidation.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.Options; using Umbraco.Core.Macros; @@ -20,6 +21,11 @@ namespace Umbraco.Core.Configuration.Models.Validation return ValidateOptionsResult.Fail(message); } + if (!ValidateAutoFillImageProperties(options.Imaging.AutoFillImageProperties, out message)) + { + return ValidateOptionsResult.Fail(message); + } + return ValidateOptionsResult.Success; } @@ -30,14 +36,12 @@ namespace Umbraco.Core.Configuration.Models.Validation private bool ValidateError404Collection(IEnumerable values, out string message) { - if (values.Any(x => !x.IsValid())) - { - message = $"Configuration entry Content:Error404Collection contains one or more invalid values. Culture and one and only one of ContentId, ContentKey and ContentXPath must be specified for each entry."; - return false; - } + return ValidateCollection("Content:Error404Collection", values, "Culture and one and only one of ContentId, ContentKey and ContentXPath must be specified for each entry", out message); + } - message = string.Empty; - return true; + private bool ValidateAutoFillImageProperties(IEnumerable values, out string message) + { + return ValidateCollection("Content:Imaging:AutoFillImageProperties", values, "Alias, WidthFieldAlias, HeightFieldAlias, LengthFieldAlias and ExtensionFieldAlias must be specified for each entry", out message); } } } diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ValidatableEntryBase.cs b/src/Umbraco.Core/Configuration/Models/Validation/ValidatableEntryBase.cs new file mode 100644 index 0000000000..32e3c3270b --- /dev/null +++ b/src/Umbraco.Core/Configuration/Models/Validation/ValidatableEntryBase.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; + +namespace Umbraco.Core.Configuration.Models.Validation +{ + public abstract class ValidatableEntryBase + { + internal virtual bool IsValid() + { + var ctx = new ValidationContext(this); + var results = new List(); + return Validator.TryValidateObject(this, ctx, results, true); + } + } +} diff --git a/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs b/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs index 762e418441..be46c6ef20 100644 --- a/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs +++ b/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs @@ -5,7 +5,6 @@ using Microsoft.Extensions.Options; using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.Models; -using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; @@ -38,7 +37,7 @@ namespace Umbraco.Web.Media /// The auto-fill configuration. /// Variation language. /// Variation segment. - public void Reset(IContentBase content, IImagingAutoFillUploadField autoFillConfig, string culture, string segment) + public void Reset(IContentBase content, ImagingAutoFillUploadField autoFillConfig, string culture, string segment) { if (content == null) throw new ArgumentNullException(nameof(content)); if (autoFillConfig == null) throw new ArgumentNullException(nameof(autoFillConfig)); @@ -55,7 +54,7 @@ namespace Umbraco.Web.Media /// The parameter is the path relative to the filesystem. /// Variation language. /// Variation segment. - public void Populate(IContentBase content, IImagingAutoFillUploadField autoFillConfig, string filepath, string culture, string segment) + public void Populate(IContentBase content, ImagingAutoFillUploadField autoFillConfig, string filepath, string culture, string segment) { if (content == null) throw new ArgumentNullException(nameof(content)); if (autoFillConfig == null) throw new ArgumentNullException(nameof(autoFillConfig)); @@ -94,7 +93,7 @@ namespace Umbraco.Web.Media /// The stream containing the file data. /// Variation language. /// Variation segment. - public void Populate(IContentBase content, IImagingAutoFillUploadField autoFillConfig, string filepath, Stream filestream, string culture, string segment) + public void Populate(IContentBase content, ImagingAutoFillUploadField autoFillConfig, string filepath, Stream filestream, string culture, string segment) { if (content == null) throw new ArgumentNullException(nameof(content)); if (autoFillConfig == null) throw new ArgumentNullException(nameof(autoFillConfig)); @@ -112,7 +111,7 @@ namespace Umbraco.Web.Media } } - private static void SetProperties(IContentBase content, IImagingAutoFillUploadField autoFillConfig, Size? size, long length, string extension, string culture, string segment) + private static void SetProperties(IContentBase content, ImagingAutoFillUploadField autoFillConfig, Size? size, long length, string extension, string culture, string segment) { if (content == null) throw new ArgumentNullException(nameof(content)); if (autoFillConfig == null) throw new ArgumentNullException(nameof(autoFillConfig)); @@ -130,7 +129,7 @@ namespace Umbraco.Web.Media content.Properties[autoFillConfig.ExtensionFieldAlias].SetValue(extension, culture, segment); } - private static void ResetProperties(IContentBase content, IImagingAutoFillUploadField autoFillConfig, string culture, string segment) + private static void ResetProperties(IContentBase content, ImagingAutoFillUploadField autoFillConfig, string culture, string segment) { if (content == null) throw new ArgumentNullException(nameof(content)); if (autoFillConfig == null) throw new ArgumentNullException(nameof(autoFillConfig)); From b9e67dde559b9a1dd17c1dbaf17cb003a886512a Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Fri, 18 Sep 2020 12:53:10 +0200 Subject: [PATCH 03/17] Added configuration validation for models builder and hosting settings. Renamed models builder config class suffix to match others. --- .../Configuration/Models/ContentSettings.cs | 6 ++++- .../Configuration/Models/HostingSettings.cs | 17 ++++++++++++-- ...lderConfig.cs => ModelsBuilderSettings.cs} | 20 +++++++++++++---- .../Configuration/Models/SmtpSettings.cs | 8 +++++-- .../Validation/ConfigurationValidationBase.cs | 14 +++++++++++- .../Validation/GlobalSettingsValidation.cs | 22 +++++++++++++++++++ .../Validation/HostingSettingsValidation.cs | 22 +++++++++++++++++++ .../ModelsBuilderSettingsValidation.cs | 22 +++++++++++++++++++ .../ModelsBuilderConfigExtensions.cs | 2 +- src/Umbraco.Core/Constants-Configuration.cs | 2 -- .../BackOffice/ContentTypeModelValidator.cs | 2 +- .../ContentTypeModelValidatorBase.cs | 4 ++-- .../BackOffice/DashboardReport.cs | 12 +++++----- .../BackOffice/MediaTypeModelValidator.cs | 2 +- .../BackOffice/MemberTypeModelValidator.cs | 2 +- .../ModelsBuilderDashboardController.cs | 6 ++--- .../Building/Builder.cs | 6 ++--- .../Building/ModelsGenerator.cs | 4 ++-- .../Building/TextBuilder.cs | 2 +- .../Compose/ModelsBuilderComponent.cs | 6 ++--- .../Compose/ModelsBuilderComposer.cs | 4 ++-- .../LiveModelsProvider.cs | 6 ++--- .../ModelsGenerationError.cs | 4 ++-- .../OutOfDateModelsStatus.cs | 4 ++-- .../PureLiveModelFactory.cs | 4 ++-- .../Builders/HostingSettingsBuilder.cs | 6 ++--- .../Builders/ModelsBuilderConfigBuilder.cs | 6 ++--- .../AspNetCoreHostingEnvironment.cs | 2 +- .../UmbracoCoreServiceCollectionExtensions.cs | 9 +++++--- .../AspNet/AspNetHostingEnvironment.cs | 2 +- .../CDF/ClientDependencyComponent.cs | 2 +- 31 files changed, 171 insertions(+), 59 deletions(-) rename src/Umbraco.Core/Configuration/Models/{ModelsBuilderConfig.cs => ModelsBuilderSettings.cs} (84%) create mode 100644 src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidation.cs create mode 100644 src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidation.cs create mode 100644 src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidation.cs diff --git a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs index 00b9ef2181..f58d264658 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs @@ -19,7 +19,11 @@ namespace Umbraco.Core.Configuration.Models public string PreviewBadge { get; set; } = DefaultPreviewBadge; - public string MacroErrors { get; set; } = MacroErrorBehaviour.Inline.ToString(); + // We could bind the enum MacroErrorsBehaviour directly from configuration, but we're doing so + // via this string to allow for validation to occur on start-up that the configured value does + // match one of the enum values. + // Without this it'll fail on first use, and we'd have less control over the error message. + internal string MacroErrors { get; set; } = MacroErrorBehaviour.Inline.ToString(); public MacroErrorBehaviour MacroErrorsBehaviour { diff --git a/src/Umbraco.Core/Configuration/Models/HostingSettings.cs b/src/Umbraco.Core/Configuration/Models/HostingSettings.cs index 0863181922..591d186761 100644 --- a/src/Umbraco.Core/Configuration/Models/HostingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/HostingSettings.cs @@ -1,13 +1,26 @@ -namespace Umbraco.Core.Configuration.Models +using System; + +namespace Umbraco.Core.Configuration.Models { public class HostingSettings { public string ApplicationVirtualPath { get; set; } + // See note on ContentSettings.MacroErrors + internal string LocalTempStorageLocation { get; set; } = LocalTempStorage.Default.ToString(); + /// /// Gets the configuration for the location of temporary files. /// - public LocalTempStorage LocalTempStorageLocation { get; set; } = LocalTempStorage.Default; + public LocalTempStorage LocalTempStorageLocationValue + { + get + { + return Enum.TryParse(LocalTempStorageLocation, true, out var value) + ? value + : LocalTempStorage.Default; + } + } /// /// Gets a value indicating whether umbraco is running in [debug mode]. diff --git a/src/Umbraco.Core/Configuration/Models/ModelsBuilderConfig.cs b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs similarity index 84% rename from src/Umbraco.Core/Configuration/Models/ModelsBuilderConfig.cs rename to src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs index e99557755c..419cfd3bc9 100644 --- a/src/Umbraco.Core/Configuration/Models/ModelsBuilderConfig.cs +++ b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs @@ -1,11 +1,12 @@ -using Umbraco.Configuration; +using System; +using Umbraco.Configuration; namespace Umbraco.Core.Configuration.Models { /// /// Represents the models builder configuration. /// - public class ModelsBuilderConfig + public class ModelsBuilderSettings { public static string DefaultModelsDirectory => "~/App_Data/Models"; @@ -18,10 +19,21 @@ namespace Umbraco.Core.Configuration.Models /// public bool Enable { get; set; } = false; + // See note on ContentSettings.MacroErrors + internal string ModelsMode { get; set; } = Configuration.ModelsMode.Nothing.ToString(); + /// /// Gets the models mode. /// - public ModelsMode ModelsMode { get; set; } = ModelsMode.Nothing; + public ModelsMode ModelsModeValue + { + get + { + return Enum.TryParse(ModelsMode, true, out var value) + ? value + : Configuration.ModelsMode.Nothing; + } + } /// /// Gets the models namespace. @@ -51,7 +63,7 @@ namespace Umbraco.Core.Configuration.Models set { - if (!ModelsMode.IsLive()) + if (!ModelsModeValue.IsLive()) { _flagOutOfDateModels = false; } diff --git a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs index a507f8a62f..8dac35dbee 100644 --- a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs @@ -1,9 +1,13 @@ -using System.Net.Mail; +using System.ComponentModel.DataAnnotations; +using System.Net.Mail; +using Umbraco.Core.Configuration.Models.Validation; namespace Umbraco.Core.Configuration.Models { - public class SmtpSettings + public class SmtpSettings : ValidatableEntryBase { + [Required] + [EmailAddress] public string From { get; set; } public string Host { get; set; } diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs b/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs index 1af1945665..3b0c9c2db8 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs @@ -20,7 +20,7 @@ namespace Umbraco.Core.Configuration.Models.Validation public bool ValidateStringIsOneOfEnumValues(string configPath, string value, Type enumType, out string message) { - var validValues = Enum.GetValues(enumType).OfType().Select(x => x.ToString().ToFirstLowerInvariant()); + var validValues = Enum.GetValues(enumType).OfType().Select(x => x.ToString()); return ValidateStringIsOneOfValidValues(configPath, value, validValues, out message); } @@ -35,5 +35,17 @@ namespace Umbraco.Core.Configuration.Models.Validation message = string.Empty; return true; } + + public bool ValidateOptionalEntry(string configPath, ValidatableEntryBase value, string validationDescription, out string message) + { + if (value != null && !value.IsValid()) + { + message = $"Configuration entry {configPath} contains one or more invalid values. {validationDescription}."; + return false; + } + + message = string.Empty; + return true; + } } } diff --git a/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidation.cs b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidation.cs new file mode 100644 index 0000000000..fa99884347 --- /dev/null +++ b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidation.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; + +namespace Umbraco.Core.Configuration.Models.Validation +{ + public class GlobalSettingsValidation : ConfigurationValidationBase, IValidateOptions + { + public ValidateOptionsResult Validate(string name, GlobalSettings options) + { + if (!ValidateSmtpSetting(options.Smtp, out var message)) + { + return ValidateOptionsResult.Fail(message); + } + + return ValidateOptionsResult.Success; + } + + private bool ValidateSmtpSetting(SmtpSettings value, out string message) + { + return ValidateOptionalEntry("Global:Smtp", value, "A valid From email address is required", out message); + } + } +} diff --git a/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidation.cs b/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidation.cs new file mode 100644 index 0000000000..11ba6e4a2c --- /dev/null +++ b/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidation.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; + +namespace Umbraco.Core.Configuration.Models.Validation +{ + public class HostingSettingsValidation : ConfigurationValidationBase, IValidateOptions + { + public ValidateOptionsResult Validate(string name, HostingSettings options) + { + if (!ValidateLocalTempStorageLocation(options.LocalTempStorageLocation, out var message)) + { + return ValidateOptionsResult.Fail(message); + } + + return ValidateOptionsResult.Success; + } + + private bool ValidateLocalTempStorageLocation(string value, out string message) + { + return ValidateStringIsOneOfEnumValues("Hosting:LocalTempStorageLocation", value, typeof(LocalTempStorage), out message); + } + } +} diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidation.cs b/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidation.cs new file mode 100644 index 0000000000..49351499cd --- /dev/null +++ b/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidation.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; + +namespace Umbraco.Core.Configuration.Models.Validation +{ + public class ModelsBuilderSettingsValidation : ConfigurationValidationBase, IValidateOptions + { + public ValidateOptionsResult Validate(string name, ModelsBuilderSettings options) + { + if (!ValidateModelsMode(options.ModelsMode, out var message)) + { + return ValidateOptionsResult.Fail(message); + } + + return ValidateOptionsResult.Success; + } + + private bool ValidateModelsMode(string value, out string message) + { + return ValidateStringIsOneOfEnumValues("ModelsBuilder:ModelsMode", value, typeof(ModelsMode), out message); + } + } +} diff --git a/src/Umbraco.Core/Configuration/ModelsBuilderConfigExtensions.cs b/src/Umbraco.Core/Configuration/ModelsBuilderConfigExtensions.cs index edf068e16f..ef80796c8b 100644 --- a/src/Umbraco.Core/Configuration/ModelsBuilderConfigExtensions.cs +++ b/src/Umbraco.Core/Configuration/ModelsBuilderConfigExtensions.cs @@ -10,7 +10,7 @@ namespace Umbraco.Core.Configuration { private static string _modelsDirectoryAbsolute = null; - public static string ModelsDirectoryAbsolute(this ModelsBuilderConfig modelsBuilderConfig, IHostingEnvironment hostingEnvironment) + public static string ModelsDirectoryAbsolute(this ModelsBuilderSettings modelsBuilderConfig, IHostingEnvironment hostingEnvironment) { if (_modelsDirectoryAbsolute is null) { diff --git a/src/Umbraco.Core/Constants-Configuration.cs b/src/Umbraco.Core/Constants-Configuration.cs index 86a02affb6..a9b2bab0fb 100644 --- a/src/Umbraco.Core/Constants-Configuration.cs +++ b/src/Umbraco.Core/Constants-Configuration.cs @@ -12,8 +12,6 @@ /// public const string ConfigPrefix = "Umbraco:CMS:"; public const string ConfigSecurityPrefix = ConfigPrefix+"Security:"; - public const string ConfigGlobalPrefix = ConfigPrefix + "Global:"; - public const string ConfigModelsBuilderPrefix = ConfigPrefix+"ModelsBuilder:"; public const string ConfigRuntimeMinification = ConfigPrefix+"RuntimeMinification"; public const string ConfigRuntimeMinificationVersion = ConfigRuntimeMinification+":Version"; } diff --git a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ContentTypeModelValidator.cs b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ContentTypeModelValidator.cs index 5f806883f0..023911d518 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ContentTypeModelValidator.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ContentTypeModelValidator.cs @@ -11,7 +11,7 @@ namespace Umbraco.ModelsBuilder.Embedded.BackOffice // ReSharper disable once UnusedMember.Global - This is typed scanned public class ContentTypeModelValidator : ContentTypeModelValidatorBase { - public ContentTypeModelValidator(IOptions config) : base(config) + public ContentTypeModelValidator(IOptions config) : base(config) { } } diff --git a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ContentTypeModelValidatorBase.cs b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ContentTypeModelValidatorBase.cs index c1684dde7a..0e4cd4f49a 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ContentTypeModelValidatorBase.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ContentTypeModelValidatorBase.cs @@ -14,9 +14,9 @@ namespace Umbraco.ModelsBuilder.Embedded.BackOffice where TModel : ContentTypeSave where TProperty : PropertyTypeBasic { - private readonly IOptions _config; + private readonly IOptions _config; - public ContentTypeModelValidatorBase(IOptions config) + public ContentTypeModelValidatorBase(IOptions config) { _config = config; } diff --git a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/DashboardReport.cs b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/DashboardReport.cs index a0928fafcf..8b792343a3 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/DashboardReport.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/DashboardReport.cs @@ -8,18 +8,18 @@ namespace Umbraco.ModelsBuilder.Embedded.BackOffice { internal class DashboardReport { - private readonly ModelsBuilderConfig _config; + private readonly ModelsBuilderSettings _config; private readonly OutOfDateModelsStatus _outOfDateModels; private readonly ModelsGenerationError _mbErrors; - public DashboardReport(IOptions config, OutOfDateModelsStatus outOfDateModels, ModelsGenerationError mbErrors) + public DashboardReport(IOptions config, OutOfDateModelsStatus outOfDateModels, ModelsGenerationError mbErrors) { _config = config.Value; _outOfDateModels = outOfDateModels; _mbErrors = mbErrors; } - public bool CanGenerate() => _config.ModelsMode.SupportsExplicitGeneration(); + public bool CanGenerate() => _config.ModelsModeValue.SupportsExplicitGeneration(); public bool AreModelsOutOfDate() => _outOfDateModels.IsOutOfDate; @@ -41,13 +41,13 @@ namespace Umbraco.ModelsBuilder.Embedded.BackOffice sb.Append("
    "); sb.Append("
  • The models factory is "); - sb.Append(_config.EnableFactory || _config.ModelsMode == ModelsMode.PureLive + sb.Append(_config.EnableFactory || _config.ModelsModeValue == ModelsMode.PureLive ? "enabled" : "not enabled. Umbraco will not use models"); sb.Append(".
  • "); - sb.Append(_config.ModelsMode != ModelsMode.Nothing - ? $"
  • {_config.ModelsMode} models are enabled.
  • " + sb.Append(_config.ModelsModeValue != ModelsMode.Nothing + ? $"
  • {_config.ModelsModeValue} models are enabled.
  • " : "
  • No models mode is specified: models will not be generated.
  • "); sb.Append($"
  • Models namespace is {_config.ModelsNamespace}.
  • "); diff --git a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MediaTypeModelValidator.cs b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MediaTypeModelValidator.cs index b6cc135e7c..4ccdc1b362 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MediaTypeModelValidator.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MediaTypeModelValidator.cs @@ -11,7 +11,7 @@ namespace Umbraco.ModelsBuilder.Embedded.BackOffice // ReSharper disable once UnusedMember.Global - This is typed scanned public class MediaTypeModelValidator : ContentTypeModelValidatorBase { - public MediaTypeModelValidator(IOptions config) : base(config) + public MediaTypeModelValidator(IOptions config) : base(config) { } } diff --git a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MemberTypeModelValidator.cs b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MemberTypeModelValidator.cs index c930642155..9a735631ff 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MemberTypeModelValidator.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/MemberTypeModelValidator.cs @@ -11,7 +11,7 @@ namespace Umbraco.ModelsBuilder.Embedded.BackOffice // ReSharper disable once UnusedMember.Global - This is typed scanned public class MemberTypeModelValidator : ContentTypeModelValidatorBase { - public MemberTypeModelValidator(IOptions config) : base(config) + public MemberTypeModelValidator(IOptions config) : base(config) { } } diff --git a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs index 1339c79052..0240671c13 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs @@ -23,14 +23,14 @@ namespace Umbraco.ModelsBuilder.Embedded.BackOffice [UmbracoApplicationAuthorize(Core.Constants.Applications.Settings)] public class ModelsBuilderDashboardController : UmbracoAuthorizedJsonController { - private readonly ModelsBuilderConfig _config; + private readonly ModelsBuilderSettings _config; private readonly ModelsGenerator _modelGenerator; private readonly OutOfDateModelsStatus _outOfDateModels; private readonly ModelsGenerationError _mbErrors; private readonly DashboardReport _dashboardReport; private readonly IHostingEnvironment _hostingEnvironment; - public ModelsBuilderDashboardController(IOptions config, ModelsGenerator modelsGenerator, OutOfDateModelsStatus outOfDateModels, ModelsGenerationError mbErrors, IHostingEnvironment hostingEnvironment) + public ModelsBuilderDashboardController(IOptions config, ModelsGenerator modelsGenerator, OutOfDateModelsStatus outOfDateModels, ModelsGenerationError mbErrors, IHostingEnvironment hostingEnvironment) { //_umbracoServices = umbracoServices; _config = config.Value; @@ -51,7 +51,7 @@ namespace Umbraco.ModelsBuilder.Embedded.BackOffice { var config = _config; - if (!config.ModelsMode.SupportsExplicitGeneration()) + if (!config.ModelsModeValue.SupportsExplicitGeneration()) { var result2 = new BuildResult { Success = false, Message = "Models generation is not enabled." }; return Ok(result2); diff --git a/src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs index 4c90234fab..871e221bbc 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs @@ -66,7 +66,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Building /// /// The list of models to generate. /// The models namespace. - protected Builder(ModelsBuilderConfig config, IList typeModels) + protected Builder(ModelsBuilderSettings config, IList typeModels) { _typeModels = typeModels ?? throw new ArgumentNullException(nameof(typeModels)); @@ -83,7 +83,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Building protected Builder() { } - protected ModelsBuilderConfig Config { get; } + protected ModelsBuilderSettings Config { get; } /// /// Prepares generation by processing the result of code parsing. @@ -92,7 +92,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Building { TypeModel.MapModelTypes(_typeModels, ModelsNamespace); - var pureLive = Config.ModelsMode == ModelsMode.PureLive; + var pureLive = Config.ModelsModeValue == ModelsMode.PureLive; // for the first two of these two tests, // always throw, even in purelive: cannot happen unless ppl start fidling with attributes to rename diff --git a/src/Umbraco.ModelsBuilder.Embedded/Building/ModelsGenerator.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/ModelsGenerator.cs index 0348c287cd..bc97118ee4 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/Building/ModelsGenerator.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/Building/ModelsGenerator.cs @@ -11,11 +11,11 @@ namespace Umbraco.ModelsBuilder.Embedded.Building public class ModelsGenerator { private readonly UmbracoServices _umbracoService; - private readonly ModelsBuilderConfig _config; + private readonly ModelsBuilderSettings _config; private readonly OutOfDateModelsStatus _outOfDateModels; private readonly IHostingEnvironment _hostingEnvironment; - public ModelsGenerator(UmbracoServices umbracoService, IOptions config, OutOfDateModelsStatus outOfDateModels, IHostingEnvironment hostingEnvironment) + public ModelsGenerator(UmbracoServices umbracoService, IOptions config, OutOfDateModelsStatus outOfDateModels, IHostingEnvironment hostingEnvironment) { _umbracoService = umbracoService; _config = config.Value; diff --git a/src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs index 607aa129b1..43771eb46a 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs @@ -18,7 +18,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Building /// and the result of code parsing. /// /// The list of models to generate. - public TextBuilder(ModelsBuilderConfig config, IList typeModels) + public TextBuilder(ModelsBuilderSettings config, IList typeModels) : base(config, typeModels) { } diff --git a/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComponent.cs b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComponent.cs index 1088dfb470..b490a9b62f 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComponent.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComponent.cs @@ -21,7 +21,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Compose { internal class ModelsBuilderComponent : IComponent { - private readonly ModelsBuilderConfig _config; + private readonly ModelsBuilderSettings _config; private readonly IShortStringHelper _shortStringHelper; private readonly LiveModelsProvider _liveModelsProvider; private readonly OutOfDateModelsStatus _outOfDateModels; @@ -29,7 +29,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Compose private readonly IUmbracoApplicationLifetime _umbracoApplicationLifetime; private readonly IUmbracoRequestLifetime _umbracoRequestLifetime; - public ModelsBuilderComponent(IOptions config, IShortStringHelper shortStringHelper, + public ModelsBuilderComponent(IOptions config, IShortStringHelper shortStringHelper, LiveModelsProvider liveModelsProvider, OutOfDateModelsStatus outOfDateModels, LinkGenerator linkGenerator, IUmbracoRequestLifetime umbracoRequestLifetime, IUmbracoApplicationLifetime umbracoApplicationLifetime) { @@ -55,7 +55,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Compose if (_config.Enable) FileService.SavingTemplate += FileService_SavingTemplate; - if (_config.ModelsMode.IsLiveNotPure()) + if (_config.ModelsModeValue.IsLiveNotPure()) _liveModelsProvider.Install(); if (_config.FlagOutOfDateModels) diff --git a/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs index fd5472b223..d2ec4a4a09 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs @@ -27,8 +27,8 @@ namespace Umbraco.ModelsBuilder.Embedded.Compose composition.RegisterUnique(factory => { - var config = factory.GetInstance>().Value; - if (config.ModelsMode == ModelsMode.PureLive) + var config = factory.GetInstance>().Value; + if (config.ModelsModeValue == ModelsMode.PureLive) { composition.RegisterUnique(); diff --git a/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs b/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs index 48a79ba953..1161d4879e 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs @@ -20,15 +20,15 @@ namespace Umbraco.ModelsBuilder.Embedded private static Mutex _mutex; private static int _req; private readonly ILogger _logger; - private readonly ModelsBuilderConfig _config; + private readonly ModelsBuilderSettings _config; private readonly ModelsGenerator _modelGenerator; private readonly ModelsGenerationError _mbErrors; private readonly IHostingEnvironment _hostingEnvironment; // we do not manage pure live here - internal bool IsEnabled => _config.ModelsMode.IsLiveNotPure(); + internal bool IsEnabled => _config.ModelsModeValue.IsLiveNotPure(); - public LiveModelsProvider(ILogger logger, IOptions config, ModelsGenerator modelGenerator, ModelsGenerationError mbErrors, IHostingEnvironment hostingEnvironment) + public LiveModelsProvider(ILogger logger, IOptions config, ModelsGenerator modelGenerator, ModelsGenerationError mbErrors, IHostingEnvironment hostingEnvironment) { _logger = logger; _config = config.Value ?? throw new ArgumentNullException(nameof(config)); diff --git a/src/Umbraco.ModelsBuilder.Embedded/ModelsGenerationError.cs b/src/Umbraco.ModelsBuilder.Embedded/ModelsGenerationError.cs index a5911bc9c6..dca2fda0dc 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/ModelsGenerationError.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/ModelsGenerationError.cs @@ -10,10 +10,10 @@ namespace Umbraco.ModelsBuilder.Embedded { public sealed class ModelsGenerationError { - private readonly ModelsBuilderConfig _config; + private readonly ModelsBuilderSettings _config; private readonly IHostingEnvironment _hostingEnvironment; - public ModelsGenerationError(IOptions config, IHostingEnvironment hostingEnvironment) + public ModelsGenerationError(IOptions config, IHostingEnvironment hostingEnvironment) { _config = config.Value; _hostingEnvironment = hostingEnvironment; diff --git a/src/Umbraco.ModelsBuilder.Embedded/OutOfDateModelsStatus.cs b/src/Umbraco.ModelsBuilder.Embedded/OutOfDateModelsStatus.cs index 85d08ee975..92e0604a16 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/OutOfDateModelsStatus.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/OutOfDateModelsStatus.cs @@ -9,10 +9,10 @@ namespace Umbraco.ModelsBuilder.Embedded { public sealed class OutOfDateModelsStatus { - private readonly ModelsBuilderConfig _config; + private readonly ModelsBuilderSettings _config; private readonly IHostingEnvironment _hostingEnvironment; - public OutOfDateModelsStatus(IOptions config, IHostingEnvironment hostingEnvironment) + public OutOfDateModelsStatus(IOptions config, IHostingEnvironment hostingEnvironment) { _config = config.Value; _hostingEnvironment = hostingEnvironment; diff --git a/src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs b/src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs index 596cc9ed26..00c5ec723d 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs @@ -38,7 +38,7 @@ namespace Umbraco.ModelsBuilder.Embedded private static readonly Regex AssemblyVersionRegex = new Regex("AssemblyVersion\\(\"[0-9]+.[0-9]+.[0-9]+.[0-9]+\"\\)", RegexOptions.Compiled); private static readonly string[] OurFiles = { "models.hash", "models.generated.cs", "all.generated.cs", "all.dll.path", "models.err", "Compiled" }; - private readonly ModelsBuilderConfig _config; + private readonly ModelsBuilderSettings _config; private readonly IHostingEnvironment _hostingEnvironment; private readonly IApplicationShutdownRegistry _hostingLifetime; private readonly ModelsGenerationError _errors; @@ -47,7 +47,7 @@ namespace Umbraco.ModelsBuilder.Embedded public PureLiveModelFactory( Lazy umbracoServices, IProfilingLogger logger, - IOptions config, + IOptions config, IHostingEnvironment hostingEnvironment, IApplicationShutdownRegistry hostingLifetime, IPublishedValueFallback publishedValueFallback) diff --git a/src/Umbraco.Tests.Common/Builders/HostingSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/HostingSettingsBuilder.cs index 3e5e1db391..4a2c19aae0 100644 --- a/src/Umbraco.Tests.Common/Builders/HostingSettingsBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/HostingSettingsBuilder.cs @@ -7,7 +7,7 @@ namespace Umbraco.Tests.Common.Builders { private string _applicationVirtualPath; private bool? _debug; - private LocalTempStorage? _localTempStorageLocation; + private string _localTempStorageLocation; public HostingSettingsBuilder WithApplicationVirtualPath(string applicationVirtualPath) { @@ -23,14 +23,14 @@ namespace Umbraco.Tests.Common.Builders public HostingSettingsBuilder WithLocalTempStorageLocation(LocalTempStorage localTempStorageLocation) { - _localTempStorageLocation = localTempStorageLocation; + _localTempStorageLocation = localTempStorageLocation.ToString(); return this; } public override HostingSettings Build() { var debug = _debug ?? false; - var localTempStorageLocation = _localTempStorageLocation ?? LocalTempStorage.Default; + var localTempStorageLocation = _localTempStorageLocation ?? LocalTempStorage.Default.ToString(); var applicationVirtualPath = _applicationVirtualPath ?? null; return new HostingSettings diff --git a/src/Umbraco.Tests.Common/Builders/ModelsBuilderConfigBuilder.cs b/src/Umbraco.Tests.Common/Builders/ModelsBuilderConfigBuilder.cs index 4b94339dc0..d3f428932c 100644 --- a/src/Umbraco.Tests.Common/Builders/ModelsBuilderConfigBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/ModelsBuilderConfigBuilder.cs @@ -2,11 +2,11 @@ using Umbraco.Core.Configuration.Models; namespace Umbraco.Tests.Common.Builders { - public class ModelsBuilderConfigBuilder : BuilderBase + public class ModelsBuilderConfigBuilder : BuilderBase { - public override ModelsBuilderConfig Build() + public override ModelsBuilderSettings Build() { - return new ModelsBuilderConfig(); + return new ModelsBuilderSettings(); } } } diff --git a/src/Umbraco.Web.Common/AspNetCore/AspNetCoreHostingEnvironment.cs b/src/Umbraco.Web.Common/AspNetCore/AspNetCoreHostingEnvironment.cs index ede121a9f7..d5e4a9f258 100644 --- a/src/Umbraco.Web.Common/AspNetCore/AspNetCoreHostingEnvironment.cs +++ b/src/Umbraco.Web.Common/AspNetCore/AspNetCoreHostingEnvironment.cs @@ -45,7 +45,7 @@ namespace Umbraco.Web.Common.AspNetCore if (_localTempPath != null) return _localTempPath; - switch (_hostingSettings.CurrentValue.LocalTempStorageLocation) + switch (_hostingSettings.CurrentValue.LocalTempStorageLocationValue) { case LocalTempStorage.AspNetTemp: diff --git a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs index 09e4c0c82a..2a618ca39b 100644 --- a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs @@ -128,22 +128,25 @@ namespace Umbraco.Extensions if (configuration == null) throw new ArgumentNullException(nameof(configuration)); services.AddSingleton, ContentSettingsValidation>(); + services.AddSingleton, GlobalSettingsValidation>(); + services.AddSingleton, HostingSettingsValidation>(); + services.AddSingleton, ModelsBuilderSettingsValidation>(); services.AddSingleton, RequestHandlerSettingsValidation>(); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ActiveDirectory")); services.Configure(configuration.GetSection("ConnectionStrings"), o => o.BindNonPublicProperties = true); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Content")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Content"), o => o.BindNonPublicProperties = true); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Core:Debug")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ExceptionFilter")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Global")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "HealthChecks")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Hosting")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Hosting"), o => o.BindNonPublicProperties = true); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Imaging")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Examine")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "KeepAlive")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Logging")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigSecurityPrefix + "MemberPassword")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigGlobalPrefix + "ModelsBuilder")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ModelsBuilder"), o => o.BindNonPublicProperties = true); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "NuCache")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "RequestHandler")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Runtime")); diff --git a/src/Umbraco.Web/AspNet/AspNetHostingEnvironment.cs b/src/Umbraco.Web/AspNet/AspNetHostingEnvironment.cs index 2ec6599939..dae6b1ffbe 100644 --- a/src/Umbraco.Web/AspNet/AspNetHostingEnvironment.cs +++ b/src/Umbraco.Web/AspNet/AspNetHostingEnvironment.cs @@ -63,7 +63,7 @@ namespace Umbraco.Web.Hosting if (_localTempPath != null) return _localTempPath; - switch (_hostingSettings.LocalTempStorageLocation) + switch (_hostingSettings.LocalTempStorageLocationValue) { case LocalTempStorage.AspNetTemp: return _localTempPath = System.IO.Path.Combine(HttpRuntime.CodegenDir, "UmbracoData"); diff --git a/src/Umbraco.Web/WebAssets/CDF/ClientDependencyComponent.cs b/src/Umbraco.Web/WebAssets/CDF/ClientDependencyComponent.cs index 47dd0908dd..1f357d65b5 100644 --- a/src/Umbraco.Web/WebAssets/CDF/ClientDependencyComponent.cs +++ b/src/Umbraco.Web/WebAssets/CDF/ClientDependencyComponent.cs @@ -46,7 +46,7 @@ namespace Umbraco.Web.WebAssets.CDF // Now we need to detect if we are running 'Umbraco.Core.LocalTempStorage' as EnvironmentTemp and in that case we want to change the CDF file // location to be there - if (_hostingSettings.LocalTempStorageLocation == LocalTempStorage.EnvironmentTemp) + if (_hostingSettings.LocalTempStorageLocationValue == LocalTempStorage.EnvironmentTemp) { var cachePath = _hostingEnvironment.LocalTempPath; From 41c7f6989a68a9c7e8cca2bf2840308b2da476f9 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Fri, 18 Sep 2020 12:54:17 +0200 Subject: [PATCH 04/17] Made config files alphabetical and aligned spacing. --- src/Umbraco.Web.UI.NetCore/appsettings.Development.json | 2 +- src/Umbraco.Web.UI.NetCore/appsettings.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.NetCore/appsettings.Development.json b/src/Umbraco.Web.UI.NetCore/appsettings.Development.json index 9f81927bdc..31b5202a7a 100644 --- a/src/Umbraco.Web.UI.NetCore/appsettings.Development.json +++ b/src/Umbraco.Web.UI.NetCore/appsettings.Development.json @@ -8,7 +8,7 @@ "Port": "25" } }, - "Hosting":{ + "Hosting": { "Debug": true } } diff --git a/src/Umbraco.Web.UI.NetCore/appsettings.json b/src/Umbraco.Web.UI.NetCore/appsettings.json index 1eb761e1ad..b3dc4dbc8f 100644 --- a/src/Umbraco.Web.UI.NetCore/appsettings.json +++ b/src/Umbraco.Web.UI.NetCore/appsettings.json @@ -24,6 +24,10 @@ "DisableKeepAliveTask": false, "KeepAlivePingUrl": "{umbracoApplicationUrl}/api/keepalive/ping" }, + "ModelsBuilder": { + "ModelsMode": "PureLive", + "Enable": "true" + }, "RequestHandler": { "ConvertUrlsToAscii": "try" }, @@ -54,10 +58,6 @@ }, "Tours": { "EnableTours": true - }, - "ModelsBuilder": { - "ModelsMode": "PureLive", - "Enable": "true" } } } From bae4f2fb538cb695a47ac4a6116404e5b5d9f497 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Fri, 18 Sep 2020 12:54:17 +0200 Subject: [PATCH 05/17] Changed NuCache settings to use a nullable integer. --- src/Umbraco.Core/Configuration/Models/NuCacheSettings.cs | 2 +- src/Umbraco.PublishedCache.NuCache/DataSource/BTree.cs | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Core/Configuration/Models/NuCacheSettings.cs b/src/Umbraco.Core/Configuration/Models/NuCacheSettings.cs index a2bc7d3561..89a726f30a 100644 --- a/src/Umbraco.Core/Configuration/Models/NuCacheSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/NuCacheSettings.cs @@ -2,6 +2,6 @@ { public class NuCacheSettings { - public string BTreeBlockSize { get; set; } + public int? BTreeBlockSize { get; set; } } } diff --git a/src/Umbraco.PublishedCache.NuCache/DataSource/BTree.cs b/src/Umbraco.PublishedCache.NuCache/DataSource/BTree.cs index ae7393a91a..99d0e9da38 100644 --- a/src/Umbraco.PublishedCache.NuCache/DataSource/BTree.cs +++ b/src/Umbraco.PublishedCache.NuCache/DataSource/BTree.cs @@ -45,11 +45,10 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource var blockSize = 4096; var appSetting = settings.BTreeBlockSize; - if (appSetting == null) + if (!appSetting.HasValue) return blockSize; - if (!int.TryParse(appSetting, out blockSize)) - throw new ConfigurationErrorsException($"Invalid block size value \"{appSetting}\": not a number."); + blockSize = appSetting.Value; var bit = 0; for (var i = blockSize; i != 1; i >>= 1) From 8aadbe02d6a8b197315d0397da58f7f82018d7e2 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sun, 20 Sep 2020 23:18:04 +0200 Subject: [PATCH 06/17] Added unit tests for configuration validators. --- ...nBase.cs => ConfigurationValidatorBase.cs} | 2 +- ...idation.cs => ContentSettingsValidator.cs} | 6 +- ...lidation.cs => GlobalSettingsValidator.cs} | 3 +- ...idation.cs => HostingSettingsValidator.cs} | 2 +- ...n.cs => ModelsBuilderSettingsValidator.cs} | 2 +- ....cs => RequestHandlerSettingsValidator.cs} | 2 +- .../Builders/ContentErrorPageBuilder.cs | 65 ++++++++++++++++ .../Builders/ContentImagingSettingsBuilder.cs | 41 ++++++++++ .../Builders/ContentSettingsBuilder.cs | 48 +++++++++++- .../Builders/GlobalSettingsBuilder.cs | 4 - .../Builders/HostingSettingsBuilder.cs | 6 ++ .../ImagingAutoFillUploadFieldBuilder.cs | 73 ++++++++++++++++++ .../Builders/ModelsBuilderSettingsBuilder.cs | 26 +++++++ .../Builders/UserBuilder.cs | 20 ++--- .../ContentSettingsValidatorTests.cs | 74 +++++++++++++++++++ .../GlobalSettingsValidatorTests.cs | 38 ++++++++++ .../HostingSettingsValidatorTests.cs | 28 +++++++ .../ModelsBuilderSettingsValidatorTests.cs | 28 +++++++ .../RequestHandlerSettingsValidatorTests.cs | 28 +++++++ .../Builders/HostingSettingsBuilderTests.cs | 2 +- .../UmbracoCoreServiceCollectionExtensions.cs | 10 +-- 21 files changed, 474 insertions(+), 34 deletions(-) rename src/Umbraco.Core/Configuration/Models/Validation/{ConfigurationValidationBase.cs => ConfigurationValidatorBase.cs} (97%) rename src/Umbraco.Core/Configuration/Models/Validation/{ContentSettingsValidation.cs => ContentSettingsValidator.cs} (90%) rename src/Umbraco.Core/Configuration/Models/Validation/{GlobalSettingsValidation.cs => GlobalSettingsValidator.cs} (85%) rename src/Umbraco.Core/Configuration/Models/Validation/{HostingSettingsValidation.cs => HostingSettingsValidator.cs} (86%) rename src/Umbraco.Core/Configuration/Models/Validation/{ModelsBuilderSettingsValidation.cs => ModelsBuilderSettingsValidator.cs} (84%) rename src/Umbraco.Core/Configuration/Models/Validation/{RequestHandlerSettingsValidation.cs => RequestHandlerSettingsValidator.cs} (85%) create mode 100644 src/Umbraco.Tests.Common/Builders/ContentErrorPageBuilder.cs create mode 100644 src/Umbraco.Tests.Common/Builders/ContentImagingSettingsBuilder.cs create mode 100644 src/Umbraco.Tests.Common/Builders/ImagingAutoFillUploadFieldBuilder.cs create mode 100644 src/Umbraco.Tests.Common/Builders/ModelsBuilderSettingsBuilder.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs b/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidatorBase.cs similarity index 97% rename from src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs rename to src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidatorBase.cs index 3b0c9c2db8..4f69b326eb 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidationBase.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidatorBase.cs @@ -4,7 +4,7 @@ using System.Linq; namespace Umbraco.Core.Configuration.Models.Validation { - public abstract class ConfigurationValidationBase + public abstract class ConfigurationValidatorBase { public bool ValidateStringIsOneOfValidValues(string configPath, string value, IEnumerable validValues, out string message) { diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidation.cs b/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidator.cs similarity index 90% rename from src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidation.cs rename to src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidator.cs index 527dcc4737..f48979cd45 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidation.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidator.cs @@ -1,12 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Generic; using Microsoft.Extensions.Options; using Umbraco.Core.Macros; namespace Umbraco.Core.Configuration.Models.Validation { - public class ContentSettingsValidation : ConfigurationValidationBase, IValidateOptions + public class ContentSettingsValidator : ConfigurationValidatorBase, IValidateOptions { public ValidateOptionsResult Validate(string name, ContentSettings options) { diff --git a/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidation.cs b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs similarity index 85% rename from src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidation.cs rename to src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs index fa99884347..40ecb0bedd 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidation.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs @@ -2,7 +2,8 @@ namespace Umbraco.Core.Configuration.Models.Validation { - public class GlobalSettingsValidation : ConfigurationValidationBase, IValidateOptions + public class GlobalSettingsValidator + : ConfigurationValidatorBase, IValidateOptions { public ValidateOptionsResult Validate(string name, GlobalSettings options) { diff --git a/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidation.cs b/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidator.cs similarity index 86% rename from src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidation.cs rename to src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidator.cs index 11ba6e4a2c..df8e0324c8 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidation.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidator.cs @@ -2,7 +2,7 @@ namespace Umbraco.Core.Configuration.Models.Validation { - public class HostingSettingsValidation : ConfigurationValidationBase, IValidateOptions + public class HostingSettingsValidator : ConfigurationValidatorBase, IValidateOptions { public ValidateOptionsResult Validate(string name, HostingSettings options) { diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidation.cs b/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidator.cs similarity index 84% rename from src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidation.cs rename to src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidator.cs index 49351499cd..cddb3a745a 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidation.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidator.cs @@ -2,7 +2,7 @@ namespace Umbraco.Core.Configuration.Models.Validation { - public class ModelsBuilderSettingsValidation : ConfigurationValidationBase, IValidateOptions + public class ModelsBuilderSettingsValidator : ConfigurationValidatorBase, IValidateOptions { public ValidateOptionsResult Validate(string name, ModelsBuilderSettings options) { diff --git a/src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidation.cs b/src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidator.cs similarity index 85% rename from src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidation.cs rename to src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidator.cs index 022f0289d8..31509d3ebf 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidation.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidator.cs @@ -2,7 +2,7 @@ namespace Umbraco.Core.Configuration.Models.Validation { - public class RequestHandlerSettingsValidation : ConfigurationValidationBase, IValidateOptions + public class RequestHandlerSettingsValidator : ConfigurationValidatorBase, IValidateOptions { public ValidateOptionsResult Validate(string name, RequestHandlerSettings options) { diff --git a/src/Umbraco.Tests.Common/Builders/ContentErrorPageBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentErrorPageBuilder.cs new file mode 100644 index 0000000000..47c4bdfc8c --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/ContentErrorPageBuilder.cs @@ -0,0 +1,65 @@ +using System; +using Umbraco.Core.Configuration.Models; + +namespace Umbraco.Tests.Common.Builders +{ + public class ContentErrorPageBuilder : ContentErrorPageBuilder + { + public ContentErrorPageBuilder() : base(null) + { + } + } + + public class ContentErrorPageBuilder + : ChildBuilderBase + { + private int? _contentId; + private Guid? _contentKey; + private string _contentXPath; + private string _culture; + + public ContentErrorPageBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + public ContentErrorPageBuilder WithContentId(int contentId) + { + _contentId = contentId; + return this; + } + + public ContentErrorPageBuilder WithContentKey(Guid contentKey) + { + _contentKey = contentKey; + return this; + } + + public ContentErrorPageBuilder WithContentXPath(string contentXPath) + { + _contentXPath = contentXPath; + return this; + } + + public ContentErrorPageBuilder WithCulture(string culture) + { + _culture = culture; + return this; + } + + public override ContentErrorPage Build() + { + var contentId = _contentId ?? 0; + var contentKey = _contentKey ?? Guid.Empty; + var contentXPath = _contentXPath ?? string.Empty; + var culture = _culture ?? "en-US"; + + return new ContentErrorPage + { + ContentId = contentId, + ContentKey = contentKey, + ContentXPath = contentXPath, + Culture = culture, + }; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/ContentImagingSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentImagingSettingsBuilder.cs new file mode 100644 index 0000000000..685e60c929 --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/ContentImagingSettingsBuilder.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using System.Linq; +using Umbraco.Core.Configuration.Models; + +namespace Umbraco.Tests.Common.Builders +{ + public class ContentImagingSettingsBuilder : ContentImagingSettingsBuilder + { + public ContentImagingSettingsBuilder() : base(null) + { + } + } + + public class ContentImagingSettingsBuilder + : ChildBuilderBase + { + + private readonly List>> _imagingAutoFillUploadFieldBuilder = new List>>(); + + public ContentImagingSettingsBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + public ImagingAutoFillUploadFieldBuilder> AddAutoFillImageProperty() + { + var builder = new ImagingAutoFillUploadFieldBuilder>(this); + _imagingAutoFillUploadFieldBuilder.Add(builder); + return builder; + } + + public override ContentImagingSettings Build() + { + var imagingAutoFillUploadFields = _imagingAutoFillUploadFieldBuilder.Select(x => x.Build()).ToArray(); + + return new ContentImagingSettings + { + AutoFillImageProperties = imagingAutoFillUploadFields, + }; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/ContentSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentSettingsBuilder.cs index f5fb1fc08f..9e504683d1 100644 --- a/src/Umbraco.Tests.Common/Builders/ContentSettingsBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/ContentSettingsBuilder.cs @@ -1,12 +1,56 @@ +using System.Collections.Generic; +using System.Linq; using Umbraco.Core.Configuration.Models; +using Umbraco.Core.Macros; namespace Umbraco.Tests.Common.Builders { - public class ContentSettingsBuilder : BuilderBase + public class ContentSettingsBuilder : ContentSettingsBuilder { + public ContentSettingsBuilder() : base(null) + { + } + } + + public class ContentSettingsBuilder : ChildBuilderBase + { + private string _macroErrors; + private readonly ContentImagingSettingsBuilder> _contentImagingSettingsBuilder; + private readonly List>> _contentErrorPageBuilders = new List>>(); + + public ContentSettingsBuilder(TParent parentBuilder) : base(parentBuilder) + { + _contentImagingSettingsBuilder = new ContentImagingSettingsBuilder>(this); + _contentErrorPageBuilders = new List>>(); + } + + public ContentImagingSettingsBuilder> AddImaging() => _contentImagingSettingsBuilder; + + public ContentErrorPageBuilder> AddErrorPage() + { + var builder = new ContentErrorPageBuilder>(this); + _contentErrorPageBuilders.Add(builder); + return builder; + } + + public ContentSettingsBuilder WithMacroErrors(string macroErrors) + { + _macroErrors = macroErrors; + return this; + } + public override ContentSettings Build() { - return new ContentSettings(); + var macroErrors = _macroErrors ?? MacroErrorBehaviour.Inline.ToString(); + var contentImagingSettings = _contentImagingSettingsBuilder.Build(); + var contentErrorPages = _contentErrorPageBuilders.Select(x => x.Build()).ToArray(); + + return new ContentSettings + { + MacroErrors = _macroErrors, + Imaging = contentImagingSettings, + Error404Collection = contentErrorPages, + }; } } } diff --git a/src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs index d39bd71d2e..30d1d3182f 100644 --- a/src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs @@ -199,9 +199,5 @@ namespace Umbraco.Tests.Common.Builders NoNodesViewPath = noNodesViewPath, }; } - private string _iconsPath; - - public string IconsPath{ get; set; } - } } diff --git a/src/Umbraco.Tests.Common/Builders/HostingSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/HostingSettingsBuilder.cs index 4a2c19aae0..ac9db21337 100644 --- a/src/Umbraco.Tests.Common/Builders/HostingSettingsBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/HostingSettingsBuilder.cs @@ -27,6 +27,12 @@ namespace Umbraco.Tests.Common.Builders return this; } + public HostingSettingsBuilder WithLocalTempStorageLocation(string localTempStorageLocation) + { + _localTempStorageLocation = localTempStorageLocation; + return this; + } + public override HostingSettings Build() { var debug = _debug ?? false; diff --git a/src/Umbraco.Tests.Common/Builders/ImagingAutoFillUploadFieldBuilder.cs b/src/Umbraco.Tests.Common/Builders/ImagingAutoFillUploadFieldBuilder.cs new file mode 100644 index 0000000000..f6f8383d6a --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/ImagingAutoFillUploadFieldBuilder.cs @@ -0,0 +1,73 @@ +using Umbraco.Core.Configuration.Models; + +namespace Umbraco.Tests.Common.Builders +{ + public class ImagingAutoFillUploadFieldBuilder : ImagingAutoFillUploadFieldBuilder + { + public ImagingAutoFillUploadFieldBuilder() : base(null) + { + } + } + + public class ImagingAutoFillUploadFieldBuilder + : ChildBuilderBase + { + private string _alias; + private string _widthFieldAlias; + private string _heightFieldAlias; + private string _lengthFieldAlias; + private string _extensionFieldAlias; + + public ImagingAutoFillUploadFieldBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + public ImagingAutoFillUploadFieldBuilder WithAlias(string alias) + { + _alias = alias; + return this; + } + + public ImagingAutoFillUploadFieldBuilder WithWidthFieldAlias(string widthFieldAlias) + { + _widthFieldAlias = widthFieldAlias; + return this; + } + + public ImagingAutoFillUploadFieldBuilder WithHeightFieldAlias(string heightFieldAlias) + { + _heightFieldAlias = heightFieldAlias; + return this; + } + + public ImagingAutoFillUploadFieldBuilder WithLengthFieldAlias(string lengthFieldAlias) + { + _lengthFieldAlias = lengthFieldAlias; + return this; + } + + public ImagingAutoFillUploadFieldBuilder WithExtensionFieldAlias(string extensionFieldAlias) + { + _extensionFieldAlias = extensionFieldAlias; + return this; + } + + public override ImagingAutoFillUploadField Build() + { + var alias = _alias ?? "testAlias"; + var widthFieldAlias = _widthFieldAlias ?? "testWidthFieldAlias"; + var heightFieldAlias = _heightFieldAlias ?? "testHeightFieldAlias"; + var lengthFieldAlias = _lengthFieldAlias ?? "testLengthFieldAlias"; + var extensionFieldAlias = _extensionFieldAlias ?? "testExtensionFieldAlias"; + + return new ImagingAutoFillUploadField + { + Alias = alias, + WidthFieldAlias = widthFieldAlias, + HeightFieldAlias = heightFieldAlias, + LengthFieldAlias = lengthFieldAlias, + ExtensionFieldAlias = extensionFieldAlias, + }; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/ModelsBuilderSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ModelsBuilderSettingsBuilder.cs new file mode 100644 index 0000000000..02ab0a0af4 --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/ModelsBuilderSettingsBuilder.cs @@ -0,0 +1,26 @@ +using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.Models; + +namespace Umbraco.Tests.Common.Builders +{ + public class ModelsBuilderSettingsBuilder : BuilderBase + { + private string _modelsMode; + + public ModelsBuilderSettingsBuilder WithModelsMode(string modelsMode) + { + _modelsMode = modelsMode; + return this; + } + + public override ModelsBuilderSettings Build() + { + var modelsMode = _modelsMode ?? ModelsMode.Nothing.ToString(); + + return new ModelsBuilderSettings + { + ModelsMode = modelsMode, + }; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/UserBuilder.cs b/src/Umbraco.Tests.Common/Builders/UserBuilder.cs index 83c036c101..2b76206e3f 100644 --- a/src/Umbraco.Tests.Common/Builders/UserBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/UserBuilder.cs @@ -91,8 +91,6 @@ namespace Umbraco.Tests.Common.Builders return this; } - - public UserBuilder WithSessionTimeout(int sessionTimeout) { _sessionTimeout = sessionTimeout; @@ -122,6 +120,13 @@ namespace Umbraco.Tests.Common.Builders return this; } + public UserGroupBuilder> AddUserGroup() + { + var builder = new UserGroupBuilder>(this); + _userGroupBuilders.Add(builder); + return builder; + } + public override User Build() { var id = _id ?? 0; @@ -175,20 +180,9 @@ namespace Umbraco.Tests.Common.Builders result.AddGroup(readOnlyUserGroup.ToReadOnlyGroup()); } - return result; } - public UserGroupBuilder> AddUserGroup() - { - var builder = new UserGroupBuilder>(this); - - _userGroupBuilders.Add(builder); - - return builder; - } - - int? IWithIdBuilder.Id { get => _id; diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs new file mode 100644 index 0000000000..3fa27dc6b3 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs @@ -0,0 +1,74 @@ +using NUnit.Framework; +using Umbraco.Core.Configuration.Models; +using Umbraco.Core.Configuration.Models.Validation; +using Umbraco.Core.Macros; +using Umbraco.Tests.Common.Builders; + +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation +{ + [TestFixture] + public class ContentSettingsValidationTests + { + [Test] + public void ReturnsSuccessResponseForValidConfiguration() + { + var validator = new ContentSettingsValidator(); + var options = BuildContentSettings(); + var result = validator.Validate("settings", options); + Assert.True(result.Succeeded); + } + + [Test] + public void ReturnsFailResponseForConfigurationWithInvalidMacroErrorsField() + { + var validator = new ContentSettingsValidator(); + var options = BuildContentSettings(macroErrors: "invalid"); + var result = validator.Validate("settings", options); + Assert.False(result.Succeeded); + } + + [Test] + public void ReturnsFailResponseForConfigurationWithInvalidError404CollectionDueToDuplicateId() + { + var validator = new ContentSettingsValidator(); + var options = BuildContentSettings(contentXPath: "/aaa/bbb"); + var result = validator.Validate("settings", options); + Assert.False(result.Succeeded); + } + + [Test] + public void ReturnsFailResponseForConfigurationWithInvalidError404CollectionDueToEmptyCulture() + { + var validator = new ContentSettingsValidator(); + var options = BuildContentSettings(culture: string.Empty); + var result = validator.Validate("settings", options); + Assert.False(result.Succeeded); + } + + [Test] + public void ReturnsFailResponseForConfigurationWithInvalidAutoFillImagePropertiesCollection() + { + var validator = new ContentSettingsValidator(); + var options = BuildContentSettings(culture: string.Empty); + var result = validator.Validate("settings", options); + Assert.False(result.Succeeded); + } + + private static ContentSettings BuildContentSettings(string macroErrors = "inline", string culture = "en-US", string contentXPath = "", string autoFillImagePropertyAlias = "testAlias") + { + return new ContentSettingsBuilder() + .WithMacroErrors(macroErrors) + .AddErrorPage() + .WithCulture(culture) + .WithContentId(1) + .WithContentXPath(contentXPath) + .Done() + .AddImaging() + .AddAutoFillImageProperty() + .WithAlias(autoFillImagePropertyAlias) + .Done() + .Done() + .Build(); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs new file mode 100644 index 0000000000..18f3d8f1b4 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs @@ -0,0 +1,38 @@ +using NUnit.Framework; +using Umbraco.Core.Configuration.Models; +using Umbraco.Core.Configuration.Models.Validation; +using Umbraco.Tests.Common.Builders; + +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation +{ + [TestFixture] + public class GlobalSettingsValidationTests + { + [Test] + public void ReturnsSuccessResponseForValidConfiguration() + { + var validator = new GlobalSettingsValidator(); + var options = BuildGlobalSettings("test@test.com"); + var result = validator.Validate("settings", options); + Assert.True(result.Succeeded); + } + + [Test] + public void ReturnsFailResponseForConfigurationWithInvalidSmtpFromField() + { + var validator = new GlobalSettingsValidator(); + var options = BuildGlobalSettings("invalid"); + var result = validator.Validate("settings", options); + Assert.False(result.Succeeded); + } + + private static GlobalSettings BuildGlobalSettings(string smtpEmail) + { + return new GlobalSettingsBuilder() + .AddSmtpSettings() + .WithFrom(smtpEmail) + .Done() + .Build(); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs new file mode 100644 index 0000000000..105356f2b9 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs @@ -0,0 +1,28 @@ +using NUnit.Framework; +using Umbraco.Core.Configuration.Models.Validation; +using Umbraco.Tests.Common.Builders; + +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation +{ + [TestFixture] + public class HostingSettingsValidatorTests + { + [Test] + public void ReturnsSuccessResponseForValidConfiguration() + { + var validator = new HostingSettingsValidator(); + var options = new HostingSettingsBuilder().Build(); + var result = validator.Validate("settings", options); + Assert.True(result.Succeeded); + } + + [Test] + public void ReturnsFailResponseForConfigurationWithInvalidLocalTempStorageLocationField() + { + var validator = new HostingSettingsValidator(); + var options = new HostingSettingsBuilder().WithLocalTempStorageLocation("invalid").Build(); + var result = validator.Validate("settings", options); + Assert.False(result.Succeeded); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs new file mode 100644 index 0000000000..2fd7b19251 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs @@ -0,0 +1,28 @@ +using NUnit.Framework; +using Umbraco.Core.Configuration.Models.Validation; +using Umbraco.Tests.Common.Builders; + +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation +{ + [TestFixture] + public class ModelsBuilderSettingsValidatorTests + { + [Test] + public void ReturnsSuccessResponseForValidConfiguration() + { + var validator = new ModelsBuilderSettingsValidator(); + var options = new ModelsBuilderSettingsBuilder().Build(); + var result = validator.Validate("settings", options); + Assert.True(result.Succeeded); + } + + [Test] + public void ReturnsFailResponseForConfigurationWithInvalidModelsModeField() + { + var validator = new ModelsBuilderSettingsValidator(); + var options = new ModelsBuilderSettingsBuilder().WithModelsMode("invalid").Build(); + var result = validator.Validate("settings", options); + Assert.False(result.Succeeded); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs new file mode 100644 index 0000000000..b19ec120d0 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs @@ -0,0 +1,28 @@ +using NUnit.Framework; +using Umbraco.Core.Configuration.Models.Validation; +using Umbraco.Tests.Common.Builders; + +namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation +{ + [TestFixture] + public class RequestHandlerSettingsValidatorTests + { + [Test] + public void ReturnsSuccessResponseForValidConfiguration() + { + var validator = new RequestHandlerSettingsValidator(); + var options = new RequestHandlerSettingsBuilder().Build(); + var result = validator.Validate("settings", options); + Assert.True(result.Succeeded); + } + + [Test] + public void ReturnsFailResponseForConfigurationWithInvalidConvertUrlsToAsciiField() + { + var validator = new RequestHandlerSettingsValidator(); + var options = new RequestHandlerSettingsBuilder().WithConvertUrlsToAscii("invalid").Build(); + var result = validator.Validate("settings", options); + Assert.False(result.Succeeded); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/HostingSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/HostingSettingsBuilderTests.cs index 377e143b97..aebe225ac8 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/HostingSettingsBuilderTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/HostingSettingsBuilderTests.cs @@ -24,7 +24,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders // Assert Assert.AreEqual(debugMode, hostingSettings.Debug); - Assert.AreEqual(localTempStorageLocation, hostingSettings.LocalTempStorageLocation); + Assert.AreEqual(localTempStorageLocation, hostingSettings.LocalTempStorageLocationValue); } } } diff --git a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs index 2a618ca39b..83f123b25b 100644 --- a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs @@ -127,11 +127,11 @@ namespace Umbraco.Extensions { if (configuration == null) throw new ArgumentNullException(nameof(configuration)); - services.AddSingleton, ContentSettingsValidation>(); - services.AddSingleton, GlobalSettingsValidation>(); - services.AddSingleton, HostingSettingsValidation>(); - services.AddSingleton, ModelsBuilderSettingsValidation>(); - services.AddSingleton, RequestHandlerSettingsValidation>(); + services.AddSingleton, ContentSettingsValidator>(); + services.AddSingleton, GlobalSettingsValidator>(); + services.AddSingleton, HostingSettingsValidator>(); + services.AddSingleton, ModelsBuilderSettingsValidator>(); + services.AddSingleton, RequestHandlerSettingsValidator>(); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ActiveDirectory")); services.Configure(configuration.GetSection("ConnectionStrings"), o => o.BindNonPublicProperties = true); From d5d6082d078233e95dd59bddfe33b76c57c9d497 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sun, 20 Sep 2020 23:22:43 +0200 Subject: [PATCH 07/17] Moved configuration settings builders into own folder. --- .../ConnectionStringsBuilder.cs | 0 .../ContentErrorPageBuilder.cs | 0 .../ContentImagingSettingsBuilder.cs | 0 .../ContentSettingsBuilder.cs | 0 .../CoreDebugSettingsBuilder.cs | 0 .../GlobalSettingsBuilder.cs | 0 .../HostingSettingsBuilder.cs | 0 .../ImagingAutoFillUploadFieldBuilder.cs | 0 .../ModelsBuilderSettingsBuilder.cs | 0 .../NuCacheSettingsBuilder.cs | 0 .../RequestHandlerSettingsBuilder.cs | 0 .../SmtpSettingsBuilder.cs | 0 .../UserPasswordConfigurationSettingsBuilder.cs | 0 .../WebRoutingSettingsBuilder.cs | 0 .../Builders/ModelsBuilderConfigBuilder.cs | 12 ------------ .../BuilderTests.cs | 16 +++++++--------- .../StringExtensions.cs | 2 +- .../UmbracoApplicationTests.cs | 2 +- .../ConnectionStringsBuilderTests.cs | 0 .../CoreDebugSettingsBuilderTests.cs | 0 .../HostingSettingsBuilderTests.cs | 0 .../RequestHandlerSettingsBuilderTests.cs | 0 .../WebRoutingSettingsBuilderTests.cs | 0 23 files changed, 9 insertions(+), 23 deletions(-) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/ConnectionStringsBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/ContentErrorPageBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/ContentImagingSettingsBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/ContentSettingsBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/CoreDebugSettingsBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/GlobalSettingsBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/HostingSettingsBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/ImagingAutoFillUploadFieldBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/ModelsBuilderSettingsBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/NuCacheSettingsBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/RequestHandlerSettingsBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/SmtpSettingsBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/UserPasswordConfigurationSettingsBuilder.cs (100%) rename src/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/WebRoutingSettingsBuilder.cs (100%) delete mode 100644 src/Umbraco.Tests.Common/Builders/ModelsBuilderConfigBuilder.cs rename src/Umbraco.Tests.UnitTests/{Umbraco.Tests.Common/ModelsBuilder => Umbraco.ModelsBuilder.Embedded}/BuilderTests.cs (97%) rename src/Umbraco.Tests.UnitTests/{Umbraco.Tests.Common/ModelsBuilder => Umbraco.ModelsBuilder.Embedded}/StringExtensions.cs (71%) rename src/Umbraco.Tests.UnitTests/{Umbraco.Tests.Common/ModelsBuilder => Umbraco.ModelsBuilder.Embedded}/UmbracoApplicationTests.cs (97%) rename src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/ConnectionStringsBuilderTests.cs (100%) rename src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/CoreDebugSettingsBuilderTests.cs (100%) rename src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/HostingSettingsBuilderTests.cs (100%) rename src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/RequestHandlerSettingsBuilderTests.cs (100%) rename src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/{ => ConfigurationModelBuilders}/WebRoutingSettingsBuilderTests.cs (100%) diff --git a/src/Umbraco.Tests.Common/Builders/ConnectionStringsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/ConnectionStringsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/ContentErrorPageBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentErrorPageBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/ContentErrorPageBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentErrorPageBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/ContentImagingSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentImagingSettingsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/ContentImagingSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentImagingSettingsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/ContentSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/ContentSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/CoreDebugSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/CoreDebugSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/HostingSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/HostingSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/ImagingAutoFillUploadFieldBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ImagingAutoFillUploadFieldBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/ImagingAutoFillUploadFieldBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ImagingAutoFillUploadFieldBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/ModelsBuilderSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/ModelsBuilderSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/NuCacheSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/NuCacheSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/RequestHandlerSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/RequestHandlerSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/SmtpSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/SmtpSettingsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/SmtpSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/SmtpSettingsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/UserPasswordConfigurationSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/UserPasswordConfigurationSettingsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/UserPasswordConfigurationSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/UserPasswordConfigurationSettingsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/WebRoutingSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Common/Builders/WebRoutingSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilder.cs diff --git a/src/Umbraco.Tests.Common/Builders/ModelsBuilderConfigBuilder.cs b/src/Umbraco.Tests.Common/Builders/ModelsBuilderConfigBuilder.cs deleted file mode 100644 index d3f428932c..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ModelsBuilderConfigBuilder.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Umbraco.Core.Configuration.Models; - -namespace Umbraco.Tests.Common.Builders -{ - public class ModelsBuilderConfigBuilder : BuilderBase - { - public override ModelsBuilderSettings Build() - { - return new ModelsBuilderSettings(); - } - } -} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/ModelsBuilder/BuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs similarity index 97% rename from src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/ModelsBuilder/BuilderTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs index f185a56868..dc1d596c5f 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/ModelsBuilder/BuilderTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs @@ -2,15 +2,13 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using Moq; using NUnit.Framework; -using Umbraco.Core.Configuration; using Umbraco.Core.Models.PublishedContent; using Umbraco.ModelsBuilder.Embedded; using Umbraco.ModelsBuilder.Embedded.Building; using Umbraco.Tests.Common.Builders; -namespace Umbraco.Tests.ModelsBuilder +namespace Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded { [TestFixture] public class BuilderTests @@ -43,7 +41,7 @@ namespace Umbraco.Tests.ModelsBuilder { }; - var modelsBuilderConfig = new ModelsBuilderConfigBuilder().Build(); + var modelsBuilderConfig = new ModelsBuilderSettingsBuilder().Build(); var builder = new TextBuilder(modelsBuilderConfig, types); var btypes = builder.TypeModels; @@ -154,7 +152,7 @@ namespace Umbraco.Web.PublishedModels " } }; - var modelsBuilderConfig = new ModelsBuilderConfigBuilder().Build(); + var modelsBuilderConfig = new ModelsBuilderSettingsBuilder().Build(); var builder = new TextBuilder(modelsBuilderConfig, types); var btypes = builder.TypeModels; @@ -252,7 +250,7 @@ namespace Umbraco.Web.PublishedModels { Alias = "prop2", ClrName = "Prop2", - ModelClrType = typeof(global::System.Text.StringBuilder), + ModelClrType = typeof(StringBuilder), }); type1.Properties.Add(new PropertyModel { @@ -266,7 +264,7 @@ namespace Umbraco.Web.PublishedModels { }; - var modelsBuilderConfig = new ModelsBuilderConfigBuilder().Build(); + var modelsBuilderConfig = new ModelsBuilderSettingsBuilder().Build(); var builder = new TextBuilder(modelsBuilderConfig, types); builder.ModelsNamespace = "Umbraco.ModelsBuilder.Models"; // forces conflict with Umbraco.ModelsBuilder.Umbraco var btypes = builder.TypeModels; @@ -424,14 +422,14 @@ namespace Umbraco.Web.PublishedModels public class Class1 { } } -// make it public to be ambiguous (see above) + // make it public to be ambiguous (see above) public class ASCIIEncoding { // can we handle nested types? public class Nested { } } - class BuilderTestsClass1 {} + class BuilderTestsClass1 { } public class System { } } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/ModelsBuilder/StringExtensions.cs b/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/StringExtensions.cs similarity index 71% rename from src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/ModelsBuilder/StringExtensions.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/StringExtensions.cs index 361d104911..2afcd4f471 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/ModelsBuilder/StringExtensions.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/StringExtensions.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Tests.ModelsBuilder +namespace Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded { public static class StringExtensions { diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/ModelsBuilder/UmbracoApplicationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/UmbracoApplicationTests.cs similarity index 97% rename from src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/ModelsBuilder/UmbracoApplicationTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/UmbracoApplicationTests.cs index 4d2ae0e6c6..25d1d9f1f9 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/ModelsBuilder/UmbracoApplicationTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/UmbracoApplicationTests.cs @@ -4,7 +4,7 @@ using NUnit.Framework; using Umbraco.ModelsBuilder.Embedded; using Umbraco.ModelsBuilder.Embedded.Building; -namespace Umbraco.Tests.ModelsBuilder +namespace Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded { [TestFixture] public class UmbracoApplicationTests diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConnectionStringsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilderTests.cs similarity index 100% rename from src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConnectionStringsBuilderTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilderTests.cs diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/CoreDebugSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilderTests.cs similarity index 100% rename from src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/CoreDebugSettingsBuilderTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilderTests.cs diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/HostingSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilderTests.cs similarity index 100% rename from src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/HostingSettingsBuilderTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilderTests.cs diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/RequestHandlerSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilderTests.cs similarity index 100% rename from src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/RequestHandlerSettingsBuilderTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilderTests.cs diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/WebRoutingSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilderTests.cs similarity index 100% rename from src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/WebRoutingSettingsBuilderTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilderTests.cs From d55b54ce49308af366ba46a2aeefaf11915142a6 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 21 Sep 2020 08:44:11 +0200 Subject: [PATCH 08/17] Added unit tests for introduced unit test configuration setting builders. --- .../Configuration/Models/SmtpSettings.cs | 16 ++- .../Validation/GlobalSettingsValidator.cs | 6 +- .../Users/EmailSender.cs | 2 +- .../NuCacheSettingsBuilder.cs | 15 ++- .../SmtpSettingsBuilder.cs | 14 ++- .../ContentSettingsValidatorTests.cs | 10 +- .../GlobalSettingsValidatorTests.cs | 20 +++- .../HostingSettingsValidatorTests.cs | 4 +- .../ModelsBuilderSettingsValidatorTests.cs | 4 +- .../RequestHandlerSettingsValidatorTests.cs | 4 +- .../ContentSettingsBuilderTests.cs | 65 +++++++++++ .../GlobalSettingsBuilderTests.cs | 104 ++++++++++++++++++ .../ModelsBuilderSettingsBuilderTests.cs | 27 +++++ .../NuCacheSettingsBuilderTests.cs | 26 +++++ .../UmbracoCoreServiceCollectionExtensions.cs | 2 +- 15 files changed, 292 insertions(+), 27 deletions(-) create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilderTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilderTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilderTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilderTests.cs diff --git a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs index 8dac35dbee..c68b0f5a97 100644 --- a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs @@ -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(DeliveryMethod, true, out var value) + ? value + : SmtpDeliveryMethod.Network; + } + } public string Username { get; set; } diff --git a/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs index 40ecb0bedd..3599c1af4d 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs @@ -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); } } } diff --git a/src/Umbraco.Infrastructure/Users/EmailSender.cs b/src/Umbraco.Infrastructure/Users/EmailSender.cs index c45a9af0d3..0aa7d12181 100644 --- a/src/Umbraco.Infrastructure/Users/EmailSender.cs +++ b/src/Umbraco.Infrastructure/Users/EmailSender.cs @@ -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); } diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilder.cs index 35d5c66e4a..53e40c47fa 100644 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilder.cs @@ -4,9 +4,22 @@ namespace Umbraco.Tests.Common.Builders { public class NuCacheSettingsBuilder : BuilderBase { + 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 + }; } } } diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/SmtpSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/SmtpSettingsBuilder.cs index f979197e4c..34ffcd316e 100644 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/SmtpSettingsBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/SmtpSettingsBuilder.cs @@ -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 WithPost(int port) + public SmtpSettingsBuilder WithPort(int port) { _port = port; return this; @@ -61,19 +61,25 @@ namespace Umbraco.Tests.Common.Builders return this; } - public SmtpSettingsBuilder WithDeliveryMethod(SmtpDeliveryMethod deliveryMethod) + public SmtpSettingsBuilder WithDeliveryMethod(string deliveryMethod) { _deliveryMethod = deliveryMethod; return this; } + public SmtpSettingsBuilder 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; diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs index 3fa27dc6b3..6d8fd8754f 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs @@ -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); diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs index 18f3d8f1b4..b055c626c7 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs @@ -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(); } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs index 105356f2b9..eec97947f9 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs @@ -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(); diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs index 2fd7b19251..9388dedcb2 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs @@ -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(); diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs index b19ec120d0..4548d95ccf 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs @@ -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(); diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilderTests.cs new file mode 100644 index 0000000000..a9c6dac1e7 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilderTests.cs @@ -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); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilderTests.cs new file mode 100644 index 0000000000..350572153f --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilderTests.cs @@ -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); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilderTests.cs new file mode 100644 index 0000000000..d3a388bbb6 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilderTests.cs @@ -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); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilderTests.cs new file mode 100644 index 0000000000..258a845f70 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilderTests.cs @@ -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); + } + } +} diff --git a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs index 83f123b25b..cba7c4fcb2 100644 --- a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs @@ -138,7 +138,7 @@ namespace Umbraco.Extensions services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Content"), o => o.BindNonPublicProperties = true); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Core:Debug")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ExceptionFilter")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Global")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Global"), o => o.BindNonPublicProperties = true); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "HealthChecks")); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Hosting"), o => o.BindNonPublicProperties = true); services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Imaging")); From 309d39a34f9cd2f18a82dccc38db8746c90862a5 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 21 Sep 2020 08:49:41 +0200 Subject: [PATCH 09/17] Set default models builder config to nothing now have fixed issue that prevented it loading (as previous value of pure live currently erroring). --- src/Umbraco.Web.UI.NetCore/appsettings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.NetCore/appsettings.json b/src/Umbraco.Web.UI.NetCore/appsettings.json index b3dc4dbc8f..170a5114be 100644 --- a/src/Umbraco.Web.UI.NetCore/appsettings.json +++ b/src/Umbraco.Web.UI.NetCore/appsettings.json @@ -25,7 +25,7 @@ "KeepAlivePingUrl": "{umbracoApplicationUrl}/api/keepalive/ping" }, "ModelsBuilder": { - "ModelsMode": "PureLive", + "ModelsMode": "Nothing", "Enable": "true" }, "RequestHandler": { From 903e9649251672e465fff05a556201e95efe440e Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 21 Sep 2020 08:50:40 +0200 Subject: [PATCH 10/17] Set default value for SmtpSettings DeliveryMethod configuration. --- src/Umbraco.Core/Configuration/Models/SmtpSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs index c68b0f5a97..b7be1404c5 100644 --- a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs @@ -18,7 +18,7 @@ namespace Umbraco.Core.Configuration.Models public string PickupDirectoryLocation { get; set; } // See notes on ContentSettings.MacroErrors - internal string DeliveryMethod { get; set; } + internal string DeliveryMethod { get; set; } = SmtpDeliveryMethod.Network.ToString(); public SmtpDeliveryMethod DeliveryMethodValue { From e032af5b06a838ed8634a4eb9b93c9e3591b5a3f Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 21 Sep 2020 10:04:34 +0200 Subject: [PATCH 11/17] Fixed failing tests. --- .../Validation/GlobalSettingsValidator.cs | 2 +- .../BuilderTests.cs | 32 +++++++++---------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs index 3599c1af4d..d760512555 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs @@ -19,7 +19,7 @@ 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) && - ValidateStringIsOneOfEnumValues("Global:Smtp:DeliveryMethod", value.DeliveryMethod, typeof(SmtpDeliveryMethod), out message); + (value == null || ValidateStringIsOneOfEnumValues("Global:Smtp:DeliveryMethod", value.DeliveryMethod, typeof(SmtpDeliveryMethod), out message)); } } } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs index dc1d596c5f..afa4b543ca 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs @@ -283,8 +283,8 @@ namespace Umbraco.Web.PublishedModels [TestCase("int", typeof(int))] [TestCase("global::System.Collections.Generic.IEnumerable", typeof(IEnumerable))] - [TestCase("global::Umbraco.Tests.ModelsBuilder.BuilderTestsClass1", typeof(BuilderTestsClass1))] - [TestCase("global::Umbraco.Tests.ModelsBuilder.BuilderTests.Class1", typeof(Class1))] + [TestCase("global::Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded.BuilderTestsClass1", typeof(BuilderTestsClass1))] + [TestCase("global::Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded.BuilderTests.Class1", typeof(Class1))] public void WriteClrType(string expected, Type input) { // note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true @@ -299,15 +299,15 @@ namespace Umbraco.Web.PublishedModels [TestCase("int", typeof(int))] [TestCase("global::System.Collections.Generic.IEnumerable", typeof(IEnumerable))] - [TestCase("global::Umbraco.Tests.ModelsBuilder.BuilderTestsClass1", typeof(BuilderTestsClass1))] - [TestCase("global::Umbraco.Tests.ModelsBuilder.BuilderTests.Class1", typeof(Class1))] + [TestCase("global::Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded.BuilderTestsClass1", typeof(BuilderTestsClass1))] + [TestCase("global::Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded.BuilderTests.Class1", typeof(Class1))] public void WriteClrTypeUsing(string expected, Type input) { // note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true // which means global:: syntax will be applied to most things var builder = new TextBuilder(); - builder.Using.Add("Umbraco.Tests.ModelsBuilder"); + builder.Using.Add("Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder"); builder.ModelsNamespaceForTests = "ModelsNamespace"; var sb = new StringBuilder(); builder.WriteClrType(sb, input); @@ -319,7 +319,7 @@ namespace Umbraco.Web.PublishedModels { var builder = new TextBuilder(); builder.Using.Add("System.Text"); - builder.ModelsNamespaceForTests = "Umbraco.Tests.ModelsBuilder.Models"; + builder.ModelsNamespaceForTests = "Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Models"; var sb = new StringBuilder(); builder.WriteClrType(sb, typeof(StringBuilder)); @@ -333,7 +333,7 @@ namespace Umbraco.Web.PublishedModels public void WriteClrTypeAnother_WithoutUsing() { var builder = new TextBuilder(); - builder.ModelsNamespaceForTests = "Umbraco.Tests.ModelsBuilder.Models"; + builder.ModelsNamespaceForTests = "Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Models"; var sb = new StringBuilder(); builder.WriteClrType(sb, typeof(StringBuilder)); Assert.AreEqual("global::System.Text.StringBuilder", sb.ToString()); @@ -344,7 +344,7 @@ namespace Umbraco.Web.PublishedModels { var builder = new TextBuilder(); builder.Using.Add("System.Text"); - builder.Using.Add("Umbraco.Tests.ModelsBuilder"); + builder.Using.Add("Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded"); builder.ModelsNamespaceForTests = "SomeRandomNamespace"; var sb = new StringBuilder(); builder.WriteClrType(sb, typeof(global::System.Text.ASCIIEncoding)); @@ -360,7 +360,7 @@ namespace Umbraco.Web.PublishedModels { var builder = new TextBuilder(); builder.Using.Add("System.Text"); - builder.Using.Add("Umbraco.Tests.ModelsBuilder"); + builder.Using.Add("Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded"); builder.ModelsNamespaceForTests = "SomeBorkedNamespace"; var sb = new StringBuilder(); builder.WriteClrType(sb, typeof(global::System.Text.ASCIIEncoding)); @@ -376,7 +376,7 @@ namespace Umbraco.Web.PublishedModels { var builder = new TextBuilder(); builder.Using.Add("System.Text"); - builder.Using.Add("Umbraco.Tests.ModelsBuilder"); + builder.Using.Add("Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded"); builder.ModelsNamespaceForTests = "SomeRandomNamespace"; var sb = new StringBuilder(); builder.WriteClrType(sb, typeof(ASCIIEncoding)); @@ -384,7 +384,7 @@ namespace Umbraco.Web.PublishedModels // note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true // which means global:: syntax will be applied to most things - Assert.AreEqual("global::Umbraco.Tests.ModelsBuilder.ASCIIEncoding", sb.ToString()); + Assert.AreEqual("global::Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded.ASCIIEncoding", sb.ToString()); } [Test] @@ -392,15 +392,15 @@ namespace Umbraco.Web.PublishedModels { var builder = new TextBuilder(); builder.Using.Add("System.Text"); - builder.Using.Add("Umbraco.Tests.ModelsBuilder"); - builder.ModelsNamespaceForTests = "Umbraco.Tests.ModelsBuilder.Models"; + builder.Using.Add("Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded"); + builder.ModelsNamespaceForTests = "Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Models"; var sb = new StringBuilder(); builder.WriteClrType(sb, typeof(ASCIIEncoding)); // note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true // which means global:: syntax will be applied to most things - Assert.AreEqual("global::Umbraco.Tests.ModelsBuilder.ASCIIEncoding", sb.ToString()); + Assert.AreEqual("global::Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded.ASCIIEncoding", sb.ToString()); } [Test] @@ -408,7 +408,7 @@ namespace Umbraco.Web.PublishedModels { var builder = new TextBuilder(); builder.Using.Add("System.Text"); - builder.Using.Add("Umbraco.Tests.ModelsBuilder"); + builder.Using.Add("Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded"); builder.ModelsNamespaceForTests = "SomeRandomNamespace"; var sb = new StringBuilder(); builder.WriteClrType(sb, typeof(ASCIIEncoding.Nested)); @@ -416,7 +416,7 @@ namespace Umbraco.Web.PublishedModels // note - these assertions differ from the original tests in MB because in the embedded version, the result of Builder.IsAmbiguousSymbol is always true // which means global:: syntax will be applied to most things - Assert.AreEqual("global::Umbraco.Tests.ModelsBuilder.ASCIIEncoding.Nested", sb.ToString()); + Assert.AreEqual("global::Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded.ASCIIEncoding.Nested", sb.ToString()); } public class Class1 { } From cce091de7485fa2b9a33d7aed4952301c0e283bd Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 21 Sep 2020 12:04:30 +0200 Subject: [PATCH 12/17] Throw exception on unexpected failure of creation on enum value from configuration, rather than falling back to a default. This shouldn't happen in practice due to the configuration validation (e.g. by ContentSettingsValidator), so any failure of parsing here should be considered an exception. --- src/Umbraco.Core/Configuration/Models/ContentSettings.cs | 5 ++++- src/Umbraco.Core/Configuration/Models/HostingSettings.cs | 5 ++++- .../Configuration/Models/ModelsBuilderSettings.cs | 5 ++++- src/Umbraco.Core/Configuration/Models/SmtpSettings.cs | 5 ++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs index f58d264658..32c4cc120d 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Umbraco.Core.Configuration.Models.Validation; using Umbraco.Core.Macros; namespace Umbraco.Core.Configuration.Models @@ -31,7 +32,9 @@ namespace Umbraco.Core.Configuration.Models { return Enum.TryParse(MacroErrors, true, out var value) ? value - : MacroErrorBehaviour.Inline; + : throw new InvalidOperationException( + $"Parsing of {nameof(MacroErrors)} field value of {MacroErrors} was not recognised as a valid value of the enum {nameof(MacroErrorBehaviour)}. " + + $"This state shouldn't have been reached as if the configuration contains an invalid valie it should be caught by {nameof(ContentSettingsValidator)}."); } } diff --git a/src/Umbraco.Core/Configuration/Models/HostingSettings.cs b/src/Umbraco.Core/Configuration/Models/HostingSettings.cs index 591d186761..1cd1d96e8e 100644 --- a/src/Umbraco.Core/Configuration/Models/HostingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/HostingSettings.cs @@ -1,4 +1,5 @@ using System; +using Umbraco.Core.Configuration.Models.Validation; namespace Umbraco.Core.Configuration.Models { @@ -18,7 +19,9 @@ namespace Umbraco.Core.Configuration.Models { return Enum.TryParse(LocalTempStorageLocation, true, out var value) ? value - : LocalTempStorage.Default; + : throw new InvalidOperationException( + $"Parsing of {nameof(LocalTempStorageLocation)} field value of {LocalTempStorageLocation} was not recognised as a valid value of the enum {nameof(LocalTempStorage)}. " + + $"This state shouldn't have been reached as if the configuration contains an invalid valie it should be caught by {nameof(HostingSettingsValidator)}."); } } diff --git a/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs index 419cfd3bc9..1f0e6612df 100644 --- a/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs @@ -1,5 +1,6 @@ using System; using Umbraco.Configuration; +using Umbraco.Core.Configuration.Models.Validation; namespace Umbraco.Core.Configuration.Models { @@ -31,7 +32,9 @@ namespace Umbraco.Core.Configuration.Models { return Enum.TryParse(ModelsMode, true, out var value) ? value - : Configuration.ModelsMode.Nothing; + : throw new InvalidOperationException( + $"Parsing of {nameof(ModelsMode)} field value of {ModelsMode} was not recognised as a valid value of the enum {nameof(ModelsMode)}. " + + $"This state shouldn't have been reached as if the configuration contains an invalid valie it should be caught by {nameof(ModelsBuilderSettingsValidator)}."); } } diff --git a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs index b7be1404c5..6ac417517f 100644 --- a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs @@ -26,7 +26,10 @@ namespace Umbraco.Core.Configuration.Models { return Enum.TryParse(DeliveryMethod, true, out var value) ? value - : SmtpDeliveryMethod.Network; + : throw new InvalidOperationException( + $"Parsing of {nameof(DeliveryMethod)} field value of {DeliveryMethod} was not recognised as a valid value of the enum {nameof(SmtpDeliveryMethod)}. " + + $"This state shouldn't have been reached as if the configuration contains an invalid valie it should be caught by {nameof(GlobalSettingsValidator)}."); + } } From 1a59d6a978b3fd59d434bee54767b2e0e27f2ef9 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 21 Sep 2020 16:23:12 +0200 Subject: [PATCH 13/17] Created constants for all configuration sections and used this and nameof expressions for building up configuration validation error messages. --- .../Validation/ContentSettingsValidator.cs | 6 +-- .../Validation/GlobalSettingsValidator.cs | 2 +- .../Validation/HostingSettingsValidator.cs | 2 +- .../ModelsBuilderSettingsValidator.cs | 2 +- .../RequestHandlerSettingsValidator.cs | 2 +- src/Umbraco.Core/Constants-Configuration.cs | 27 ++++++++++-- .../ContentSettingsValidatorTests.cs | 1 - .../UmbracoCoreServiceCollectionExtensions.cs | 42 +++++++++---------- 8 files changed, 52 insertions(+), 32 deletions(-) diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidator.cs b/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidator.cs index f48979cd45..05835f5357 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidator.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidator.cs @@ -29,17 +29,17 @@ namespace Umbraco.Core.Configuration.Models.Validation private bool ValidateMacroErrors(string value, out string message) { - return ValidateStringIsOneOfEnumValues("Content:MacroErrors", value, typeof(MacroErrorBehaviour), out message); + return ValidateStringIsOneOfEnumValues($"{Constants.Configuration.ConfigContent}:{nameof(ContentSettings.MacroErrors)}", value, typeof(MacroErrorBehaviour), out message); } private bool ValidateError404Collection(IEnumerable values, out string message) { - return ValidateCollection("Content:Error404Collection", values, "Culture and one and only one of ContentId, ContentKey and ContentXPath must be specified for each entry", out message); + return ValidateCollection($"{Constants.Configuration.ConfigContent}:{nameof(ContentSettings.Error404Collection)}", values, "Culture and one and only one of ContentId, ContentKey and ContentXPath must be specified for each entry", out message); } private bool ValidateAutoFillImageProperties(IEnumerable values, out string message) { - return ValidateCollection("Content:Imaging:AutoFillImageProperties", values, "Alias, WidthFieldAlias, HeightFieldAlias, LengthFieldAlias and ExtensionFieldAlias must be specified for each entry", out message); + return ValidateCollection($"{Constants.Configuration.ConfigContent}:{nameof(ContentSettings.Imaging)}:{nameof(ContentSettings.Imaging.AutoFillImageProperties)}", values, "Alias, WidthFieldAlias, HeightFieldAlias, LengthFieldAlias and ExtensionFieldAlias must be specified for each entry", out message); } } } diff --git a/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs index d760512555..b178126821 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs @@ -18,7 +18,7 @@ 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($"{Constants.Configuration.ConfigGlobal}:{nameof(GlobalSettings.Smtp)}", value, "A valid From email address is required", out message) && (value == null || ValidateStringIsOneOfEnumValues("Global:Smtp:DeliveryMethod", value.DeliveryMethod, typeof(SmtpDeliveryMethod), out message)); } } diff --git a/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidator.cs b/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidator.cs index df8e0324c8..b035a5318b 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidator.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidator.cs @@ -16,7 +16,7 @@ namespace Umbraco.Core.Configuration.Models.Validation private bool ValidateLocalTempStorageLocation(string value, out string message) { - return ValidateStringIsOneOfEnumValues("Hosting:LocalTempStorageLocation", value, typeof(LocalTempStorage), out message); + return ValidateStringIsOneOfEnumValues($"{Constants.Configuration.ConfigHosting}:{nameof(HostingSettings.LocalTempStorageLocation)}", value, typeof(LocalTempStorage), out message); } } } diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidator.cs b/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidator.cs index cddb3a745a..aeae0e97ca 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidator.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidator.cs @@ -16,7 +16,7 @@ namespace Umbraco.Core.Configuration.Models.Validation private bool ValidateModelsMode(string value, out string message) { - return ValidateStringIsOneOfEnumValues("ModelsBuilder:ModelsMode", value, typeof(ModelsMode), out message); + return ValidateStringIsOneOfEnumValues($"{Constants.Configuration.ConfigModelsBuilder}:{nameof(ModelsBuilderSettings.ModelsMode)}", value, typeof(ModelsMode), out message); } } } diff --git a/src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidator.cs b/src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidator.cs index 31509d3ebf..305fe812f8 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidator.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidator.cs @@ -17,7 +17,7 @@ namespace Umbraco.Core.Configuration.Models.Validation private bool ValidateConvertUrlsToAscii(string value, out string message) { var validValues = new[] { "try", "true", "false" }; - return ValidateStringIsOneOfValidValues("RequestHandler:ConvertUrlsToAscii", value, validValues, out message); + return ValidateStringIsOneOfValidValues($"{Constants.Configuration.ConfigRequestHandler}:{nameof(RequestHandlerSettings.ConvertUrlsToAscii)}", value, validValues, out message); } } } diff --git a/src/Umbraco.Core/Constants-Configuration.cs b/src/Umbraco.Core/Constants-Configuration.cs index a9b2bab0fb..c06ec8f1ec 100644 --- a/src/Umbraco.Core/Constants-Configuration.cs +++ b/src/Umbraco.Core/Constants-Configuration.cs @@ -11,9 +11,30 @@ /// ":" is used as marker for nested objects in json. E.g. "Umbraco:CMS:" = {"Umbraco":{"CMS":{....}} /// public const string ConfigPrefix = "Umbraco:CMS:"; - public const string ConfigSecurityPrefix = ConfigPrefix+"Security:"; - public const string ConfigRuntimeMinification = ConfigPrefix+"RuntimeMinification"; - public const string ConfigRuntimeMinificationVersion = ConfigRuntimeMinification+":Version"; + public const string ConfigActiveDirectory = ConfigPrefix + "ActiveDirectory"; + public const string ConfigContent = ConfigPrefix + "Content"; + public const string ConfigCoreDebug = ConfigPrefix + "Core:Debug"; + public const string ConfigExceptionFilter = ConfigPrefix + "ExceptionFilter"; + public const string ConfigGlobal = ConfigPrefix + "Global"; + public const string ConfigHealthChecks = ConfigPrefix + "HealthChecks"; + public const string ConfigHosting = ConfigPrefix + "Hosting"; + public const string ConfigImaging = ConfigPrefix + "Imaging"; + public const string ConfigExamine = ConfigPrefix + "Examine"; + public const string ConfigKeepAlive = ConfigPrefix + "KeepAlive"; + public const string ConfigLogging = ConfigPrefix + "Logging"; + public const string ConfigMemberPassword = ConfigPrefix + "Security:MemberPassword"; + public const string ConfigModelsBuilder = ConfigPrefix + "ModelsBuilder"; + public const string ConfigNuCache = ConfigPrefix + "NuCache"; + public const string ConfigRequestHandler = ConfigPrefix + "RequestHandler"; + public const string ConfigRuntime = ConfigPrefix + "Runtime"; + public const string ConfigSecurity = ConfigPrefix + "Security"; + public const string ConfigTours = ConfigPrefix + "Tours"; + public const string ConfigTypeFinder = ConfigPrefix + "TypeFinder"; + public const string ConfigWebRouting = ConfigPrefix + "WebRouting"; + public const string ConfigUserPassword = ConfigPrefix + "Security:UserPassword"; + + public const string ConfigRuntimeMinification = ConfigPrefix + "RuntimeMinification"; + public const string ConfigRuntimeMinificationVersion = ConfigRuntimeMinification + ":Version"; } } } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs index 6d8fd8754f..adf2b540e5 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs @@ -1,7 +1,6 @@ using NUnit.Framework; using Umbraco.Core.Configuration.Models; using Umbraco.Core.Configuration.Models.Validation; -using Umbraco.Core.Macros; using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation diff --git a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs index cba7c4fcb2..d357916791 100644 --- a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs @@ -133,28 +133,28 @@ namespace Umbraco.Extensions services.AddSingleton, ModelsBuilderSettingsValidator>(); services.AddSingleton, RequestHandlerSettingsValidator>(); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ActiveDirectory")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigActiveDirectory)); services.Configure(configuration.GetSection("ConnectionStrings"), o => o.BindNonPublicProperties = true); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Content"), o => o.BindNonPublicProperties = true); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Core:Debug")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ExceptionFilter")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Global"), o => o.BindNonPublicProperties = true); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "HealthChecks")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Hosting"), o => o.BindNonPublicProperties = true); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Imaging")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Examine")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "KeepAlive")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Logging")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigSecurityPrefix + "MemberPassword")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "ModelsBuilder"), o => o.BindNonPublicProperties = true); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "NuCache")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "RequestHandler")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Runtime")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Security")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "Tours")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "TypeFinder")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigSecurityPrefix + "UserPassword")); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigPrefix + "WebRouting")); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigContent), o => o.BindNonPublicProperties = true); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigCoreDebug)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigExceptionFilter)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigGlobal), o => o.BindNonPublicProperties = true); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigHealthChecks)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigHosting), o => o.BindNonPublicProperties = true); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigImaging)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigExamine)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigKeepAlive)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigLogging)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigMemberPassword)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigModelsBuilder), o => o.BindNonPublicProperties = true); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigNuCache)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigRequestHandler)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigRuntime)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigSecurity)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigTours)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigTypeFinder)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigUserPassword)); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigWebRouting)); return services; } From 574e4d64467587f8579b84e7b4b09bd89dada1c7 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 21 Sep 2020 16:23:58 +0200 Subject: [PATCH 14/17] Reverted change to enum parse from string configuration value, as we can't avoid the property being evaluated before the validation has occurred. --- .../Configuration/Models/ContentSettings.cs | 14 +++++++++----- .../Configuration/Models/HostingSettings.cs | 14 +++++++++----- .../Configuration/Models/ModelsBuilderSettings.cs | 14 +++++++++----- .../Configuration/Models/SmtpSettings.cs | 13 ++++++++----- 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs index 32c4cc120d..8b1eb47b5b 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs @@ -30,11 +30,15 @@ namespace Umbraco.Core.Configuration.Models { get { - return Enum.TryParse(MacroErrors, true, out var value) - ? value - : throw new InvalidOperationException( - $"Parsing of {nameof(MacroErrors)} field value of {MacroErrors} was not recognised as a valid value of the enum {nameof(MacroErrorBehaviour)}. " + - $"This state shouldn't have been reached as if the configuration contains an invalid valie it should be caught by {nameof(ContentSettingsValidator)}."); + if (Enum.TryParse(MacroErrors, true, out var value)) + { + return value; + } + + // We need to return somethhing valid here as this property is evalulated during start-up, and if there's an error + // in the configured value it won't be parsed to the enum. + // At run-time though this default won't be used, as an invalid value will be picked up by ContentSettingsValidator. + return MacroErrorBehaviour.Inline; } } diff --git a/src/Umbraco.Core/Configuration/Models/HostingSettings.cs b/src/Umbraco.Core/Configuration/Models/HostingSettings.cs index 1cd1d96e8e..a6dec1f104 100644 --- a/src/Umbraco.Core/Configuration/Models/HostingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/HostingSettings.cs @@ -17,11 +17,15 @@ namespace Umbraco.Core.Configuration.Models { get { - return Enum.TryParse(LocalTempStorageLocation, true, out var value) - ? value - : throw new InvalidOperationException( - $"Parsing of {nameof(LocalTempStorageLocation)} field value of {LocalTempStorageLocation} was not recognised as a valid value of the enum {nameof(LocalTempStorage)}. " + - $"This state shouldn't have been reached as if the configuration contains an invalid valie it should be caught by {nameof(HostingSettingsValidator)}."); + if (Enum.TryParse(LocalTempStorageLocation, true, out var value)) + { + return value; + } + + // We need to return somethhing valid here as this property is evalulated during start-up, and if there's an error + // in the configured value it won't be parsed to the enum. + // At run-time though this default won't be used, as an invalid value will be picked up by HostingSettingsValidator. + return LocalTempStorage.Default; } } diff --git a/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs index 1f0e6612df..faabcb8290 100644 --- a/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs @@ -30,11 +30,15 @@ namespace Umbraco.Core.Configuration.Models { get { - return Enum.TryParse(ModelsMode, true, out var value) - ? value - : throw new InvalidOperationException( - $"Parsing of {nameof(ModelsMode)} field value of {ModelsMode} was not recognised as a valid value of the enum {nameof(ModelsMode)}. " + - $"This state shouldn't have been reached as if the configuration contains an invalid valie it should be caught by {nameof(ModelsBuilderSettingsValidator)}."); + if (Enum.TryParse(ModelsMode, true, out var value)) + { + return value; + } + + // We need to return somethhing valid here as this property is evalulated during start-up, and if there's an error + // in the configured value it won't be parsed to the enum. + // At run-time though this default won't be used, as an invalid value will be picked up by ModelsBuilderSettingsValidator. + return Configuration.ModelsMode.Nothing; } } diff --git a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs index 6ac417517f..ecc3b71a78 100644 --- a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs @@ -24,12 +24,15 @@ namespace Umbraco.Core.Configuration.Models { get { - return Enum.TryParse(DeliveryMethod, true, out var value) - ? value - : throw new InvalidOperationException( - $"Parsing of {nameof(DeliveryMethod)} field value of {DeliveryMethod} was not recognised as a valid value of the enum {nameof(SmtpDeliveryMethod)}. " + - $"This state shouldn't have been reached as if the configuration contains an invalid valie it should be caught by {nameof(GlobalSettingsValidator)}."); + if (Enum.TryParse(DeliveryMethod, true, out var value)) + { + return value; + } + // We need to return somethhing valid here as this property is evalulated during start-up, and if there's an error + // in the configured value it won't be parsed to the enum. + // At run-time though this default won't be used, as an invalid value will be picked up by GlobalSettingsValidator. + return SmtpDeliveryMethod.Network; } } From 1bd22d72c2be887ec9cb8bcc2b1e3f67878ce264 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 21 Sep 2020 21:06:24 +0200 Subject: [PATCH 15/17] Removed configuration model builders. --- .../ConnectionStringsBuilder.cs | 27 --- .../ContentErrorPageBuilder.cs | 65 ------ .../ContentImagingSettingsBuilder.cs | 41 ---- .../ContentSettingsBuilder.cs | 56 ----- .../CoreDebugSettingsBuilder.cs | 34 --- .../GlobalSettingsBuilder.cs | 203 ------------------ .../HostingSettingsBuilder.cs | 50 ----- .../ImagingAutoFillUploadFieldBuilder.cs | 73 ------- .../ModelsBuilderSettingsBuilder.cs | 26 --- .../NuCacheSettingsBuilder.cs | 25 --- .../RequestHandlerSettingsBuilder.cs | 45 ---- .../SmtpSettingsBuilder.cs | 98 --------- ...serPasswordConfigurationSettingsBuilder.cs | 12 -- .../WebRoutingSettingsBuilder.cs | 89 -------- .../Builders/LanguageBuilder.cs | 2 +- .../Builders/UserBuilder.cs | 4 +- src/Umbraco.Tests.Common/TestHelperBase.cs | 2 +- .../Implementations/TestHelper.cs | 7 +- .../Repositories/DictionaryRepositoryTest.cs | 6 +- .../Repositories/LanguageRepositoryTest.cs | 3 +- .../Repositories/TemplateRepositoryTest.cs | 4 +- src/Umbraco.Tests.Integration/RuntimeTests.cs | 31 ++- .../Testing/UmbracoIntegrationTest.cs | 1 - .../BackOfficeCookieManagerTests.cs | 16 +- .../Views/template1.cshtml | 5 + .../Views/template2.cshtml | 5 + .../Views/test.cshtml | 5 + .../AutoFixture/AutoMoqDataAttribute.cs | 2 +- .../BackOfficeClaimsPrincipalFactoryTests.cs | 3 +- .../ContentSettingsValidatorTests.cs | 28 +-- .../GlobalSettingsValidatorTests.cs | 15 +- .../HostingSettingsValidatorTests.cs | 6 +- .../ModelsBuilderSettingsValidatorTests.cs | 6 +- .../RequestHandlerSettingsValidatorTests.cs | 6 +- .../Extensions/UriExtensionsTests.cs | 4 +- .../Umbraco.Core/Routing/UriUtilityTests.cs | 6 +- .../BuilderTests.cs | 8 +- .../ConnectionStringsBuilderTests.cs | 26 --- .../ContentSettingsBuilderTests.cs | 65 ------ .../CoreDebugSettingsBuilderTests.cs | 29 --- .../GlobalSettingsBuilderTests.cs | 104 --------- .../HostingSettingsBuilderTests.cs | 30 --- .../ModelsBuilderSettingsBuilderTests.cs | 27 --- .../NuCacheSettingsBuilderTests.cs | 26 --- .../RequestHandlerSettingsBuilderTests.cs | 36 ---- .../WebRoutingSettingsBuilderTests.cs | 47 ---- .../Routing/BackOfficeAreaRoutesTests.cs | 9 +- .../Controllers/SurfaceControllerTests.cs | 13 +- .../PublishedContentCacheTests.cs | 2 +- .../Components/ComponentTests.cs | 9 +- .../Configurations/GlobalSettingsTests.cs | 2 +- src/Umbraco.Tests/IO/FileSystemsTests.cs | 7 +- src/Umbraco.Tests/IO/ShadowFileSystemTests.cs | 7 +- src/Umbraco.Tests/Models/MediaXmlTest.cs | 6 +- .../CreatedPackagesRepositoryTests.cs | 4 +- .../Packaging/PackageDataInstallationTests.cs | 8 +- .../Packaging/PackageInstallationTest.cs | 10 +- .../Persistence/DatabaseContextTests.cs | 8 +- .../Repositories/ContentTypeRepositoryTest.cs | 2 +- .../Repositories/DocumentRepositoryTest.cs | 3 +- .../Repositories/DomainRepositoryTest.cs | 7 +- .../Repositories/MediaRepositoryTest.cs | 16 +- .../Repositories/MediaTypeRepositoryTest.cs | 4 +- .../Repositories/MemberRepositoryTest.cs | 7 +- .../Repositories/MemberTypeRepositoryTest.cs | 4 +- .../PublicAccessRepositoryTest.cs | 6 +- .../Repositories/ScriptRepositoryTest.cs | 2 +- .../Repositories/StylesheetRepositoryTest.cs | 2 +- .../Repositories/TagRepositoryTest.cs | 8 +- .../Repositories/UserRepositoryTest.cs | 6 +- .../Persistence/SqlCeTableByTableTest.cs | 2 +- .../PropertyEditorValueEditorTests.cs | 4 +- .../PublishedContent/NuCacheChildrenTests.cs | 6 +- .../PublishedContent/NuCacheTests.cs | 6 +- .../PublishedContentLanguageVariantTests.cs | 4 +- .../Routing/BaseUrlProviderTest.cs | 8 +- .../Routing/ContentFinderByIdTests.cs | 4 +- .../ContentFinderByUrlAndTemplateTests.cs | 19 +- .../Routing/ContentFinderByUrlTests.cs | 16 +- .../ContentFinderByUrlWithDomainsTests.cs | 5 +- .../Routing/DomainsAndCulturesTests.cs | 18 +- .../Routing/GetContentUrlsTests.cs | 7 +- .../Routing/MediaUrlProviderTests.cs | 7 +- .../Routing/RenderRouteHandlerTests.cs | 2 +- .../Routing/RoutableDocumentFilterTests.cs | 6 +- .../Routing/UmbracoModuleTests.cs | 5 +- ...oviderWithHideTopLevelNodeFromPathTests.cs | 6 +- ...derWithoutHideTopLevelNodeFromPathTests.cs | 17 +- src/Umbraco.Tests/Routing/UrlRoutesTests.cs | 13 +- .../Routing/UrlsProviderWithDomainsTests.cs | 38 ++-- .../Routing/UrlsWithNestedDomains.cs | 12 +- src/Umbraco.Tests/Runtimes/StandaloneTests.cs | 21 +- .../Scoping/ScopeEventDispatcherTests.cs | 12 +- .../Scoping/ScopedNuCacheTests.cs | 4 +- .../Scoping/ScopedRepositoryTests.cs | 2 +- src/Umbraco.Tests/Scoping/ScopedXmlTests.cs | 7 +- .../OwinDataProtectorTokenProviderTests.cs | 2 +- .../Services/ContentServiceEventTests.cs | 2 +- .../Services/ContentServicePerformanceTest.cs | 8 +- .../ContentServicePublishBranchTests.cs | 3 +- .../Services/ContentServiceTagsTests.cs | 2 +- .../Services/ContentServiceTests.cs | 2 +- .../ContentTypeServiceVariantsTests.cs | 10 +- .../Services/EntityServiceTests.cs | 3 +- .../Services/EntityXmlSerializerTests.cs | 2 +- .../Services/LocalizationServiceTests.cs | 2 +- .../Services/SectionServiceTests.cs | 3 +- .../Services/UserServiceTests.cs | 3 +- .../Strings/CmsHelperCasingTests.cs | 3 +- .../Strings/DefaultShortStringHelperTests.cs | 40 ++-- .../Templates/HtmlImageSourceParserTests.cs | 24 +-- .../Templates/HtmlLocalLinkParserTests.cs | 13 +- src/Umbraco.Tests/TestHelpers/BaseWebTest.cs | 2 +- .../TestHelpers/Entities/MockedUser.cs | 10 +- src/Umbraco.Tests/TestHelpers/TestHelper.cs | 2 +- src/Umbraco.Tests/TestHelpers/TestObjects.cs | 6 +- .../TestHelpers/TestWithDatabaseBase.cs | 2 +- .../Testing/TestingTests/MockTests.cs | 2 +- src/Umbraco.Tests/Testing/UmbracoTestBase.cs | 23 +- .../UmbracoExamine/ExamineBaseTest.cs | 7 +- .../Web/Mvc/SurfaceControllerTests.cs | 10 +- .../Web/Mvc/UmbracoViewPageTests.cs | 11 +- 122 files changed, 360 insertions(+), 1649 deletions(-) delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentErrorPageBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentImagingSettingsBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ImagingAutoFillUploadFieldBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/SmtpSettingsBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/UserPasswordConfigurationSettingsBuilder.cs delete mode 100644 src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilder.cs create mode 100644 src/Umbraco.Tests.Integration/Views/template1.cshtml create mode 100644 src/Umbraco.Tests.Integration/Views/template2.cshtml create mode 100644 src/Umbraco.Tests.Integration/Views/test.cshtml delete mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilderTests.cs delete mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilderTests.cs delete mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilderTests.cs delete mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilderTests.cs delete mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilderTests.cs delete mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilderTests.cs delete mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilderTests.cs delete mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilderTests.cs delete mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilderTests.cs diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilder.cs deleted file mode 100644 index 4aba98fccd..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilder.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Umbraco.Core; -using Umbraco.Core.Configuration; -using ConnectionStrings = Umbraco.Core.Configuration.Models.ConnectionStrings; - -namespace Umbraco.Tests.Common.Builders -{ - public class ConnectionStringsBuilder : BuilderBase - { - private string _umbracoConnectionString; - - public ConnectionStringsBuilder WithUmbracoConnectionString(string umbracoConnectionString) - { - _umbracoConnectionString = umbracoConnectionString; - return this; - } - - public override ConnectionStrings Build() - { - var umbracoConnectionString = _umbracoConnectionString ?? string.Empty; - - return new ConnectionStrings - { - UmbracoConnectionString = new ConfigConnectionString(Constants.System.UmbracoConnectionName, umbracoConnectionString), - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentErrorPageBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentErrorPageBuilder.cs deleted file mode 100644 index 47c4bdfc8c..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentErrorPageBuilder.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using Umbraco.Core.Configuration.Models; - -namespace Umbraco.Tests.Common.Builders -{ - public class ContentErrorPageBuilder : ContentErrorPageBuilder - { - public ContentErrorPageBuilder() : base(null) - { - } - } - - public class ContentErrorPageBuilder - : ChildBuilderBase - { - private int? _contentId; - private Guid? _contentKey; - private string _contentXPath; - private string _culture; - - public ContentErrorPageBuilder(TParent parentBuilder) : base(parentBuilder) - { - } - - public ContentErrorPageBuilder WithContentId(int contentId) - { - _contentId = contentId; - return this; - } - - public ContentErrorPageBuilder WithContentKey(Guid contentKey) - { - _contentKey = contentKey; - return this; - } - - public ContentErrorPageBuilder WithContentXPath(string contentXPath) - { - _contentXPath = contentXPath; - return this; - } - - public ContentErrorPageBuilder WithCulture(string culture) - { - _culture = culture; - return this; - } - - public override ContentErrorPage Build() - { - var contentId = _contentId ?? 0; - var contentKey = _contentKey ?? Guid.Empty; - var contentXPath = _contentXPath ?? string.Empty; - var culture = _culture ?? "en-US"; - - return new ContentErrorPage - { - ContentId = contentId, - ContentKey = contentKey, - ContentXPath = contentXPath, - Culture = culture, - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentImagingSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentImagingSettingsBuilder.cs deleted file mode 100644 index 685e60c929..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentImagingSettingsBuilder.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Umbraco.Core.Configuration.Models; - -namespace Umbraco.Tests.Common.Builders -{ - public class ContentImagingSettingsBuilder : ContentImagingSettingsBuilder - { - public ContentImagingSettingsBuilder() : base(null) - { - } - } - - public class ContentImagingSettingsBuilder - : ChildBuilderBase - { - - private readonly List>> _imagingAutoFillUploadFieldBuilder = new List>>(); - - public ContentImagingSettingsBuilder(TParent parentBuilder) : base(parentBuilder) - { - } - - public ImagingAutoFillUploadFieldBuilder> AddAutoFillImageProperty() - { - var builder = new ImagingAutoFillUploadFieldBuilder>(this); - _imagingAutoFillUploadFieldBuilder.Add(builder); - return builder; - } - - public override ContentImagingSettings Build() - { - var imagingAutoFillUploadFields = _imagingAutoFillUploadFieldBuilder.Select(x => x.Build()).ToArray(); - - return new ContentImagingSettings - { - AutoFillImageProperties = imagingAutoFillUploadFields, - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilder.cs deleted file mode 100644 index 9e504683d1..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilder.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Umbraco.Core.Configuration.Models; -using Umbraco.Core.Macros; - -namespace Umbraco.Tests.Common.Builders -{ - public class ContentSettingsBuilder : ContentSettingsBuilder - { - public ContentSettingsBuilder() : base(null) - { - } - } - - public class ContentSettingsBuilder : ChildBuilderBase - { - private string _macroErrors; - private readonly ContentImagingSettingsBuilder> _contentImagingSettingsBuilder; - private readonly List>> _contentErrorPageBuilders = new List>>(); - - public ContentSettingsBuilder(TParent parentBuilder) : base(parentBuilder) - { - _contentImagingSettingsBuilder = new ContentImagingSettingsBuilder>(this); - _contentErrorPageBuilders = new List>>(); - } - - public ContentImagingSettingsBuilder> AddImaging() => _contentImagingSettingsBuilder; - - public ContentErrorPageBuilder> AddErrorPage() - { - var builder = new ContentErrorPageBuilder>(this); - _contentErrorPageBuilders.Add(builder); - return builder; - } - - public ContentSettingsBuilder WithMacroErrors(string macroErrors) - { - _macroErrors = macroErrors; - return this; - } - - public override ContentSettings Build() - { - var macroErrors = _macroErrors ?? MacroErrorBehaviour.Inline.ToString(); - var contentImagingSettings = _contentImagingSettingsBuilder.Build(); - var contentErrorPages = _contentErrorPageBuilders.Select(x => x.Build()).ToArray(); - - return new ContentSettings - { - MacroErrors = _macroErrors, - Imaging = contentImagingSettings, - Error404Collection = contentErrorPages, - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilder.cs deleted file mode 100644 index e14fb0ade5..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilder.cs +++ /dev/null @@ -1,34 +0,0 @@ -using CoreDebugSettings = Umbraco.Core.Configuration.Models.CoreDebugSettings; - -namespace Umbraco.Tests.Common.Builders -{ - public class CoreDebugSettingsBuilder : BuilderBase - { - private bool? _dumpOnTimeoutThreadAbort; - private bool? _logUncompletedScopes; - - public CoreDebugSettingsBuilder WithDumpOnTimeoutThreadAbort(bool dumpOnTimeoutThreadAbort) - { - _dumpOnTimeoutThreadAbort = dumpOnTimeoutThreadAbort; - return this; - } - - public CoreDebugSettingsBuilder WithLogUncompletedScopes(bool logUncompletedScopes) - { - _logUncompletedScopes = logUncompletedScopes; - return this; - } - - public override CoreDebugSettings Build() - { - var dumpOnTimeoutThreadAbort = _dumpOnTimeoutThreadAbort ?? false; - var logUncompletedScopes = _logUncompletedScopes ?? false; - - return new CoreDebugSettings - { - DumpOnTimeoutThreadAbort = dumpOnTimeoutThreadAbort, - LogUncompletedScopes = logUncompletedScopes, - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilder.cs deleted file mode 100644 index 30d1d3182f..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilder.cs +++ /dev/null @@ -1,203 +0,0 @@ -using Umbraco.Core.Configuration.Models; - -namespace Umbraco.Tests.Common.Builders -{ - public class GlobalSettingsBuilder : GlobalSettingsBuilder - { - public GlobalSettingsBuilder() : base(null) - { - } - } - - public class GlobalSettingsBuilder : ChildBuilderBase - { - private string _configurationStatus; - private string _databaseFactoryServerVersion; - private string _defaultUiLanguage; - private bool? _disableElectionForSingleServer; - private bool? _hideTopLevelNodeFromPath; - private bool? _installEmptyDatabase; - private bool? _installMissingDatabase; - private string _umbracoPath; - private string _registerType; - private string _reservedPaths; - private string _reservedUrls; - private int? _timeOutInMinutes; - private string _umbracoCssPath; - private string _umbracoMediaPath; - private string _umbracoScriptsPath; - private string _mainDomLock; - private string _noNodesViewPath; - private bool? _useHttps; - private int? _versionCheckPeriod; - private readonly SmtpSettingsBuilder> _smtpSettingsBuilder; - - public GlobalSettingsBuilder(TParent parentBuilder) : base(parentBuilder) - { - _smtpSettingsBuilder = new SmtpSettingsBuilder>(this); - } - - public SmtpSettingsBuilder> AddSmtpSettings() => _smtpSettingsBuilder; - - public GlobalSettingsBuilder WithConfigurationStatus(string configurationStatus) - { - _configurationStatus = configurationStatus; - return this; - } - - public GlobalSettingsBuilder WithDatabaseFactoryServerVersion(string databaseFactoryServerVersion) - { - _databaseFactoryServerVersion = databaseFactoryServerVersion; - return this; - } - - public GlobalSettingsBuilder WithDefaultUiLanguage(string defaultUiLanguage) - { - _defaultUiLanguage = defaultUiLanguage; - return this; - } - - public GlobalSettingsBuilder WithDisableElectionForSingleServer(bool disableElectionForSingleServer) - { - _disableElectionForSingleServer = disableElectionForSingleServer; - return this; - } - - public GlobalSettingsBuilder WithHideTopLevelNodeFromPath(bool hideTopLevelNodeFromPath) - { - _hideTopLevelNodeFromPath = hideTopLevelNodeFromPath; - return this; - } - - public GlobalSettingsBuilder WithInstallEmptyDatabase(bool installEmptyDatabase) - { - _installEmptyDatabase = installEmptyDatabase; - return this; - } - - public GlobalSettingsBuilder WithInstallMissingDatabase(bool installMissingDatabase) - { - _installMissingDatabase = installMissingDatabase; - return this; - } - - public GlobalSettingsBuilder WithUmbracoPath(string umbracoPath) - { - _umbracoPath = umbracoPath; - return this; - } - - public GlobalSettingsBuilder WithRegisterType(string registerType) - { - _registerType = registerType; - return this; - } - - public GlobalSettingsBuilder WithReservedPaths(string reservedPaths) - { - _reservedPaths = reservedPaths; - return this; - } - - public GlobalSettingsBuilder WithReservedUrls(string reservedUrls) - { - _reservedUrls = reservedUrls; - return this; - } - - public GlobalSettingsBuilder WithUseHttps(bool useHttps) - { - _useHttps = useHttps; - return this; - } - - public GlobalSettingsBuilder WithUmbracoCssPath(string umbracoCssPath) - { - _umbracoCssPath = umbracoCssPath; - return this; - } - - public GlobalSettingsBuilder WithUmbracoMediaPath(string umbracoMediaPath) - { - _umbracoMediaPath = umbracoMediaPath; - return this; - } - - public GlobalSettingsBuilder WithUmbracoScriptsPath(string umbracoScriptsPath) - { - _umbracoScriptsPath = umbracoScriptsPath; - return this; - } - - public GlobalSettingsBuilder WithMainDomLock(string mainDomLock) - { - _mainDomLock = mainDomLock; - return this; - } - - public GlobalSettingsBuilder WithNoNodesViewPath(string noNodesViewPath) - { - _noNodesViewPath = noNodesViewPath; - return this; - } - public GlobalSettingsBuilder WithVersionCheckPeriod(int versionCheckPeriod) - { - _versionCheckPeriod = versionCheckPeriod; - return this; - } - - public GlobalSettingsBuilder WithTimeOutInMinutes(int timeOutInMinutes) - { - _timeOutInMinutes = timeOutInMinutes; - return this; - } - - public override GlobalSettings Build() - { - var configurationStatus = _configurationStatus ?? "9.0.0"; - var databaseFactoryServerVersion = _databaseFactoryServerVersion ?? null; - var defaultUiLanguage = _defaultUiLanguage ?? "en"; - var disableElectionForSingleServer = _disableElectionForSingleServer ?? false; - var hideTopLevelNodeFromPath = _hideTopLevelNodeFromPath ?? false; - var installEmptyDatabase = _installEmptyDatabase ?? false; - var installMissingDatabase = _installMissingDatabase ?? false; - var registerType = _registerType ?? null; - var reservedPaths = _reservedPaths ?? GlobalSettings.StaticReservedPaths; - var reservedUrls = _reservedUrls ?? GlobalSettings.StaticReservedUrls; - var umbracoPath = _umbracoPath ?? "~/umbraco"; - var useHttps = _useHttps ?? false; - var umbracoCssPath = _umbracoCssPath ?? "~/css"; - var umbracoMediaPath = _umbracoMediaPath ?? "~/media"; - var umbracoScriptsPath = _umbracoScriptsPath ?? "~/scripts"; - var versionCheckPeriod = _versionCheckPeriod ?? 0; - var timeOutInMinutes = _timeOutInMinutes ?? 20; - var smtpSettings = _smtpSettingsBuilder.Build(); - var mainDomLock = _mainDomLock ?? string.Empty; - var noNodesViewPath = _noNodesViewPath ?? "~/config/splashes/NoNodes.cshtml"; - - return new GlobalSettings - { - ConfigurationStatus = configurationStatus, - DatabaseFactoryServerVersion = databaseFactoryServerVersion, - DefaultUILanguage = defaultUiLanguage, - DisableElectionForSingleServer = disableElectionForSingleServer, - HideTopLevelNodeFromPath = hideTopLevelNodeFromPath, - InstallEmptyDatabase = installEmptyDatabase, - InstallMissingDatabase = installMissingDatabase, - RegisterType = registerType, - ReservedPaths = reservedPaths, - ReservedUrls = reservedUrls, - UmbracoPath = umbracoPath, - UseHttps = useHttps, - UmbracoCssPath = umbracoCssPath, - UmbracoMediaPath = umbracoMediaPath, - UmbracoScriptsPath = umbracoScriptsPath, - VersionCheckPeriod = versionCheckPeriod, - TimeOutInMinutes = timeOutInMinutes, - Smtp = smtpSettings, - MainDomLock = mainDomLock, - NoNodesViewPath = noNodesViewPath, - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilder.cs deleted file mode 100644 index ac9db21337..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilder.cs +++ /dev/null @@ -1,50 +0,0 @@ -using Umbraco.Core.Configuration; -using Umbraco.Core.Configuration.Models; - -namespace Umbraco.Tests.Common.Builders -{ - public class HostingSettingsBuilder : BuilderBase - { - private string _applicationVirtualPath; - private bool? _debug; - private string _localTempStorageLocation; - - public HostingSettingsBuilder WithApplicationVirtualPath(string applicationVirtualPath) - { - _applicationVirtualPath = applicationVirtualPath; - return this; - } - - public HostingSettingsBuilder WithDebug(bool debug) - { - _debug = debug; - return this; - } - - public HostingSettingsBuilder WithLocalTempStorageLocation(LocalTempStorage localTempStorageLocation) - { - _localTempStorageLocation = localTempStorageLocation.ToString(); - return this; - } - - public HostingSettingsBuilder WithLocalTempStorageLocation(string localTempStorageLocation) - { - _localTempStorageLocation = localTempStorageLocation; - return this; - } - - public override HostingSettings Build() - { - var debug = _debug ?? false; - var localTempStorageLocation = _localTempStorageLocation ?? LocalTempStorage.Default.ToString(); - var applicationVirtualPath = _applicationVirtualPath ?? null; - - return new HostingSettings - { - ApplicationVirtualPath = applicationVirtualPath, - Debug = debug, - LocalTempStorageLocation = localTempStorageLocation, - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ImagingAutoFillUploadFieldBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ImagingAutoFillUploadFieldBuilder.cs deleted file mode 100644 index f6f8383d6a..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ImagingAutoFillUploadFieldBuilder.cs +++ /dev/null @@ -1,73 +0,0 @@ -using Umbraco.Core.Configuration.Models; - -namespace Umbraco.Tests.Common.Builders -{ - public class ImagingAutoFillUploadFieldBuilder : ImagingAutoFillUploadFieldBuilder - { - public ImagingAutoFillUploadFieldBuilder() : base(null) - { - } - } - - public class ImagingAutoFillUploadFieldBuilder - : ChildBuilderBase - { - private string _alias; - private string _widthFieldAlias; - private string _heightFieldAlias; - private string _lengthFieldAlias; - private string _extensionFieldAlias; - - public ImagingAutoFillUploadFieldBuilder(TParent parentBuilder) : base(parentBuilder) - { - } - - public ImagingAutoFillUploadFieldBuilder WithAlias(string alias) - { - _alias = alias; - return this; - } - - public ImagingAutoFillUploadFieldBuilder WithWidthFieldAlias(string widthFieldAlias) - { - _widthFieldAlias = widthFieldAlias; - return this; - } - - public ImagingAutoFillUploadFieldBuilder WithHeightFieldAlias(string heightFieldAlias) - { - _heightFieldAlias = heightFieldAlias; - return this; - } - - public ImagingAutoFillUploadFieldBuilder WithLengthFieldAlias(string lengthFieldAlias) - { - _lengthFieldAlias = lengthFieldAlias; - return this; - } - - public ImagingAutoFillUploadFieldBuilder WithExtensionFieldAlias(string extensionFieldAlias) - { - _extensionFieldAlias = extensionFieldAlias; - return this; - } - - public override ImagingAutoFillUploadField Build() - { - var alias = _alias ?? "testAlias"; - var widthFieldAlias = _widthFieldAlias ?? "testWidthFieldAlias"; - var heightFieldAlias = _heightFieldAlias ?? "testHeightFieldAlias"; - var lengthFieldAlias = _lengthFieldAlias ?? "testLengthFieldAlias"; - var extensionFieldAlias = _extensionFieldAlias ?? "testExtensionFieldAlias"; - - return new ImagingAutoFillUploadField - { - Alias = alias, - WidthFieldAlias = widthFieldAlias, - HeightFieldAlias = heightFieldAlias, - LengthFieldAlias = lengthFieldAlias, - ExtensionFieldAlias = extensionFieldAlias, - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilder.cs deleted file mode 100644 index 02ab0a0af4..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilder.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Umbraco.Core.Configuration; -using Umbraco.Core.Configuration.Models; - -namespace Umbraco.Tests.Common.Builders -{ - public class ModelsBuilderSettingsBuilder : BuilderBase - { - private string _modelsMode; - - public ModelsBuilderSettingsBuilder WithModelsMode(string modelsMode) - { - _modelsMode = modelsMode; - return this; - } - - public override ModelsBuilderSettings Build() - { - var modelsMode = _modelsMode ?? ModelsMode.Nothing.ToString(); - - return new ModelsBuilderSettings - { - ModelsMode = modelsMode, - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilder.cs deleted file mode 100644 index 53e40c47fa..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilder.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Umbraco.Core.Configuration.Models; - -namespace Umbraco.Tests.Common.Builders -{ - public class NuCacheSettingsBuilder : BuilderBase - { - private int? _bTreeBlockSize; - - public NuCacheSettingsBuilder WithBTreeBlockSize(int bTreeBlockSize) - { - _bTreeBlockSize = bTreeBlockSize; - return this; - } - - public override NuCacheSettings Build() - { - var bTreeBlockSize = _bTreeBlockSize ?? 4096; - - return new NuCacheSettings - { - BTreeBlockSize = bTreeBlockSize - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilder.cs deleted file mode 100644 index 3c6f652014..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilder.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Collections.Generic; -using Umbraco.Core.Configuration.Models; -using Umbraco.Core.Configuration.UmbracoSettings; - -namespace Umbraco.Tests.Common.Builders -{ - public class RequestHandlerSettingsBuilder : BuilderBase - { - private bool? _addTrailingSlash; - private string _convertUrlsToAscii; - private IEnumerable _charCollection; - - public RequestHandlerSettingsBuilder WithAddTrailingSlash(bool addTrailingSlash) - { - _addTrailingSlash = addTrailingSlash; - return this; - } - - public RequestHandlerSettingsBuilder WithConvertUrlsToAscii(string convertUrlsToAscii) - { - _convertUrlsToAscii = convertUrlsToAscii; - return this; - } - - public RequestHandlerSettingsBuilder WithCharCollection(IEnumerable charCollection) - { - _charCollection = charCollection; - return this; - } - - public override RequestHandlerSettings Build() - { - var addTrailingSlash = _addTrailingSlash ?? false; - var convertUrlsToAscii = _convertUrlsToAscii ?? "false"; - var charCollection = _charCollection ?? RequestHandlerSettings.DefaultCharCollection; - - return new RequestHandlerSettings - { - AddTrailingSlash = addTrailingSlash, - ConvertUrlsToAscii = convertUrlsToAscii, - CharCollection = charCollection, - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/SmtpSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/SmtpSettingsBuilder.cs deleted file mode 100644 index 34ffcd316e..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/SmtpSettingsBuilder.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System.Net.Mail; -using Umbraco.Core.Configuration.Models; - -namespace Umbraco.Tests.Common.Builders -{ - public class SmtpSettingsBuilder : SmtpSettingsBuilder - { - public SmtpSettingsBuilder() : base(null) - { - } - } - - public class SmtpSettingsBuilder - : ChildBuilderBase - { - private string _from; - private string _host; - private int? _port; - private string _pickupDirectoryLocation; - private string _deliveryMethod; - private string _username; - private string _password; - - public SmtpSettingsBuilder(TParent parentBuilder) : base(parentBuilder) - { - } - - public SmtpSettingsBuilder WithFrom(string from) - { - _from = from; - return this; - } - - public SmtpSettingsBuilder WithHost(string host) - { - _host = host; - return this; - } - - public SmtpSettingsBuilder WithUsername(string username) - { - _username = username; - return this; - } - - public SmtpSettingsBuilder WithPort(int port) - { - _port = port; - return this; - } - - public SmtpSettingsBuilder WithPassword(string password) - { - _password = password; - return this; - } - - public SmtpSettingsBuilder WithPickupDirectoryLocation(string pickupDirectoryLocation) - { - _pickupDirectoryLocation = pickupDirectoryLocation; - return this; - } - - public SmtpSettingsBuilder WithDeliveryMethod(string deliveryMethod) - { - _deliveryMethod = deliveryMethod; - return this; - } - - public SmtpSettingsBuilder 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.ToString(); - var username = _username ?? null; - var password = _password ?? null; - - return new SmtpSettings() - { - From = from, - Host = host, - Port = port, - PickupDirectoryLocation = pickupDirectoryLocation, - DeliveryMethod = deliveryMethod, - Username = username, - Password = password, - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/UserPasswordConfigurationSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/UserPasswordConfigurationSettingsBuilder.cs deleted file mode 100644 index 3a0dfc3e9a..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/UserPasswordConfigurationSettingsBuilder.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Umbraco.Core.Configuration.Models; - -namespace Umbraco.Tests.Common.Builders -{ - public class UserPasswordConfigurationSettingsBuilder : BuilderBase - { - public override UserPasswordConfigurationSettings Build() - { - return new UserPasswordConfigurationSettings(); - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilder.cs deleted file mode 100644 index e32fff31fa..0000000000 --- a/src/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilder.cs +++ /dev/null @@ -1,89 +0,0 @@ -using Umbraco.Core.Configuration.Models; -using Umbraco.Core.Models.PublishedContent; - -namespace Umbraco.Tests.Common.Builders -{ - public class WebRoutingSettingsBuilder : BuilderBase - { - private bool? _trySkipIisCustomErrors; - private bool? _internalRedirectPreservesTemplate; - private bool? _disableAlternativeTemplates; - private bool? _validateAlternativeTemplates; - private bool? _disableFindContentByIdPath; - private bool? _disableRedirectUrlTracking; - private string _urlProviderMode; - private string _umbracoApplicationUrl; - - public WebRoutingSettingsBuilder WithTrySkipIisCustomErrors(bool trySkipIisCustomErrors) - { - _trySkipIisCustomErrors = trySkipIisCustomErrors; - return this; - } - - public WebRoutingSettingsBuilder WithInternalRedirectPreservesTemplate(bool internalRedirectPreservesTemplate) - { - _internalRedirectPreservesTemplate = internalRedirectPreservesTemplate; - return this; - } - - public WebRoutingSettingsBuilder WithDisableAlternativeTemplates(bool disableAlternativeTemplates) - { - _disableAlternativeTemplates = disableAlternativeTemplates; - return this; - } - - public WebRoutingSettingsBuilder WithValidateAlternativeTemplates(bool validateAlternativeTemplates) - { - _validateAlternativeTemplates = validateAlternativeTemplates; - return this; - } - - public WebRoutingSettingsBuilder WithDisableFindContentByIdPath(bool disableFindContentByIdPath) - { - _disableFindContentByIdPath = disableFindContentByIdPath; - return this; - } - - public WebRoutingSettingsBuilder WithDisableRedirectUrlTracking(bool disableRedirectUrlTracking) - { - _disableRedirectUrlTracking = disableRedirectUrlTracking; - return this; - } - - public WebRoutingSettingsBuilder WithUrlProviderMode(string urlProviderMode) - { - _urlProviderMode = urlProviderMode; - return this; - } - - public WebRoutingSettingsBuilder WithUmbracoApplicationUrl(string umbracoApplicationUrl) - { - _umbracoApplicationUrl = umbracoApplicationUrl; - return this; - } - - public override WebRoutingSettings Build() - { - var trySkipIisCustomErrors = _trySkipIisCustomErrors ?? false; - var internalRedirectPreservesTemplate = _internalRedirectPreservesTemplate ?? false; - var disableAlternativeTemplates = _disableAlternativeTemplates ?? false; - var validateAlternativeTemplates = _validateAlternativeTemplates ?? false; - var disableFindContentByIdPath = _disableFindContentByIdPath ?? false; - var disableRedirectUrlTracking = _disableRedirectUrlTracking ?? false; - var urlProviderMode = _urlProviderMode ?? UrlMode.Auto.ToString(); - var umbracoApplicationUrl = _umbracoApplicationUrl ?? string.Empty; - - return new WebRoutingSettings - { - TrySkipIisCustomErrors = trySkipIisCustomErrors, - InternalRedirectPreservesTemplate = internalRedirectPreservesTemplate, - DisableAlternativeTemplates = disableAlternativeTemplates, - ValidateAlternativeTemplates = validateAlternativeTemplates, - DisableFindContentByIdPath = disableFindContentByIdPath, - DisableRedirectUrlTracking = disableRedirectUrlTracking, - UrlProviderMode = urlProviderMode, - UmbracoApplicationUrl = umbracoApplicationUrl, - }; - } - } -} diff --git a/src/Umbraco.Tests.Common/Builders/LanguageBuilder.cs b/src/Umbraco.Tests.Common/Builders/LanguageBuilder.cs index 7174baaba1..cb76a00f92 100644 --- a/src/Umbraco.Tests.Common/Builders/LanguageBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/LanguageBuilder.cs @@ -57,7 +57,7 @@ namespace Umbraco.Tests.Common.Builders public override ILanguage Build() { var cultureInfo = _cultureInfo ?? CultureInfo.GetCultureInfo("en-US"); - var globalSettings = new GlobalSettingsBuilder().WithDefaultUiLanguage(cultureInfo.Name).Build(); + var globalSettings = new GlobalSettings { DefaultUILanguage = cultureInfo.Name }; var key = _key ?? Guid.NewGuid(); var createDate = _createDate ?? DateTime.Now; var updateDate = _updateDate ?? DateTime.Now; diff --git a/src/Umbraco.Tests.Common/Builders/UserBuilder.cs b/src/Umbraco.Tests.Common/Builders/UserBuilder.cs index 2b76206e3f..9658b0453f 100644 --- a/src/Umbraco.Tests.Common/Builders/UserBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/UserBuilder.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models.Membership; using Umbraco.Tests.Common.Builders.Interfaces; @@ -12,6 +13,7 @@ namespace Umbraco.Tests.Common.Builders { } } + public class UserBuilder : ChildBuilderBase, IWithIdBuilder, @@ -131,7 +133,7 @@ namespace Umbraco.Tests.Common.Builders { var id = _id ?? 0; var defaultLang = _defaultLang ?? "en"; - var globalSettings = new GlobalSettingsBuilder().WithDefaultUiLanguage(defaultLang).Build(); + var globalSettings = new GlobalSettings { DefaultUILanguage = defaultLang }; var key = _key ?? Guid.NewGuid(); var createDate = _createDate ?? DateTime.Now; var updateDate = _updateDate ?? DateTime.Now; diff --git a/src/Umbraco.Tests.Common/TestHelperBase.cs b/src/Umbraco.Tests.Common/TestHelperBase.cs index 7b5fed3000..cd9426ac2f 100644 --- a/src/Umbraco.Tests.Common/TestHelperBase.cs +++ b/src/Umbraco.Tests.Common/TestHelperBase.cs @@ -120,7 +120,7 @@ namespace Umbraco.Tests.Common public IRegister GetRegister() { - return RegisterFactory.Create(new GlobalSettingsBuilder().Build()); + return RegisterFactory.Create(new GlobalSettings()); } public abstract IHostingEnvironment GetHostingEnvironment(); diff --git a/src/Umbraco.Tests.Integration/Implementations/TestHelper.cs b/src/Umbraco.Tests.Integration/Implementations/TestHelper.cs index 0e46941904..9f1f9a4840 100644 --- a/src/Umbraco.Tests.Integration/Implementations/TestHelper.cs +++ b/src/Umbraco.Tests.Integration/Implementations/TestHelper.cs @@ -5,6 +5,7 @@ using System.Net; using System.Reflection; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using Moq; @@ -18,10 +19,8 @@ using Umbraco.Core.Persistence; using Umbraco.Core.Runtime; using Umbraco.Net; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Web.Common.AspNetCore; using IHostingEnvironment = Umbraco.Core.Hosting.IHostingEnvironment; -using Microsoft.Extensions.FileProviders; namespace Umbraco.Tests.Integration.Implementations { @@ -112,7 +111,7 @@ namespace Umbraco.Tests.Integration.Implementations { if (_backOfficeInfo == null) { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var mockedOptionsMonitorOfGlobalSettings = Mock.Of>(x => x.CurrentValue == globalSettings); _backOfficeInfo = new AspNetCoreBackOfficeInfo(mockedOptionsMonitorOfGlobalSettings); } @@ -127,7 +126,7 @@ namespace Umbraco.Tests.Integration.Implementations private IOptionsMonitor GetIOptionsMonitorOfHostingSettings() { - var hostingSettings = new HostingSettingsBuilder().Build(); + var hostingSettings = new HostingSettings(); return Mock.Of>(x => x.CurrentValue == hostingSettings); } diff --git a/src/Umbraco.Tests.Integration/Persistence/Repositories/DictionaryRepositoryTest.cs b/src/Umbraco.Tests.Integration/Persistence/Repositories/DictionaryRepositoryTest.cs index be9a0ce5ed..4d5bdac6b4 100644 --- a/src/Umbraco.Tests.Integration/Persistence/Repositories/DictionaryRepositoryTest.cs +++ b/src/Umbraco.Tests.Integration/Persistence/Repositories/DictionaryRepositoryTest.cs @@ -2,10 +2,10 @@ using System.Collections.Generic; using System.Linq; using NUnit.Framework; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Services; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; @@ -288,7 +288,7 @@ namespace Umbraco.Tests.Integration.Persistence.Repositories { var repository = CreateRepository(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var languageNo = new Language(globalSettings, "nb-NO") { CultureName = "nb-NO" }; localizationService.Save(languageNo); @@ -369,7 +369,7 @@ namespace Umbraco.Tests.Integration.Persistence.Repositories var localizationService = GetRequiredService(); var language = localizationService.GetLanguageByIsoCode("en-US"); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var languageDK = new Language(globalSettings, "da-DK") { CultureName = "da-DK" }; localizationService.Save(languageDK);//Id 2 diff --git a/src/Umbraco.Tests.Integration/Persistence/Repositories/LanguageRepositoryTest.cs b/src/Umbraco.Tests.Integration/Persistence/Repositories/LanguageRepositoryTest.cs index 550f32adb1..0f57598e0f 100644 --- a/src/Umbraco.Tests.Integration/Persistence/Repositories/LanguageRepositoryTest.cs +++ b/src/Umbraco.Tests.Integration/Persistence/Repositories/LanguageRepositoryTest.cs @@ -9,7 +9,6 @@ using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.Scoping; using Umbraco.Core.Services; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.Testing; @@ -25,7 +24,7 @@ namespace Umbraco.Tests.Integration.Persistence.Repositories public void SetUp() { CreateTestData(); - _globalSettings = new GlobalSettingsBuilder().Build(); + _globalSettings = new GlobalSettings(); } private LanguageRepository CreateRepository(IScopeProvider provider) diff --git a/src/Umbraco.Tests.Integration/Persistence/Repositories/TemplateRepositoryTest.cs b/src/Umbraco.Tests.Integration/Persistence/Repositories/TemplateRepositoryTest.cs index 4cb0217fe4..cb1fe9a57b 100644 --- a/src/Umbraco.Tests.Integration/Persistence/Repositories/TemplateRepositoryTest.cs +++ b/src/Umbraco.Tests.Integration/Persistence/Repositories/TemplateRepositoryTest.cs @@ -7,6 +7,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.IO; using Umbraco.Core.Models; using Umbraco.Core.Persistence.Repositories; @@ -14,7 +15,6 @@ using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Scoping; using Umbraco.Core.Services; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Integration.Implementations; using Umbraco.Tests.Integration.Testing; using Umbraco.Tests.TestHelpers.Entities; @@ -260,7 +260,7 @@ namespace Umbraco.Tests.Integration.Persistence.Repositories using (provider.CreateScope()) { var templateRepository = CreateRepository(provider); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var tagRepository = new TagRepository(scopeAccessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, AppCaches, ShortStringHelper); var languageRepository = new LanguageRepository(scopeAccessor, AppCaches.Disabled, Logger, Microsoft.Extensions.Options.Options.Create(globalSettings)); diff --git a/src/Umbraco.Tests.Integration/RuntimeTests.cs b/src/Umbraco.Tests.Integration/RuntimeTests.cs index a5b421fcd3..32045b633a 100644 --- a/src/Umbraco.Tests.Integration/RuntimeTests.cs +++ b/src/Umbraco.Tests.Integration/RuntimeTests.cs @@ -1,24 +1,21 @@ -using Microsoft.Extensions.DependencyInjection; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Options; using Moq; using NUnit.Framework; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Http; -using Smidge; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Logging; using Umbraco.Core.Runtime; +using Umbraco.Extensions; using Umbraco.Tests.Common; using Umbraco.Tests.Integration.Extensions; using Umbraco.Tests.Integration.Implementations; using Umbraco.Tests.Integration.Testing; -using Umbraco.Web.Common.AspNetCore; -using Umbraco.Extensions; -using Umbraco.Tests.Common.Builders; -using Microsoft.Extensions.Options; namespace Umbraco.Tests.Integration { @@ -56,8 +53,8 @@ namespace Umbraco.Tests.Integration var testHelper = new TestHelper(); - var globalSettings = new GlobalSettingsBuilder().Build(); - var connectionStrings = new ConnectionStringsBuilder().Build(); + var globalSettings = new GlobalSettings(); + var connectionStrings = new ConnectionStrings(); // Create the core runtime var coreRuntime = new CoreRuntime(globalSettings, connectionStrings, testHelper.GetUmbracoVersion(), @@ -77,12 +74,12 @@ namespace Umbraco.Tests.Integration // TODO: found these registration were necessary here (as we haven't called the HostBuilder?), as dependencies for ComponentCollection // are not resolved. Need to check this if these explicit registrations are the best way to handle this. - var contentSettings = new ContentSettingsBuilder().Build(); - var coreDebugSettings = new CoreDebugSettingsBuilder().Build(); - var nuCacheSettings = new NuCacheSettingsBuilder().Build(); - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var userPasswordConfigurationSettings = new UserPasswordConfigurationSettingsBuilder().Build(); - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var contentSettings = new ContentSettings(); + var coreDebugSettings = new CoreDebugSettings(); + var nuCacheSettings = new NuCacheSettings(); + var requestHandlerSettings = new RequestHandlerSettings(); + var userPasswordConfigurationSettings = new UserPasswordConfigurationSettings(); + var webRoutingSettings = new WebRoutingSettings(); umbracoContainer.Register(x => Options.Create(globalSettings)); umbracoContainer.Register(x => Options.Create(contentSettings)); diff --git a/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs b/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs index b21de325cc..0eb29db247 100644 --- a/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs +++ b/src/Umbraco.Tests.Integration/Testing/UmbracoIntegrationTest.cs @@ -434,7 +434,6 @@ namespace Umbraco.Tests.Integration.Testing #region Builders - protected GlobalSettingsBuilder GlobalSettingsBuilder = new GlobalSettingsBuilder(); protected UserBuilder UserBuilder = new UserBuilder(); protected UserGroupBuilder UserGroupBuilder = new UserGroupBuilder(); diff --git a/src/Umbraco.Tests.Integration/Umbraco.Web.BackOffice.Security/BackOfficeCookieManagerTests.cs b/src/Umbraco.Tests.Integration/Umbraco.Web.BackOffice.Security/BackOfficeCookieManagerTests.cs index 6fd5672085..83760bd177 100644 --- a/src/Umbraco.Tests.Integration/Umbraco.Web.BackOffice.Security/BackOfficeCookieManagerTests.cs +++ b/src/Umbraco.Tests.Integration/Umbraco.Web.BackOffice.Security/BackOfficeCookieManagerTests.cs @@ -1,15 +1,13 @@ - - +using System; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; using Moq; using NUnit.Framework; -using System; using Umbraco.Core; using Umbraco.Core.Cache; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Hosting; using Umbraco.Extensions; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Integration.Implementations; using Umbraco.Web; using Umbraco.Web.BackOffice.Controllers; @@ -26,7 +24,7 @@ namespace Umbraco.Tests.Security var testHelper = new TestHelper(); var httpContextAccessor = testHelper.GetHttpContextAccessor(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var runtime = Mock.Of(x => x.Level == RuntimeLevel.Install); var mgr = new BackOfficeCookieManager( @@ -51,7 +49,7 @@ namespace Umbraco.Tests.Security //hostingEnvironment.ToAbsolute(globalSettings.UmbracoPath); var httpContextAccessor = testHelper.GetHttpContextAccessor(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var runtime = Mock.Of(x => x.Level == RuntimeLevel.Run); var mgr = new BackOfficeCookieManager( @@ -73,7 +71,7 @@ namespace Umbraco.Tests.Security var testHelper = new TestHelper(); var httpContextAccessor = testHelper.GetHttpContextAccessor(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var runtime = Mock.Of(x => x.Level == RuntimeLevel.Run); @@ -98,7 +96,7 @@ namespace Umbraco.Tests.Security var testHelper = new TestHelper(); var httpContextAccessor = testHelper.GetHttpContextAccessor(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var runtime = Mock.Of(x => x.Level == RuntimeLevel.Run); @@ -120,7 +118,7 @@ namespace Umbraco.Tests.Security var testHelper = new TestHelper(); var httpContextAccessor = testHelper.GetHttpContextAccessor(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var runtime = Mock.Of(x => x.Level == RuntimeLevel.Run); diff --git a/src/Umbraco.Tests.Integration/Views/template1.cshtml b/src/Umbraco.Tests.Integration/Views/template1.cshtml new file mode 100644 index 0000000000..64a9c8d55f --- /dev/null +++ b/src/Umbraco.Tests.Integration/Views/template1.cshtml @@ -0,0 +1,5 @@ +@using Umbraco.Web.PublishedModels; +@inherits Umbraco.Web.Common.AspNetCore.UmbracoViewPage +@{ + Layout = null; +} \ No newline at end of file diff --git a/src/Umbraco.Tests.Integration/Views/template2.cshtml b/src/Umbraco.Tests.Integration/Views/template2.cshtml new file mode 100644 index 0000000000..64a9c8d55f --- /dev/null +++ b/src/Umbraco.Tests.Integration/Views/template2.cshtml @@ -0,0 +1,5 @@ +@using Umbraco.Web.PublishedModels; +@inherits Umbraco.Web.Common.AspNetCore.UmbracoViewPage +@{ + Layout = null; +} \ No newline at end of file diff --git a/src/Umbraco.Tests.Integration/Views/test.cshtml b/src/Umbraco.Tests.Integration/Views/test.cshtml new file mode 100644 index 0000000000..64a9c8d55f --- /dev/null +++ b/src/Umbraco.Tests.Integration/Views/test.cshtml @@ -0,0 +1,5 @@ +@using Umbraco.Web.PublishedModels; +@inherits Umbraco.Web.Common.AspNetCore.UmbracoViewPage +@{ + Layout = null; +} \ No newline at end of file diff --git a/src/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs b/src/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs index c2ef2b4f04..c1b0c453c5 100644 --- a/src/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs +++ b/src/Umbraco.Tests.UnitTests/AutoFixture/AutoMoqDataAttribute.cs @@ -40,7 +40,7 @@ namespace Umbraco.Tests.UnitTests.AutoFixture { fixture.Customize( u => u.FromFactory( - (a,b,c) => BackOfficeIdentityUser.CreateNew(new GlobalSettingsBuilder().Build(),a,b,c))); + (a,b,c) => BackOfficeIdentityUser.CreateNew(new GlobalSettings(),a,b,c))); fixture .Customize(new ConstructorCustomization(typeof(UsersController), new GreedyConstructorQuery())) .Customize(new ConstructorCustomization(typeof(InstallController), new GreedyConstructorQuery())) diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/BackOffice/BackOfficeClaimsPrincipalFactoryTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/BackOffice/BackOfficeClaimsPrincipalFactoryTests.cs index 7d977fe686..13c73dfa96 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/BackOffice/BackOfficeClaimsPrincipalFactoryTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/BackOffice/BackOfficeClaimsPrincipalFactoryTests.cs @@ -9,6 +9,7 @@ using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.BackOffice; using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models.Membership; using Umbraco.Extensions; using Umbraco.Tests.Common.Builders; @@ -138,7 +139,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.BackOffice [SetUp] public void Setup() { - var globalSettings = new GlobalSettingsBuilder().WithDefaultUiLanguage("test").Build(); + var globalSettings = new GlobalSettings { DefaultUILanguage = "test" }; _testUser = new BackOfficeIdentityUser(globalSettings, _testUserId, new List()) { diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs index adf2b540e5..e22752d12f 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs @@ -55,19 +55,21 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation private static ContentSettings BuildContentSettings(string macroErrors = "inline", string culture = "en-US", string contentXPath = "", string autoFillImagePropertyAlias = "testAlias") { - return new ContentSettingsBuilder() - .WithMacroErrors(macroErrors) - .AddErrorPage() - .WithCulture(culture) - .WithContentId(1) - .WithContentXPath(contentXPath) - .Done() - .AddImaging() - .AddAutoFillImageProperty() - .WithAlias(autoFillImagePropertyAlias) - .Done() - .Done() - .Build(); + return new ContentSettings + { + MacroErrors = macroErrors, + Error404Collection = new ContentErrorPage[] + { + new ContentErrorPage { Culture = culture, ContentId = 1, ContentXPath = contentXPath }, + }, + Imaging = new ContentImagingSettings + { + AutoFillImageProperties = new ImagingAutoFillUploadField[] + { + new ImagingAutoFillUploadField { Alias = autoFillImagePropertyAlias, WidthFieldAlias = "w", HeightFieldAlias = "h", LengthFieldAlias = "l", ExtensionFieldAlias = "e" } + } + } + }; } } } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs index b055c626c7..2bf227d686 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs @@ -1,7 +1,6 @@ using NUnit.Framework; using Umbraco.Core.Configuration.Models; using Umbraco.Core.Configuration.Models.Validation; -using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation { @@ -37,12 +36,14 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation private static GlobalSettings BuildGlobalSettings(string smtpEmail = "test@test.com", string smtpDeliveryMethod = "Network") { - return new GlobalSettingsBuilder() - .AddSmtpSettings() - .WithFrom(smtpEmail) - .WithDeliveryMethod(smtpDeliveryMethod) - .Done() - .Build(); + return new GlobalSettings + { + Smtp = new SmtpSettings + { + From = smtpEmail, + DeliveryMethod = smtpDeliveryMethod, + } + }; } } } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs index eec97947f9..2122a62c64 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs @@ -1,6 +1,6 @@ using NUnit.Framework; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Configuration.Models.Validation; -using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation { @@ -11,7 +11,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation public void Returns_Success_ForValid_Configuration() { var validator = new HostingSettingsValidator(); - var options = new HostingSettingsBuilder().Build(); + var options = new HostingSettings(); var result = validator.Validate("settings", options); Assert.True(result.Succeeded); } @@ -20,7 +20,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation public void Returns_Fail_For_Configuration_With_Invalid_LocalTempStorage_Field() { var validator = new HostingSettingsValidator(); - var options = new HostingSettingsBuilder().WithLocalTempStorageLocation("invalid").Build(); + var options = new HostingSettings { LocalTempStorageLocation = "invalid" }; var result = validator.Validate("settings", options); Assert.False(result.Succeeded); } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs index 9388dedcb2..fe71509095 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs @@ -1,6 +1,6 @@ using NUnit.Framework; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Configuration.Models.Validation; -using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation { @@ -11,7 +11,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation public void Returns_Success_ForValid_Configuration() { var validator = new ModelsBuilderSettingsValidator(); - var options = new ModelsBuilderSettingsBuilder().Build(); + var options = new ModelsBuilderSettings(); var result = validator.Validate("settings", options); Assert.True(result.Succeeded); } @@ -20,7 +20,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation public void Returns_Fail_For_Configuration_With_Invalid_ModelsMode_Field() { var validator = new ModelsBuilderSettingsValidator(); - var options = new ModelsBuilderSettingsBuilder().WithModelsMode("invalid").Build(); + var options = new ModelsBuilderSettings { ModelsMode = "invalid" }; var result = validator.Validate("settings", options); Assert.False(result.Succeeded); } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs index 4548d95ccf..f579fec695 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/RequestHandlerSettingsValidatorTests.cs @@ -1,6 +1,6 @@ using NUnit.Framework; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Configuration.Models.Validation; -using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation { @@ -11,7 +11,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation public void Returns_Success_ForValid_Configuration() { var validator = new RequestHandlerSettingsValidator(); - var options = new RequestHandlerSettingsBuilder().Build(); + var options = new RequestHandlerSettings(); var result = validator.Validate("settings", options); Assert.True(result.Succeeded); } @@ -20,7 +20,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation public void Returns_Fail_For_Configuration_With_Invalid_ConvertUrlsToAscii_Field() { var validator = new RequestHandlerSettingsValidator(); - var options = new RequestHandlerSettingsBuilder().WithConvertUrlsToAscii("invalid").Build(); + var options = new RequestHandlerSettings { ConvertUrlsToAscii = "invalid" }; var result = validator.Validate("settings", options); Assert.False(result.Succeeded); } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/UriExtensionsTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/UriExtensionsTests.cs index 77a7ba1732..e832f13671 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/UriExtensionsTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/UriExtensionsTests.cs @@ -18,7 +18,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Extensions public void Setup() { _hostEnvironment = Mock.Of(); - _globalSettings = new GlobalSettingsBuilder().Build(); + _globalSettings = new GlobalSettings(); } private IWebHostEnvironment _hostEnvironment; @@ -69,7 +69,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Extensions private AspNetCoreHostingEnvironment CreateHostingEnvironment(string virtualPath = "") { - var hostingSettings = new HostingSettingsBuilder().WithApplicationVirtualPath(virtualPath).Build(); + var hostingSettings = new HostingSettings { ApplicationVirtualPath = virtualPath }; var mockedOptionsMonitorOfHostingSettings = Mock.Of>(x => x.CurrentValue == hostingSettings); return new AspNetCoreHostingEnvironment(mockedOptionsMonitorOfHostingSettings, _hostEnvironment); } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/UriUtilityTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/UriUtilityTests.cs index 7a2a4c5965..e577fc28fa 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/UriUtilityTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/UriUtilityTests.cs @@ -1,10 +1,8 @@ using System; using Moq; using NUnit.Framework; -using Umbraco.Core.Configuration; -using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Hosting; -using Umbraco.Tests.Common.Builders; using Umbraco.Web; namespace Umbraco.Tests.UnitTests.Umbraco.Core.Routing @@ -71,7 +69,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Routing { // Arrange var sourceUri = new Uri(sourceUrl, UriKind.Relative); - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(trailingSlash).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = trailingSlash }; var uriUtility = BuildUriUtility("/"); // Act diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs index afa4b543ca..80c8b057ab 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs @@ -3,10 +3,10 @@ using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.ModelsBuilder.Embedded; using Umbraco.ModelsBuilder.Embedded.Building; -using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded { @@ -41,7 +41,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.ModelsBuilder.Embedded { }; - var modelsBuilderConfig = new ModelsBuilderSettingsBuilder().Build(); + var modelsBuilderConfig = new ModelsBuilderSettings(); var builder = new TextBuilder(modelsBuilderConfig, types); var btypes = builder.TypeModels; @@ -152,7 +152,7 @@ namespace Umbraco.Web.PublishedModels " } }; - var modelsBuilderConfig = new ModelsBuilderSettingsBuilder().Build(); + var modelsBuilderConfig = new ModelsBuilderSettings(); var builder = new TextBuilder(modelsBuilderConfig, types); var btypes = builder.TypeModels; @@ -264,7 +264,7 @@ namespace Umbraco.Web.PublishedModels { }; - var modelsBuilderConfig = new ModelsBuilderSettingsBuilder().Build(); + var modelsBuilderConfig = new ModelsBuilderSettings(); var builder = new TextBuilder(modelsBuilderConfig, types); builder.ModelsNamespace = "Umbraco.ModelsBuilder.Models"; // forces conflict with Umbraco.ModelsBuilder.Umbraco var btypes = builder.TypeModels; diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilderTests.cs deleted file mode 100644 index 7a95df708e..0000000000 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ConnectionStringsBuilderTests.cs +++ /dev/null @@ -1,26 +0,0 @@ -using NUnit.Framework; -using Umbraco.Tests.Common.Builders; - -namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders -{ - [TestFixture] - public class ConnectionStringsBuilderTests - { - [Test] - public void Is_Built_Correctly() - { - // Arrange - const string umbracoConnectionString = "Server=(LocalDB)\\Umbraco;Database=FakeName;Integrated Security=true"; - - var builder = new ConnectionStringsBuilder(); - - // Act - var connectionStrings = builder - .WithUmbracoConnectionString(umbracoConnectionString) - .Build(); - - // Assert - Assert.AreEqual(umbracoConnectionString, connectionStrings.UmbracoConnectionString.ConnectionString); - } - } -} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilderTests.cs deleted file mode 100644 index a9c6dac1e7..0000000000 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ContentSettingsBuilderTests.cs +++ /dev/null @@ -1,65 +0,0 @@ -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); - } - } -} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilderTests.cs deleted file mode 100644 index d576f44072..0000000000 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/CoreDebugSettingsBuilderTests.cs +++ /dev/null @@ -1,29 +0,0 @@ -using NUnit.Framework; -using Umbraco.Tests.Common.Builders; - -namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders -{ - [TestFixture] - public class CoreDebugSettingsBuilderTests - { - [Test] - public void Is_Built_Correctly() - { - // Arrange - const bool dumpOnTimeoutThreadAbort = true; - const bool logUncompletedScopes = true; - - var builder = new CoreDebugSettingsBuilder(); - - // Act - var coreDebugSettings = builder - .WithDumpOnTimeoutThreadAbort(dumpOnTimeoutThreadAbort) - .WithLogUncompletedScopes(logUncompletedScopes) - .Build(); - - // Assert - Assert.AreEqual(dumpOnTimeoutThreadAbort, coreDebugSettings.DumpOnTimeoutThreadAbort); - Assert.AreEqual(logUncompletedScopes, coreDebugSettings.LogUncompletedScopes); - } - } -} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilderTests.cs deleted file mode 100644 index 350572153f..0000000000 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/GlobalSettingsBuilderTests.cs +++ /dev/null @@ -1,104 +0,0 @@ -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); - } - } -} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilderTests.cs deleted file mode 100644 index aebe225ac8..0000000000 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/HostingSettingsBuilderTests.cs +++ /dev/null @@ -1,30 +0,0 @@ -using NUnit.Framework; -using Umbraco.Core.Configuration; -using Umbraco.Tests.Common.Builders; - -namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders -{ - [TestFixture] - public class HostingSettingsBuilderTests - { - [Test] - public void Is_Built_Correctly() - { - // Arrange - const bool debugMode = true; - const LocalTempStorage localTempStorageLocation = LocalTempStorage.AspNetTemp; - - var builder = new HostingSettingsBuilder(); - - // Act - var hostingSettings = builder - .WithDebug(debugMode) - .WithLocalTempStorageLocation(localTempStorageLocation) - .Build(); - - // Assert - Assert.AreEqual(debugMode, hostingSettings.Debug); - Assert.AreEqual(localTempStorageLocation, hostingSettings.LocalTempStorageLocationValue); - } - } -} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilderTests.cs deleted file mode 100644 index d3a388bbb6..0000000000 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/ModelsBuilderSettingsBuilderTests.cs +++ /dev/null @@ -1,27 +0,0 @@ -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); - } - } -} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilderTests.cs deleted file mode 100644 index 258a845f70..0000000000 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/NuCacheSettingsBuilderTests.cs +++ /dev/null @@ -1,26 +0,0 @@ -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); - } - } -} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilderTests.cs deleted file mode 100644 index 199b3dadde..0000000000 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/RequestHandlerSettingsBuilderTests.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using NUnit.Framework; -using Umbraco.Core.Configuration.UmbracoSettings; -using Umbraco.Tests.Common.Builders; -using static Umbraco.Core.Configuration.Models.RequestHandlerSettings; - -namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders -{ - [TestFixture] - public class RequestHandlerSettingsBuilderTests - { - [Test] - public void Is_Built_Correctly() - { - // Arrange - const bool addTrailingSlash = true; - const string convertUrlsToAscii = "try"; - var charCollection = new List { new CharItem { Char = "a", Replacement = "b" } }; - - var builder = new RequestHandlerSettingsBuilder(); - - // Act - var requestHandlerSettings = builder - .WithAddTrailingSlash(addTrailingSlash) - .WithConvertUrlsToAscii(convertUrlsToAscii) - .WithCharCollection(charCollection) - .Build(); - - // Assert - Assert.AreEqual(addTrailingSlash, requestHandlerSettings.AddTrailingSlash); - Assert.AreEqual(convertUrlsToAscii, requestHandlerSettings.ConvertUrlsToAscii); - Assert.AreEqual("a-b", string.Join(",", requestHandlerSettings.CharCollection.Select(x => $"{x.Char}-{x.Replacement}"))); - } - } -} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilderTests.cs deleted file mode 100644 index e3f4bcf04e..0000000000 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ConfigurationModelBuilders/WebRoutingSettingsBuilderTests.cs +++ /dev/null @@ -1,47 +0,0 @@ -using NUnit.Framework; -using Umbraco.Tests.Common.Builders; - -namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders -{ - [TestFixture] - public class WebRoutingSettingsBuilderTests - { - [Test] - public void Is_Built_Correctly() - { - // Arrange - const bool disableAlternativeTemplates = true; - const bool disableFindContentByIdPath = true; - const bool disableRedirectUrlTracking = true; - const bool internalRedirectPreservesTemplate = true; - const bool trySkipIisCustomErrors = true; - const string umbracoApplicationUrl = "/test/"; - const string urlProviderMode = "test"; - const bool validateAlternativeTemplates = true; - - var builder = new WebRoutingSettingsBuilder(); - - // Act - var webRoutingSettings = builder - .WithDisableAlternativeTemplates(disableAlternativeTemplates) - .WithDisableFindContentByIdPath(disableFindContentByIdPath) - .WithDisableRedirectUrlTracking(disableRedirectUrlTracking) - .WithInternalRedirectPreservesTemplate(internalRedirectPreservesTemplate) - .WithTrySkipIisCustomErrors(trySkipIisCustomErrors) - .WithUmbracoApplicationUrl(umbracoApplicationUrl) - .WithUrlProviderMode(urlProviderMode) - .WithValidateAlternativeTemplates(validateAlternativeTemplates) - .Build(); - - // Assert - Assert.AreEqual(disableAlternativeTemplates, webRoutingSettings.DisableAlternativeTemplates); - Assert.AreEqual(disableFindContentByIdPath, webRoutingSettings.DisableFindContentByIdPath); - Assert.AreEqual(disableRedirectUrlTracking, webRoutingSettings.DisableRedirectUrlTracking); - Assert.AreEqual(internalRedirectPreservesTemplate, webRoutingSettings.InternalRedirectPreservesTemplate); - Assert.AreEqual(trySkipIisCustomErrors, webRoutingSettings.TrySkipIisCustomErrors); - Assert.AreEqual(umbracoApplicationUrl, webRoutingSettings.UmbracoApplicationUrl); - Assert.AreEqual(urlProviderMode, webRoutingSettings.UrlProviderMode); - Assert.AreEqual(validateAlternativeTemplates, webRoutingSettings.ValidateAlternativeTemplates); - } - } -} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/BackOfficeAreaRoutesTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/BackOfficeAreaRoutesTests.cs index 2a096bbd47..54147e67b9 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/BackOfficeAreaRoutesTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/BackOfficeAreaRoutesTests.cs @@ -1,14 +1,13 @@ -using Microsoft.AspNetCore.Mvc; +using System.Linq; +using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.Options; using Moq; using NUnit.Framework; -using System.Linq; using Umbraco.Core; -using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Hosting; using Umbraco.Extensions; -using Umbraco.Tests.Common.Builders; using Umbraco.Web.BackOffice.Controllers; using Umbraco.Web.BackOffice.Routing; using Umbraco.Web.Common.Attributes; @@ -96,7 +95,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Web.Common.Routing private BackOfficeAreaRoutes GetBackOfficeAreaRoutes(RuntimeLevel level) { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var routes = new BackOfficeAreaRoutes( Options.Create(globalSettings), Mock.Of(x => x.ToAbsolute(It.IsAny()) == "/umbraco" && x.ApplicationVirtualPath == string.Empty), diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.Website/Controllers/SurfaceControllerTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Website/Controllers/SurfaceControllerTests.cs index 0d288b6310..81f6c5aa80 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.Website/Controllers/SurfaceControllerTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Website/Controllers/SurfaceControllerTests.cs @@ -1,5 +1,4 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; @@ -7,11 +6,11 @@ using Microsoft.Extensions.Options; using Moq; using NUnit.Framework; using Umbraco.Core.Cache; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Hosting; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Services; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Testing; using Umbraco.Web; using Umbraco.Web.PublishedCache; @@ -39,7 +38,7 @@ namespace Umbraco.Tests.Integration { var httpContextAccessor = Mock.Of(); var hostingEnvironment = Mock.Of(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var umbracoContextFactory = new UmbracoContextFactory( _umbracoContextAccessor, @@ -70,7 +69,7 @@ namespace Umbraco.Tests.Integration [Test] public void Umbraco_Context_Not_Null() { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var httpContextAccessor = Mock.Of(); var hostingEnvironment = Mock.Of(); @@ -109,7 +108,7 @@ namespace Umbraco.Tests.Integration var publishedSnapshotService = new Mock(); var httpContextAccessor = Mock.Of(); var hostingEnvironment = Mock.Of(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var umbracoContextFactory = new UmbracoContextFactory( _umbracoContextAccessor, @@ -144,7 +143,7 @@ namespace Umbraco.Tests.Integration [Test] public void Mock_Current_Page() { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var httpContextAccessor = Mock.Of(); var hostingEnvironment = Mock.Of(); diff --git a/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs b/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs index 13f58f8021..a8adb0093a 100644 --- a/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs +++ b/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs @@ -60,7 +60,7 @@ namespace Umbraco.Tests.Cache.PublishedCache _httpContextFactory = new FakeHttpContextFactory("~/Home"); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var umbracoContextAccessor = Factory.GetInstance(); _xml = new XmlDocument(); diff --git a/src/Umbraco.Tests/Components/ComponentTests.cs b/src/Umbraco.Tests/Components/ComponentTests.cs index e74516dab7..5bcde45681 100644 --- a/src/Umbraco.Tests/Components/ComponentTests.cs +++ b/src/Umbraco.Tests/Components/ComponentTests.cs @@ -9,6 +9,7 @@ using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; @@ -34,13 +35,13 @@ namespace Umbraco.Tests.Components var logger = Mock.Of(); var typeFinder = TestHelper.GetTypeFinder(); - var globalSettings = new GlobalSettingsBuilder().Build(); - var connectionStrings = new ConnectionStringsBuilder().Build(); + var globalSettings = new GlobalSettings(); + var connectionStrings = new ConnectionStrings(); var f = new UmbracoDatabaseFactory(logger, Options.Create(globalSettings), Options.Create(connectionStrings), new Lazy(() => new MapperCollection(Enumerable.Empty())), TestHelper.DbProviderFactoryCreator); var fs = new FileSystems(mock.Object, logger, TestHelper.IOHelper, Options.Create(globalSettings), TestHelper.GetHostingEnvironment()); - var coreDebug = new CoreDebugSettingsBuilder().Build(); + var coreDebug = new CoreDebugSettings(); var mediaFileSystem = Mock.Of(); - var p = new ScopeProvider(f, fs, Microsoft.Extensions.Options.Options.Create(coreDebug), mediaFileSystem, logger, typeFinder, NoAppCache.Instance); + var p = new ScopeProvider(f, fs, Options.Create(coreDebug), mediaFileSystem, logger, typeFinder, NoAppCache.Instance); mock.Setup(x => x.GetInstance(typeof (ILogger))).Returns(logger); mock.Setup(x => x.GetInstance(typeof (IProfilingLogger))).Returns(new ProfilingLogger(Mock.Of(), Mock.Of())); diff --git a/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs b/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs index 59d5aa516d..60940019e5 100644 --- a/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs +++ b/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs @@ -23,7 +23,7 @@ namespace Umbraco.Tests.Configurations ApplicationVirtualPath = rootPath })); - var globalSettings = new GlobalSettingsBuilder().WithUmbracoPath(path).Build(); + var globalSettings = new GlobalSettings { UmbracoPath = path }; Assert.AreEqual(outcome, globalSettings.GetUmbracoMvcAreaNoCache(hostingEnvironment)); } diff --git a/src/Umbraco.Tests/IO/FileSystemsTests.cs b/src/Umbraco.Tests/IO/FileSystemsTests.cs index 9d2df22739..ab8636cc18 100644 --- a/src/Umbraco.Tests/IO/FileSystemsTests.cs +++ b/src/Umbraco.Tests/IO/FileSystemsTests.cs @@ -6,17 +6,16 @@ using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Composing; -using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Composing.CompositionExtensions; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.IO; using Umbraco.Core.IO.MediaPathSchemes; using Umbraco.Core.Logging; using Umbraco.Core.Services; using Umbraco.Tests.Components; using Umbraco.Tests.TestHelpers; -using Umbraco.Core.Composing.CompositionExtensions; using Current = Umbraco.Web.Composing.Current; using FileSystems = Umbraco.Core.IO.FileSystems; -using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.IO { @@ -41,7 +40,7 @@ namespace Umbraco.Tests.IO composition.RegisterUnique(TestHelper.IOHelper); composition.RegisterUnique(TestHelper.GetHostingEnvironment()); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); composition.Register(x => Microsoft.Extensions.Options.Options.Create(globalSettings)); composition.ComposeFileSystems(); diff --git a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs index 50ba5a3223..472714ba0e 100644 --- a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs +++ b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs @@ -8,6 +8,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Scoping; @@ -438,7 +439,7 @@ namespace Umbraco.Tests.IO var phy = new PhysicalFileSystem(ioHelper, hostingEnvironment, logger, path, "ignore"); var container = Mock.Of(); - var globalSettings = Options.Create(new GlobalSettingsBuilder().Build()); + var globalSettings = Options.Create(new GlobalSettings()); var fileSystems = new FileSystems(container, logger, ioHelper, globalSettings, TestHelper.GetHostingEnvironment()) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem(phy); var sw = (ShadowWrapper) fs.InnerFileSystem; @@ -535,7 +536,7 @@ namespace Umbraco.Tests.IO var phy = new PhysicalFileSystem(ioHelper, hostingEnvironment, logger, path, "ignore"); var container = Mock.Of(); - var globalSettings = Options.Create(new GlobalSettingsBuilder().Build()); + var globalSettings = Options.Create(new GlobalSettings()); var fileSystems = new FileSystems(container, logger, ioHelper, globalSettings, TestHelper.GetHostingEnvironment()) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem( phy); var sw = (ShadowWrapper) fs.InnerFileSystem; @@ -591,7 +592,7 @@ namespace Umbraco.Tests.IO var phy = new PhysicalFileSystem(ioHelper, hostingEnvironment, logger, path, "ignore"); var container = Mock.Of(); - var globalSettings = Options.Create(new GlobalSettingsBuilder().Build()); + var globalSettings = Options.Create(new GlobalSettings()); var fileSystems = new FileSystems(container, logger, ioHelper, globalSettings, TestHelper.GetHostingEnvironment()) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem( phy); var sw = (ShadowWrapper)fs.InnerFileSystem; diff --git a/src/Umbraco.Tests/Models/MediaXmlTest.cs b/src/Umbraco.Tests/Models/MediaXmlTest.cs index 593a581f85..a1e2fdbfba 100644 --- a/src/Umbraco.Tests/Models/MediaXmlTest.cs +++ b/src/Umbraco.Tests/Models/MediaXmlTest.cs @@ -3,13 +3,11 @@ using System.Xml.Linq; using Moq; using NUnit.Framework; using Umbraco.Core; -using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Services; using Umbraco.Core.Strings; -using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; @@ -32,7 +30,7 @@ namespace Umbraco.Tests.Models // and then, this will reset the width, height... because the file does not exist, of course ;-( var logger = Mock.Of(); var scheme = Mock.Of(); - var contentSettings = new ContentSettingsBuilder().Build(); + var contentSettings = new ContentSettings(); var mediaFileSystem = new MediaFileSystem(Mock.Of(), scheme, logger, ShortStringHelper); var ignored = new FileUploadPropertyEditor(Mock.Of(), mediaFileSystem, Microsoft.Extensions.Options.Options.Create(contentSettings), DataTypeService, LocalizationService, LocalizedTextService, ShortStringHelper); diff --git a/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs b/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs index 90a352ad39..d5988439b4 100644 --- a/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs +++ b/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs @@ -6,10 +6,10 @@ using System.Linq; using System.Xml.Linq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models.Packaging; using Umbraco.Core.Packaging; using Umbraco.Core.Services; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; @@ -41,7 +41,7 @@ namespace Umbraco.Tests.Packaging HostingEnvironment, Factory.GetInstance(), Logger, UmbracoVersion, - Microsoft.Extensions.Options.Options.Create(new GlobalSettingsBuilder().Build()), + Microsoft.Extensions.Options.Options.Create(new GlobalSettings()), "createdPackages.config", //temp paths tempFolderPath: "~/" + _testBaseFolder + "/temp", diff --git a/src/Umbraco.Tests/Packaging/PackageDataInstallationTests.cs b/src/Umbraco.Tests/Packaging/PackageDataInstallationTests.cs index ed1cd5424d..c5c71e0277 100644 --- a/src/Umbraco.Tests/Packaging/PackageDataInstallationTests.cs +++ b/src/Umbraco.Tests/Packaging/PackageDataInstallationTests.cs @@ -6,6 +6,8 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Composing.CompositionExtensions; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.Packaging; @@ -13,12 +15,10 @@ using Umbraco.Core.Packaging; using Umbraco.Core.Persistence.Dtos; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; +using Umbraco.Core.Strings; using Umbraco.Tests.Services; using Umbraco.Tests.Services.Importing; using Umbraco.Tests.Testing; -using Umbraco.Core.Composing.CompositionExtensions; -using Umbraco.Core.Strings; -using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.Packaging { @@ -713,7 +713,7 @@ namespace Umbraco.Tests.Packaging private void AddLanguages() { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var norwegian = new Core.Models.Language(globalSettings, "nb-NO"); var english = new Core.Models.Language(globalSettings, "en-GB"); ServiceContext.LocalizationService.Save(norwegian, 0); diff --git a/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs b/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs index 3b4edd28c1..5d0f878ebd 100644 --- a/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs +++ b/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs @@ -5,18 +5,14 @@ using System.Linq; using Moq; using NUnit.Framework; using Umbraco.Core; -using Umbraco.Core.Composing; -using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Hosting; -using Umbraco.Core.IO; -using Umbraco.Core.Models; using Umbraco.Core.Models.Packaging; using Umbraco.Core.Packaging; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Scoping; using Umbraco.Core.Services; using Umbraco.Core.Strings; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; using File = System.IO.File; @@ -51,7 +47,7 @@ namespace Umbraco.Tests.Packaging new ConflictingPackageData( ServiceContext.MacroService, ServiceContext.FileService), - Microsoft.Extensions.Options.Options.Create(new GlobalSettingsBuilder().Build())); + Microsoft.Extensions.Options.Options.Create(new GlobalSettings())); private PackageDataInstallation PackageDataInstallation => new PackageDataInstallation( Logger, ServiceContext.FileService, ServiceContext.MacroService, ServiceContext.LocalizationService, @@ -60,7 +56,7 @@ namespace Umbraco.Tests.Packaging Factory.GetInstance(), Factory.GetInstance(), Factory.GetInstance(), - Microsoft.Extensions.Options.Options.Create(new GlobalSettingsBuilder().Build()), + Microsoft.Extensions.Options.Options.Create(new GlobalSettings()), Factory.GetInstance()); private IPackageInstallation PackageInstallation => new PackageInstallation( diff --git a/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs b/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs index 7483b5c611..d7d58f8d4e 100644 --- a/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs +++ b/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs @@ -9,16 +9,14 @@ using NPoco; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Logging; using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Mappers; using Umbraco.Core.Persistence.SqlSyntax; -using Umbraco.Core.Services; using Umbraco.Persistance.SqlCe; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; -using Umbraco.Web.Security; namespace Umbraco.Tests.Persistence { @@ -40,8 +38,8 @@ namespace Umbraco.Tests.Persistence _sqlSyntaxProviders = new[] { (ISqlSyntaxProvider) _sqlCeSyntaxProvider }; _logger = Mock.Of(); _umbracoVersion = TestHelper.GetUmbracoVersion(); - var globalSettings = new GlobalSettingsBuilder().Build(); - var connectionStrings = new ConnectionStringsBuilder().Build(); + var globalSettings = new GlobalSettings(); + var connectionStrings = new ConnectionStrings(); _databaseFactory = new UmbracoDatabaseFactory(_logger, Options.Create(globalSettings), Options.Create(connectionStrings), new Lazy(() => Mock.Of()), TestHelper.DbProviderFactoryCreator); } diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs index 0d6797bd9c..a5074bf758 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -32,7 +32,7 @@ namespace Umbraco.Tests.Persistence.Repositories CreateTestData(); - _globalSettings = Microsoft.Extensions.Options.Options.Create(new GlobalSettingsBuilder().Build()); + _globalSettings = Microsoft.Extensions.Options.Options.Create(new GlobalSettings()); } private DocumentRepository CreateRepository(IScopeAccessor scopeAccessor, out ContentTypeRepository contentTypeRepository) diff --git a/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs index 03cfe1af53..45539094ec 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs @@ -21,6 +21,7 @@ using Umbraco.Core.Services; using Umbraco.Tests.Testing; using Umbraco.Web.PropertyEditors; using Umbraco.Tests.Common.Builders; +using Umbraco.Core.Configuration.Models; namespace Umbraco.Tests.Persistence.Repositories { @@ -63,7 +64,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateRepository(IScopeAccessor scopeAccessor, out ContentTypeRepository contentTypeRepository, out TemplateRepository templateRepository, AppCaches appCaches = null) { - var globalSettings = Microsoft.Extensions.Options.Options.Create(new GlobalSettingsBuilder().Build()); + var globalSettings = Microsoft.Extensions.Options.Options.Create(new GlobalSettings()); appCaches = appCaches ?? AppCaches; diff --git a/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs index c3bf9db5de..2e531626cf 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs @@ -4,6 +4,7 @@ using System.Data; using System.Linq; using Moq; using NUnit.Framework; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Models; using Umbraco.Core.Persistence.Repositories.Implement; @@ -22,7 +23,7 @@ namespace Umbraco.Tests.Persistence.Repositories { private DomainRepository CreateRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository, out DocumentRepository documentRepository, out LanguageRepository languageRepository) { - var globalSettings = Microsoft.Extensions.Options.Options.Create(new GlobalSettingsBuilder().Build()); + var globalSettings = Microsoft.Extensions.Options.Options.Create(new GlobalSettings()); var accessor = (IScopeAccessor) provider; var templateRepository = new TemplateRepository(accessor, Core.Cache.AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper, ShortStringHelper); @@ -51,7 +52,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repo = CreateRepository(provider, out contentTypeRepo, out documentRepo, out langRepo); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var lang = new Language(globalSettings, isoName); langRepo.Save(lang); @@ -207,7 +208,7 @@ namespace Umbraco.Tests.Persistence.Repositories //more test data var lang1 = langRepo.GetByIsoCode("en-AU"); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var lang2 = new Language(globalSettings, "es"); langRepo.Save(lang2); var content2 = new Content("test", -1, ct) { CreatorId = 0, WriterId = 0 }; diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs index 119a207cb9..6318627c66 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs @@ -2,21 +2,21 @@ using System.Linq; using Moq; using NUnit.Framework; +using Umbraco.Core; using Umbraco.Core.Cache; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Dtos; using Umbraco.Core.Persistence.Repositories; +using Umbraco.Core.Persistence.Repositories.Implement; +using Umbraco.Core.PropertyEditors; +using Umbraco.Core.Scoping; +using Umbraco.Core.Services; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; -using Umbraco.Core.Persistence.Dtos; -using Umbraco.Core.Persistence.Repositories.Implement; -using Umbraco.Core.Scoping; using Umbraco.Tests.Testing; -using Umbraco.Core.Services; -using Umbraco.Core; -using Umbraco.Core.PropertyEditors; -using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.Persistence.Repositories { @@ -35,7 +35,7 @@ namespace Umbraco.Tests.Persistence.Repositories { appCaches = appCaches ?? AppCaches; var scopeAccessor = (IScopeAccessor) provider; - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var templateRepository = new TemplateRepository(scopeAccessor, appCaches, Logger, TestObjects.GetFileSystemsMock(), IOHelper, ShortStringHelper); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, appCaches, ShortStringHelper); var languageRepository = new LanguageRepository(scopeAccessor, appCaches, Logger, Microsoft.Extensions.Options.Options.Create(globalSettings)); diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs index fac2a6665a..692ac522d9 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs @@ -3,12 +3,12 @@ using System.Linq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Dtos; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.Scoping; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; @@ -22,7 +22,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MediaTypeRepository CreateRepository(IScopeProvider provider) { var cacheHelper = AppCaches.Disabled; - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var templateRepository = new TemplateRepository((IScopeAccessor)provider, cacheHelper, Logger, TestObjects.GetFileSystemsMock(), IOHelper, ShortStringHelper); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor)provider, templateRepository, AppCaches, ShortStringHelper); var languageRepository = new LanguageRepository((IScopeAccessor)provider, AppCaches, Logger, Microsoft.Extensions.Options.Options.Create(globalSettings)); diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs index 37d5260dc0..2da5b4c283 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs @@ -1,14 +1,12 @@ using System; using System.Diagnostics; using System.Linq; -using System.Xml.Linq; using Moq; using NPoco; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; -using Umbraco.Core.Configuration.UmbracoSettings; -using Umbraco.Core.Logging; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Dtos; @@ -17,7 +15,6 @@ using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Scoping; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; @@ -31,7 +28,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MemberRepository CreateRepository(IScopeProvider provider, out MemberTypeRepository memberTypeRepository, out MemberGroupRepository memberGroupRepository) { var accessor = (IScopeAccessor) provider; - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var templateRepository = Mock.Of(); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches, ShortStringHelper); var languageRepository = new LanguageRepository(accessor, AppCaches.Disabled, Logger, Microsoft.Extensions.Options.Options.Create(globalSettings)); diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs index be32305cfc..11c9363a4f 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs @@ -4,13 +4,13 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.Scoping; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; @@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MemberTypeRepository CreateRepository(IScopeProvider provider) { var templateRepository = Mock.Of(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor)provider, templateRepository, AppCaches, ShortStringHelper); var languageRepository = new LanguageRepository((IScopeAccessor)provider, AppCaches.Disabled, Mock.Of(), Microsoft.Extensions.Options.Options.Create(globalSettings)); return new MemberTypeRepository((IScopeAccessor) provider, AppCaches.Disabled, Mock.Of(), commonRepository, languageRepository, ShortStringHelper); diff --git a/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs index b31d490578..9677ac8982 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using Moq; using NUnit.Framework; -using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Scoping; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; @@ -307,7 +305,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository) { var accessor = (IScopeAccessor) provider; - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var templateRepository = new TemplateRepository(accessor, AppCaches, Logger, TestObjects.GetFileSystemsMock(), IOHelper, ShortStringHelper); var tagRepository = new TagRepository(accessor, AppCaches, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches, ShortStringHelper); diff --git a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs index 6a45dafa54..9ff27b8e50 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs @@ -42,7 +42,7 @@ namespace Umbraco.Tests.Persistence.Repositories private IScriptRepository CreateRepository() { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); return new ScriptRepository(_fileSystems, IOHelper, Microsoft.Extensions.Options.Options.Create(globalSettings)); } diff --git a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs index 028f99f89e..2be1843489 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs @@ -39,7 +39,7 @@ namespace Umbraco.Tests.Persistence.Repositories private IStylesheetRepository CreateRepository() { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); return new StylesheetRepository(_fileSystems, IOHelper, Microsoft.Extensions.Options.Options.Create(globalSettings)); } diff --git a/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs index 913fc876fe..9bbfc8a076 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs @@ -3,14 +3,12 @@ using System.Linq; using Moq; using NUnit.Framework; using Umbraco.Core.Cache; -using Umbraco.Core.Configuration.UmbracoSettings; -using Umbraco.Core.IO; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Scoping; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; @@ -956,7 +954,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateDocumentRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository) { var accessor = (IScopeAccessor) provider; - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper, ShortStringHelper); var tagRepository = new TagRepository(accessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches.Disabled, ShortStringHelper); @@ -974,7 +972,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MediaRepository CreateMediaRepository(IScopeProvider provider, out MediaTypeRepository mediaTypeRepository) { var accessor = (IScopeAccessor) provider; - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper, ShortStringHelper); var tagRepository = new TagRepository(accessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches.Disabled, ShortStringHelper); diff --git a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs index 448fce9579..fb017385ce 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs @@ -29,7 +29,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MediaRepository CreateMediaRepository(IScopeProvider provider, out IMediaTypeRepository mediaTypeRepository) { var accessor = (IScopeAccessor) provider; - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper, ShortStringHelper); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches, ShortStringHelper); var languageRepository = new LanguageRepository(accessor, AppCaches, Logger, Microsoft.Extensions.Options.Options.Create(globalSettings)); @@ -54,7 +54,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateContentRepository(IScopeProvider provider, out IContentTypeRepository contentTypeRepository, out ITemplateRepository templateRepository) { var accessor = (IScopeAccessor) provider; - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); templateRepository = new TemplateRepository(accessor, AppCaches, Logger, TestObjects.GetFileSystemsMock(), IOHelper, ShortStringHelper); var tagRepository = new TagRepository(accessor, AppCaches, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches, ShortStringHelper); @@ -72,7 +72,7 @@ namespace Umbraco.Tests.Persistence.Repositories private UserRepository CreateRepository(IScopeProvider provider) { var accessor = (IScopeAccessor) provider; - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var repository = new UserRepository(accessor, AppCaches.Disabled, Logger, Mappers, Microsoft.Extensions.Options.Options.Create(globalSettings), Microsoft.Extensions.Options.Options.Create(new UserPasswordConfigurationSettings()), new JsonNetSerializer()); return repository; } diff --git a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs index 1fe7153dd0..676e46e06d 100644 --- a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs +++ b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs @@ -18,7 +18,7 @@ namespace Umbraco.Tests.Persistence [UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)] public class SqlCeTableByTableTest : TestWithDatabaseBase { - public GlobalSettings GlobalSettings => new GlobalSettingsBuilder().Build(); + public GlobalSettings GlobalSettings => new GlobalSettings(); [Test] public void Can_Create_umbracoNode_Table() diff --git a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs b/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs index 439036fa16..9d43ee2067 100644 --- a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs +++ b/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs @@ -5,11 +5,11 @@ using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Strings; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Components; using Umbraco.Tests.TestHelpers; using Current = Umbraco.Web.Composing.Current; @@ -28,7 +28,7 @@ namespace Umbraco.Tests.PropertyEditors var register = TestHelper.GetRegister(); var composition = new Composition(register, TestHelper.GetMockedTypeLoader(), Mock.Of(), ComponentTests.MockRuntimeState(RuntimeLevel.Run), TestHelper.IOHelper, AppCaches.NoCache); - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); register.Register(_ => new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings))); diff --git a/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs b/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs index e50d6fe8ab..564e50d2bd 100644 --- a/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs +++ b/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs @@ -7,6 +7,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Events; using Umbraco.Core.Hosting; using Umbraco.Core.Logging; @@ -19,7 +20,6 @@ using Umbraco.Core.Services; using Umbraco.Core.Services.Changes; using Umbraco.Core.Strings; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing.Objects; @@ -139,8 +139,8 @@ namespace Umbraco.Tests.PublishedContent var typeFinder = TestHelper.GetTypeFinder(); - var globalSettings = new GlobalSettingsBuilder().Build(); - var nuCacheSettings = new NuCacheSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); + var nuCacheSettings = new NuCacheSettings(); // at last, create the complete NuCache snapshot service! var options = new PublishedSnapshotServiceOptions { IgnoreLocalDb = true }; diff --git a/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs b/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs index 010569fe42..74052df9b6 100644 --- a/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs +++ b/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs @@ -6,6 +6,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; @@ -17,7 +18,6 @@ using Umbraco.Core.Services; using Umbraco.Core.Services.Changes; using Umbraco.Core.Strings; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing.Objects; @@ -179,8 +179,8 @@ namespace Umbraco.Tests.PublishedContent var typeFinder = TestHelper.GetTypeFinder(); - var globalSettings = new GlobalSettingsBuilder().Build(); - var nuCacheSettings = new NuCacheSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); + var nuCacheSettings = new NuCacheSettings(); // at last, create the complete NuCache snapshot service! var options = new PublishedSnapshotServiceOptions { IgnoreLocalDb = true }; diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs index 50e82998f9..d02a49385d 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs @@ -4,10 +4,10 @@ using System.Collections.ObjectModel; using System.Linq; using Moq; using NUnit.Framework; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Services; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; using Umbraco.Web; @@ -39,7 +39,7 @@ namespace Umbraco.Tests.PublishedContent // Spanish falls back to English and Italian to Spanish (and then to English). // French has no fall back. // Danish, Swedish and Norweigan create an invalid loop. - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var languages = new List { new Language(globalSettings, "en-US") { Id = 1, CultureName = "English", IsDefault = true }, diff --git a/src/Umbraco.Tests/Routing/BaseUrlProviderTest.cs b/src/Umbraco.Tests/Routing/BaseUrlProviderTest.cs index a4f472898e..9860b5739f 100644 --- a/src/Umbraco.Tests/Routing/BaseUrlProviderTest.cs +++ b/src/Umbraco.Tests/Routing/BaseUrlProviderTest.cs @@ -1,9 +1,9 @@ using System.Linq; using Moq; using Umbraco.Core; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Web; using Umbraco.Web.Routing; @@ -24,8 +24,8 @@ namespace Umbraco.Tests.Routing protected override void ComposeSettings() { - var contentSettings = new ContentSettingsBuilder().Build(); - var userPasswordConfigurationSettings = new UserPasswordConfigurationSettingsBuilder().Build(); + var contentSettings = new ContentSettings(); + var userPasswordConfigurationSettings = new UserPasswordConfigurationSettings(); Composition.Register(x => Microsoft.Extensions.Options.Options.Create(contentSettings)); Composition.Register(x => Microsoft.Extensions.Options.Options.Create(userPasswordConfigurationSettings)); @@ -33,7 +33,7 @@ namespace Umbraco.Tests.Routing protected IPublishedUrlProvider GetPublishedUrlProvider(IUmbracoContext umbracoContext, DefaultUrlProvider urlProvider) { - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); return new UrlProvider( new TestUmbracoContextAccessor(umbracoContext), Microsoft.Extensions.Options.Options.Create(webRoutingSettings), diff --git a/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs index 069aead6b3..100c398b7f 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs @@ -1,6 +1,6 @@ using NUnit.Framework; using Umbraco.Core; -using Umbraco.Tests.Common.Builders; +using Umbraco.Core.Configuration.Models; using Umbraco.Tests.TestHelpers; using Umbraco.Web; using Umbraco.Web.Routing; @@ -18,7 +18,7 @@ namespace Umbraco.Tests.Routing var umbracoContext = GetUmbracoContext(urlAsString); var publishedRouter = CreatePublishedRouter(); var frequest = publishedRouter.CreateRequest(umbracoContext); - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); var lookup = new ContentFinderByIdPath(Microsoft.Extensions.Options.Options.Create(webRoutingSettings), Logger, Factory.GetInstance()); diff --git a/src/Umbraco.Tests/Routing/ContentFinderByUrlAndTemplateTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByUrlAndTemplateTests.cs index 14a7ec3ab1..a8a5f68df8 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByUrlAndTemplateTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByUrlAndTemplateTests.cs @@ -1,14 +1,9 @@ -using Moq; -using NUnit.Framework; -using Umbraco.Core; -using Umbraco.Core.Composing; -using Umbraco.Core.Configuration; -using Umbraco.Tests.TestHelpers; -using Umbraco.Web.Routing; +using NUnit.Framework; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; +using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; -using Current = Umbraco.Web.Composing.Current; -using Umbraco.Tests.Common.Builders; +using Umbraco.Web.Routing; namespace Umbraco.Tests.Routing { @@ -31,16 +26,14 @@ namespace Umbraco.Tests.Routing [TestCase("/home/Sub1.aspx/blah")] public void Match_Document_By_Url_With_Template(string urlAsString) { - var globalSettings = new GlobalSettingsBuilder() - .WithHideTopLevelNodeFromPath(false) - .Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var template1 = CreateTemplate("test"); var template2 = CreateTemplate("blah"); var umbracoContext = GetUmbracoContext(urlAsString, template1.Id, globalSettings: globalSettings); var publishedRouter = CreatePublishedRouter(); var frequest = publishedRouter.CreateRequest(umbracoContext); - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); var lookup = new ContentFinderByUrlAndTemplate(Logger, ServiceContext.FileService, ServiceContext.ContentTypeService, Microsoft.Extensions.Options.Options.Create(webRoutingSettings)); var result = lookup.TryFindContent(frequest); diff --git a/src/Umbraco.Tests/Routing/ContentFinderByUrlTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByUrlTests.cs index 0614d4a2bb..9564181889 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByUrlTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByUrlTests.cs @@ -1,11 +1,7 @@ using System; using System.Globalization; -using Moq; using NUnit.Framework; -using Umbraco.Core; -using Umbraco.Web.Composing; -using Umbraco.Core.Configuration; -using Umbraco.Tests.Common.Builders; +using Umbraco.Core.Configuration.Models; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; using Umbraco.Web.Routing; @@ -29,7 +25,7 @@ namespace Umbraco.Tests.Routing [TestCase("/test-page", 1172)] public void Match_Document_By_Url_Hide_Top_Level(string urlString, int expectedId) { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(true).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = true }; var snapshotService = CreatePublishedSnapshotService(globalSettings); var umbracoContext = GetUmbracoContext(urlString, globalSettings:globalSettings, snapshotService: snapshotService); @@ -64,7 +60,7 @@ namespace Umbraco.Tests.Routing [TestCase("/home/Sub1.aspx", 1173)] public void Match_Document_By_Url(string urlString, int expectedId) { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext(urlString, globalSettings:globalSettings); var publishedRouter = CreatePublishedRouter(); @@ -88,7 +84,7 @@ namespace Umbraco.Tests.Routing [TestCase("/home/sub1/custom-sub-4-with-æøå", 1180)] public void Match_Document_By_Url_With_Special_Characters(string urlString, int expectedId) { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext(urlString, globalSettings:globalSettings); var publishedRouter = CreatePublishedRouter(); @@ -114,7 +110,7 @@ namespace Umbraco.Tests.Routing [TestCase("/home/sub1/custom-sub-4-with-æøå", 1180)] public void Match_Document_By_Url_With_Special_Characters_Using_Hostname(string urlString, int expectedId) { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext(urlString, globalSettings:globalSettings); var publishedRouter = CreatePublishedRouter(); @@ -142,7 +138,7 @@ namespace Umbraco.Tests.Routing [TestCase("/æøå/home/sub1/custom-sub-4-with-æøå", 1180)] public void Match_Document_By_Url_With_Special_Characters_In_Hostname(string urlString, int expectedId) { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext(urlString, globalSettings:globalSettings); var publishedRouter = CreatePublishedRouter(); diff --git a/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs index 622df53d9e..b7ab02eeff 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs @@ -3,6 +3,7 @@ using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; @@ -128,7 +129,7 @@ namespace Umbraco.Tests.Routing { SetDomains3(); - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(true).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = true }; var umbracoContext = GetUmbracoContext(url, globalSettings:globalSettings); var publishedRouter = CreatePublishedRouter(Factory); @@ -169,7 +170,7 @@ namespace Umbraco.Tests.Routing // defaults depend on test environment expectedCulture = expectedCulture ?? System.Threading.Thread.CurrentThread.CurrentUICulture.Name; - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(true).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = true }; var umbracoContext = GetUmbracoContext(url, globalSettings:globalSettings); var publishedRouter = CreatePublishedRouter(Factory); diff --git a/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs b/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs index 0d39092b88..fd5d12b672 100644 --- a/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs +++ b/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs @@ -1,12 +1,9 @@ -using Moq; -using NUnit.Framework; -using Umbraco.Core.Models; -using Umbraco.Tests.TestHelpers; -using Umbraco.Web.Routing; +using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; -using Umbraco.Core.Configuration; -using Umbraco.Tests.Common.Builders; +using Umbraco.Core.Configuration.Models; +using Umbraco.Core.Models; +using Umbraco.Web.Routing; namespace Umbraco.Tests.Routing { @@ -267,8 +264,7 @@ namespace Umbraco.Tests.Routing { SetDomains1(); - - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext(inputUrl, globalSettings:globalSettings); var publishedRouter = CreatePublishedRouter(Factory); @@ -316,7 +312,7 @@ namespace Umbraco.Tests.Routing // defaults depend on test environment expectedCulture = expectedCulture ?? System.Threading.Thread.CurrentThread.CurrentUICulture.Name; - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext(inputUrl, globalSettings:globalSettings); var publishedRouter = CreatePublishedRouter(Factory); @@ -370,7 +366,7 @@ namespace Umbraco.Tests.Routing { SetDomains3(); - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext(inputUrl, globalSettings:globalSettings); var publishedRouter = CreatePublishedRouter(Factory); var frequest = publishedRouter.CreateRequest(umbracoContext); diff --git a/src/Umbraco.Tests/Routing/GetContentUrlsTests.cs b/src/Umbraco.Tests/Routing/GetContentUrlsTests.cs index 27027c007f..c2c4c2f05a 100644 --- a/src/Umbraco.Tests/Routing/GetContentUrlsTests.cs +++ b/src/Umbraco.Tests/Routing/GetContentUrlsTests.cs @@ -8,7 +8,6 @@ using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Services; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Web.Routing; @@ -25,9 +24,9 @@ namespace Umbraco.Tests.Routing { base.SetUp(); - _globalSettings = new GlobalSettingsBuilder().Build(); - _webRoutingSettings = new WebRoutingSettingsBuilder().Build(); - _requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); + _globalSettings = new GlobalSettings(); + _webRoutingSettings = new WebRoutingSettings(); + _requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; } private ILocalizedTextService GetTextService() diff --git a/src/Umbraco.Tests/Routing/MediaUrlProviderTests.cs b/src/Umbraco.Tests/Routing/MediaUrlProviderTests.cs index b134934ee9..5a6ea14419 100644 --- a/src/Umbraco.Tests/Routing/MediaUrlProviderTests.cs +++ b/src/Umbraco.Tests/Routing/MediaUrlProviderTests.cs @@ -4,7 +4,7 @@ using Moq; using Newtonsoft.Json; using NUnit.Framework; using Umbraco.Core; -using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; @@ -13,7 +13,6 @@ using Umbraco.Core.PropertyEditors; using Umbraco.Core.PropertyEditors.ValueConverters; using Umbraco.Core.Services; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.PublishedContent; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; @@ -35,7 +34,7 @@ namespace Umbraco.Tests.Routing var logger = Mock.Of(); var mediaFileSystemMock = Mock.Of(); - var contentSettings = new ContentSettingsBuilder().Build(); + var contentSettings = new ContentSettings(); var dataTypeService = Mock.Of(); var propertyEditors = new MediaUrlGeneratorCollection(new IMediaUrlGenerator[] { @@ -150,7 +149,7 @@ namespace Umbraco.Tests.Routing private IPublishedUrlProvider GetPublishedUrlProvider(IUmbracoContext umbracoContext) { - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); return new UrlProvider( new TestUmbracoContextAccessor(umbracoContext), Microsoft.Extensions.Options.Options.Create(webRoutingSettings), diff --git a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs index 5082919dc1..9ef758db8b 100644 --- a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs +++ b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs @@ -73,7 +73,7 @@ namespace Umbraco.Tests.Routing var umbracoApiControllerTypes = new UmbracoApiControllerTypeCollection(Composition.TypeLoader.GetUmbracoApiControllers()); Composition.RegisterUnique(umbracoApiControllerTypes); - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); Composition.RegisterUnique(_ => new DefaultShortStringHelper(Microsoft.Extensions.Options.Options.Create(requestHandlerSettings))); } diff --git a/src/Umbraco.Tests/Routing/RoutableDocumentFilterTests.cs b/src/Umbraco.Tests/Routing/RoutableDocumentFilterTests.cs index c0b83b08cb..e3d6477988 100644 --- a/src/Umbraco.Tests/Routing/RoutableDocumentFilterTests.cs +++ b/src/Umbraco.Tests/Routing/RoutableDocumentFilterTests.cs @@ -2,6 +2,7 @@ using System.Web.Mvc; using System.Web.Routing; using NUnit.Framework; +using Umbraco.Core.Configuration.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Web; @@ -51,10 +52,7 @@ namespace Umbraco.Tests.Routing { //reset the app config, we only want to test routes not the hard coded paths - var globalSettings = new GlobalSettingsBuilder() - .WithReservedPaths(string.Empty) - .WithReservedUrls(String.Empty) - .Build(); + var globalSettings = new GlobalSettings { ReservedPaths = string.Empty, ReservedUrls = string.Empty }; var routableDocFilter = new RoutableDocumentFilter(globalSettings, IOHelper); diff --git a/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs b/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs index ceea358a42..31f627827b 100644 --- a/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs +++ b/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs @@ -24,9 +24,8 @@ namespace Umbraco.Tests.Routing // FIXME: be able to get the UmbracoModule from the container. any reason settings were from testobjects? //create the module var logger = Mock.Of(); - var globalSettings = new GlobalSettingsBuilder() - .WithReservedPaths((GlobalSettings.StaticReservedPaths + "~/umbraco")) - .Build(); + + var globalSettings = new GlobalSettings { ReservedPaths = GlobalSettings.StaticReservedPaths + "~/umbraco" }; var runtime = Umbraco.Core.RuntimeState.Booting(); _module = new UmbracoInjectedModule diff --git a/src/Umbraco.Tests/Routing/UrlProviderWithHideTopLevelNodeFromPathTests.cs b/src/Umbraco.Tests/Routing/UrlProviderWithHideTopLevelNodeFromPathTests.cs index 2c5bfc52e9..18e0480a7b 100644 --- a/src/Umbraco.Tests/Routing/UrlProviderWithHideTopLevelNodeFromPathTests.cs +++ b/src/Umbraco.Tests/Routing/UrlProviderWithHideTopLevelNodeFromPathTests.cs @@ -1,7 +1,6 @@ using NUnit.Framework; using Umbraco.Core.Configuration.Models; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Testing; using Umbraco.Web.Routing; @@ -15,7 +14,7 @@ namespace Umbraco.Tests.Routing public override void SetUp() { - _globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(HideTopLevelNodeFromPath).Build(); + _globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = HideTopLevelNodeFromPath }; base.SetUp(); PublishedSnapshotService = CreatePublishedSnapshotService(_globalSettings); @@ -40,8 +39,7 @@ namespace Umbraco.Tests.Routing [TestCase(1172, "/test-page/")] // not hidden because not first root public void Get_Url_Hiding_Top_Level(int nodeId, string niceUrlMatch) { - - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings: _globalSettings, snapshotService:PublishedSnapshotService); var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext); diff --git a/src/Umbraco.Tests/Routing/UrlProviderWithoutHideTopLevelNodeFromPathTests.cs b/src/Umbraco.Tests/Routing/UrlProviderWithoutHideTopLevelNodeFromPathTests.cs index e8f3bf97fd..ea64aa43f2 100644 --- a/src/Umbraco.Tests/Routing/UrlProviderWithoutHideTopLevelNodeFromPathTests.cs +++ b/src/Umbraco.Tests/Routing/UrlProviderWithoutHideTopLevelNodeFromPathTests.cs @@ -8,7 +8,6 @@ using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.LegacyXmlPublishedCache; using Umbraco.Tests.PublishedContent; using Umbraco.Tests.Testing; @@ -25,7 +24,7 @@ namespace Umbraco.Tests.Routing public UrlProviderWithoutHideTopLevelNodeFromPathTests() { - _globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(HideTopLevelNodeFromPath).Build(); + _globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = HideTopLevelNodeFromPath }; } protected override bool HideTopLevelNodeFromPath => false; @@ -43,7 +42,7 @@ namespace Umbraco.Tests.Routing [Test] public void Ensure_Cache_Is_Correct() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(false).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = false }; var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings: _globalSettings); var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext); @@ -104,7 +103,7 @@ namespace Umbraco.Tests.Routing [TestCase(1172, "/test-page/")] public void Get_Url_Not_Hiding_Top_Level(int nodeId, string niceUrlMatch) { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings: _globalSettings); var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext); @@ -124,7 +123,7 @@ namespace Umbraco.Tests.Routing { const string currentUri = "http://example.us/test"; - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; var contentType = new PublishedContentType(Guid.NewGuid(), 666, "alias", PublishedItemType.Content, Enumerable.Empty(), Enumerable.Empty(), ContentVariation.Culture); var publishedContent = new SolidPublishedContent(contentType) { Id = 1234 }; @@ -170,7 +169,7 @@ namespace Umbraco.Tests.Routing { const string currentUri = "http://example.fr/test"; - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; var contentType = new PublishedContentType(Guid.NewGuid(), 666, "alias", PublishedItemType.Content, Enumerable.Empty(), Enumerable.Empty(), ContentVariation.Culture); var publishedContent = new SolidPublishedContent(contentType) { Id = 1234 }; @@ -225,7 +224,7 @@ namespace Umbraco.Tests.Routing { const string currentUri = "http://example.us/test"; - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; var contentType = new PublishedContentType(Guid.NewGuid(), 666, "alias", PublishedItemType.Content, Enumerable.Empty(), Enumerable.Empty(), ContentVariation.Culture); var publishedContent = new SolidPublishedContent(contentType) { Id = 1234 }; @@ -276,7 +275,7 @@ namespace Umbraco.Tests.Routing [Test] public void Get_Url_Relative_Or_Absolute() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; var umbracoContext = GetUmbracoContext("http://example.com/test", 1111, globalSettings: _globalSettings); var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext); @@ -296,7 +295,7 @@ namespace Umbraco.Tests.Routing [Test] public void Get_Url_Unpublished() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); var urlProvider = new DefaultUrlProvider(Microsoft.Extensions.Options.Options.Create(requestHandlerSettings), Logger, diff --git a/src/Umbraco.Tests/Routing/UrlRoutesTests.cs b/src/Umbraco.Tests/Routing/UrlRoutesTests.cs index d0dd708561..4894e1ad7e 100644 --- a/src/Umbraco.Tests/Routing/UrlRoutesTests.cs +++ b/src/Umbraco.Tests/Routing/UrlRoutesTests.cs @@ -4,6 +4,7 @@ using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.LegacyXmlPublishedCache; @@ -197,7 +198,7 @@ DetermineRouteById(id): [TestCase(2006, false, "/x/b/e")] public void GetRouteByIdNoHide(int id, bool hide, string expected) { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(hide).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = hide }; var umbracoContext = GetUmbracoContext("/test", 0, globalSettings: globalSettings); var cache = umbracoContext.Content as PublishedContentCache; @@ -220,7 +221,7 @@ DetermineRouteById(id): [TestCase(2006, true, "/b/e")] // risky! public void GetRouteByIdHide(int id, bool hide, string expected) { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(hide).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = hide }; var snapshotService = CreatePublishedSnapshotService(globalSettings); var umbracoContext = GetUmbracoContext("/test", 0, globalSettings: globalSettings, snapshotService: snapshotService); @@ -234,7 +235,7 @@ DetermineRouteById(id): [Test] public void GetRouteByIdCache() { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var snapshotService = CreatePublishedSnapshotService(globalSettings); var umbracoContext = GetUmbracoContext("/test", 0, globalSettings:globalSettings, snapshotService: snapshotService); @@ -265,7 +266,7 @@ DetermineRouteById(id): [TestCase("/x", false, 2000)] public void GetByRouteNoHide(string route, bool hide, int expected) { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(hide).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = hide }; var snapshotService = CreatePublishedSnapshotService(globalSettings); var umbracoContext = GetUmbracoContext("/test", 0, globalSettings:globalSettings, snapshotService: snapshotService); @@ -296,7 +297,7 @@ DetermineRouteById(id): [TestCase("/b/c", true, 1002)] // (hence the 2005 collision) public void GetByRouteHide(string route, bool hide, int expected) { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(hide).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = hide }; var snapshotService = CreatePublishedSnapshotService(globalSettings); var umbracoContext = GetUmbracoContext("/test", 0, globalSettings:globalSettings, snapshotService: snapshotService); @@ -319,7 +320,7 @@ DetermineRouteById(id): [Test] public void GetByRouteCache() { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var snapshotService = CreatePublishedSnapshotService(globalSettings); var umbracoContext = GetUmbracoContext("/test", 0, globalSettings:globalSettings, snapshotService:snapshotService); diff --git a/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs b/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs index a960cdba53..b5142ae480 100644 --- a/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs +++ b/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs @@ -4,11 +4,11 @@ using System.Linq; using Moq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Services; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.LegacyXmlPublishedCache; using Umbraco.Web; using Umbraco.Web.Routing; @@ -177,9 +177,8 @@ namespace Umbraco.Tests.Routing [TestCase(10011, "https://domain1.com", false, "/1001-1/")] public void Get_Url_SimpleDomain(int nodeId, string currentUrl, bool absolute, string expected) { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); - - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings: globalSettings); var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext); @@ -212,8 +211,8 @@ namespace Umbraco.Tests.Routing [TestCase(10011, "https://domain1.com", false, "http://domain1.com/foo/1001-1/")] public void Get_Url_SimpleWithSchemeAndPath(int nodeId, string currentUrl, bool absolute, string expected) { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings: globalSettings); var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext); @@ -238,9 +237,8 @@ namespace Umbraco.Tests.Routing [TestCase(1002, "http://domain1.com", false, "/1002/")] public void Get_Url_DeepDomain(int nodeId, string currentUrl, bool absolute, string expected) { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); - - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings: globalSettings); var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext); @@ -271,9 +269,8 @@ namespace Umbraco.Tests.Routing [TestCase(100321, "http://domain3.com", false, "/fr/1003-2-1/")] public void Get_Url_NestedDomains(int nodeId, string currentUrl, bool absolute, string expected) { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); - - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings: globalSettings); var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext); @@ -295,9 +292,8 @@ namespace Umbraco.Tests.Routing [Test] public void Get_Url_DomainsAndCache() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); - - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext("/test", 1111, globalSettings: globalSettings); var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext); @@ -361,9 +357,8 @@ namespace Umbraco.Tests.Routing [Test] public void Get_Url_Relative_Or_Absolute() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); - - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext("http://domain1.com/test", 1111, globalSettings: globalSettings); var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext); @@ -388,9 +383,8 @@ namespace Umbraco.Tests.Routing [Test] public void Get_Url_Alternate() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); - - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; var umbracoContext = GetUmbracoContext("http://domain1.com/en/test", 1111, globalSettings: globalSettings); var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext); @@ -417,7 +411,7 @@ namespace Umbraco.Tests.Routing private IPublishedUrlProvider GetPublishedUrlProvider(IUmbracoContext umbracoContext, DefaultUrlProvider urlProvider) { - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); return new UrlProvider( new TestUmbracoContextAccessor(umbracoContext), Microsoft.Extensions.Options.Options.Create(webRoutingSettings), diff --git a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs index 03faa70d8c..d4fac0cf9b 100644 --- a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs +++ b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs @@ -3,14 +3,14 @@ using System.Linq; using Moq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; -using Umbraco.Web.Routing; using Umbraco.Core.Services; +using Umbraco.Tests.Common; using Umbraco.Tests.LegacyXmlPublishedCache; using Umbraco.Web; -using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; +using Umbraco.Web.Routing; namespace Umbraco.Tests.Routing { @@ -32,8 +32,8 @@ namespace Umbraco.Tests.Routing [Test] public void DoNotPolluteCache() { - var globalSettings = new GlobalSettingsBuilder().WithHideTopLevelNodeFromPath(false).Build(); - var requestHandlerSettings = new RequestHandlerSettingsBuilder().WithAddTrailingSlash(true).Build(); + var requestHandlerSettings = new RequestHandlerSettings { AddTrailingSlash = true }; + var globalSettings = new GlobalSettings { HideTopLevelNodeFromPath = false }; SetDomains1(); @@ -97,7 +97,7 @@ namespace Umbraco.Tests.Routing private IPublishedUrlProvider GetPublishedUrlProvider(IUmbracoContext umbracoContext, DefaultUrlProvider urlProvider) { - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); return new UrlProvider( new TestUmbracoContextAccessor(umbracoContext), Microsoft.Extensions.Options.Options.Create(webRoutingSettings), diff --git a/src/Umbraco.Tests/Runtimes/StandaloneTests.cs b/src/Umbraco.Tests/Runtimes/StandaloneTests.cs index 7c834d7cf3..aee0275fe0 100644 --- a/src/Umbraco.Tests/Runtimes/StandaloneTests.cs +++ b/src/Umbraco.Tests/Runtimes/StandaloneTests.cs @@ -39,6 +39,7 @@ using Umbraco.Tests.Common.Composing; using Umbraco.Core.Media; using Umbraco.Tests.Common.Builders; using Microsoft.Extensions.Options; +using Umbraco.Core.Configuration.Models; namespace Umbraco.Tests.Runtimes { @@ -65,8 +66,8 @@ namespace Umbraco.Tests.Runtimes var profiler = new LogProfiler(logger); var profilingLogger = new ProfilingLogger(logger, profiler); var appCaches = AppCaches.Disabled; - var globalSettings = new GlobalSettingsBuilder().Build(); - var connectionStrings = new ConnectionStringsBuilder().Build(); + var globalSettings = new GlobalSettings(); + var connectionStrings = new ConnectionStrings(); var typeFinder = TestHelper.GetTypeFinder(); var databaseFactory = new UmbracoDatabaseFactory(logger, Options.Create(globalSettings), Options.Create(connectionStrings), new Lazy(() => factory.GetInstance()), TestHelper.DbProviderFactoryCreator); var ioHelper = TestHelper.IOHelper; @@ -120,12 +121,12 @@ namespace Umbraco.Tests.Runtimes // TODO: found these registration were necessary here as dependencies for ComponentCollection // are not resolved. Need to check this if these explicit registrations are the best way to handle this. - var contentSettings = new ContentSettingsBuilder().Build(); - var coreDebugSettings = new CoreDebugSettingsBuilder().Build(); - var nuCacheSettings = new NuCacheSettingsBuilder().Build(); - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var userPasswordConfigurationSettings = new UserPasswordConfigurationSettingsBuilder().Build(); - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var contentSettings = new ContentSettings(); + var coreDebugSettings = new CoreDebugSettings(); + var nuCacheSettings = new NuCacheSettings(); + var requestHandlerSettings = new RequestHandlerSettings(); + var userPasswordConfigurationSettings = new UserPasswordConfigurationSettings(); + var webRoutingSettings = new WebRoutingSettings(); composition.Register(x => Options.Create(globalSettings)); composition.Register(x => Options.Create(contentSettings)); @@ -292,8 +293,8 @@ namespace Umbraco.Tests.Runtimes composition.RegisterEssentials(logger, profiler, profilingLogger, mainDom, appCaches, databaseFactory, typeLoader, runtimeState, typeFinder, ioHelper, umbracoVersion, TestHelper.DbProviderFactoryCreator, hostingEnvironment, backOfficeInfo); // create the core runtime and have it compose itself - var globalSettings = new GlobalSettingsBuilder().Build(); - var connectionStrings = new ConnectionStringsBuilder().Build(); + var globalSettings = new GlobalSettings(); + var connectionStrings = new ConnectionStrings(); var coreRuntime = new CoreRuntime(globalSettings, connectionStrings, umbracoVersion, ioHelper, logger, profiler, new AspNetUmbracoBootPermissionChecker(), hostingEnvironment, backOfficeInfo, TestHelper.DbProviderFactoryCreator, TestHelper.MainDom, typeFinder, AppCaches.NoCache); diff --git a/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs b/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs index 5ca6308bcd..f5748e7dba 100644 --- a/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs @@ -5,18 +5,18 @@ using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Events; -using Umbraco.Core.Models; using Umbraco.Core.IO; using Umbraco.Core.Logging; -using Umbraco.Core.Scoping; -using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.TestHelpers.Entities; +using Umbraco.Core.Models; using Umbraco.Core.Persistence.Mappers; +using Umbraco.Core.Scoping; using Umbraco.Core.Services; using Umbraco.Tests.Components; +using Umbraco.Tests.TestHelpers; +using Umbraco.Tests.TestHelpers.Entities; using Current = Umbraco.Web.Composing.Current; -using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.Scoping { @@ -39,7 +39,7 @@ namespace Umbraco.Tests.Scoping _testObjects = new TestObjects(register); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); composition.RegisterUnique(factory => new FileSystems(factory, factory.TryGetInstance(), TestHelper.IOHelper, Microsoft.Extensions.Options.Options.Create(globalSettings), TestHelper.GetHostingEnvironment())); composition.WithCollectionBuilder(); diff --git a/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs b/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs index 243ad50eef..fcc1d4c7b3 100644 --- a/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs @@ -90,7 +90,7 @@ namespace Umbraco.Tests.Scoping var typeFinder = TestHelper.GetTypeFinder(); - var nuCacheSettings = new NuCacheSettingsBuilder().Build(); + var nuCacheSettings = new NuCacheSettings(); return new PublishedSnapshotService( options, @@ -105,7 +105,7 @@ namespace Umbraco.Tests.Scoping documentRepository, mediaRepository, memberRepository, DefaultCultureAccessor, new DatabaseDataSource(Mock.Of()), - Microsoft.Extensions.Options.Options.Create(globalSettings ?? new GlobalSettingsBuilder().Build()), + Microsoft.Extensions.Options.Options.Create(globalSettings ?? new GlobalSettings()), Factory.GetInstance(), new NoopPublishedModelFactory(), new UrlSegmentProviderCollection(new[] { new DefaultUrlSegmentProvider(ShortStringHelper) }), diff --git a/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs b/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs index da90d7fefa..15e9162708 100644 --- a/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs @@ -33,7 +33,7 @@ namespace Umbraco.Tests.Scoping { base.SetUp(); - _globalSettings = new GlobalSettingsBuilder().Build(); + _globalSettings = new GlobalSettings(); } protected override void Compose() diff --git a/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs b/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs index 59610e43bd..21c9c2c67c 100644 --- a/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs @@ -5,6 +5,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; @@ -44,9 +45,9 @@ namespace Umbraco.Tests.Scoping protected override void ComposeSettings() { - var contentSettings = new ContentSettingsBuilder().Build(); - var globalSettings = new GlobalSettingsBuilder().Build(); - var userPasswordConfigurationSettings = new UserPasswordConfigurationSettingsBuilder().Build(); + var contentSettings = new ContentSettings(); + var globalSettings = new GlobalSettings(); + var userPasswordConfigurationSettings = new UserPasswordConfigurationSettings(); Composition.Register(x => Microsoft.Extensions.Options.Options.Create(contentSettings)); Composition.Register(x => Microsoft.Extensions.Options.Options.Create(globalSettings)); diff --git a/src/Umbraco.Tests/Security/OwinDataProtectorTokenProviderTests.cs b/src/Umbraco.Tests/Security/OwinDataProtectorTokenProviderTests.cs index 4874545571..66965ca632 100644 --- a/src/Umbraco.Tests/Security/OwinDataProtectorTokenProviderTests.cs +++ b/src/Umbraco.Tests/Security/OwinDataProtectorTokenProviderTests.cs @@ -229,7 +229,7 @@ namespace Umbraco.Tests.Security _mockDataProtector.Setup(x => x.Protect(It.IsAny())).Returns((byte[] originalBytes) => originalBytes); _mockDataProtector.Setup(x => x.Unprotect(It.IsAny())).Returns((byte[] originalBytes) => originalBytes); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); _mockUserManager = new Mock>(new Mock>().Object, null, null, null, null, null, null, null, null); diff --git a/src/Umbraco.Tests/Services/ContentServiceEventTests.cs b/src/Umbraco.Tests/Services/ContentServiceEventTests.cs index 208afe5b4b..c22679a820 100644 --- a/src/Umbraco.Tests/Services/ContentServiceEventTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceEventTests.cs @@ -26,7 +26,7 @@ namespace Umbraco.Tests.Services { base.SetUp(); ContentRepositoryBase.ThrowOnWarning = true; - _globalSettings = new GlobalSettingsBuilder().Build(); + _globalSettings = new GlobalSettings(); } public override void TearDown() diff --git a/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs b/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs index 02f6ad330f..24aac13ade 100644 --- a/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs +++ b/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs @@ -2,21 +2,17 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Composing; -using Umbraco.Core.Configuration.UmbracoSettings; -using Umbraco.Core.IO; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence.Dtos; -using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.Repositories.Implement; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Scoping; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.TestHelpers.Stubs; @@ -44,7 +40,7 @@ namespace Umbraco.Tests.Services private DocumentRepository CreateDocumentRepository(IScopeProvider provider) { var accessor = (IScopeAccessor)provider; - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper, ShortStringHelper); var tagRepo = new TagRepository(accessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, tRepository, AppCaches, ShortStringHelper); diff --git a/src/Umbraco.Tests/Services/ContentServicePublishBranchTests.cs b/src/Umbraco.Tests/Services/ContentServicePublishBranchTests.cs index 35bbaa5f68..51adfbeae9 100644 --- a/src/Umbraco.Tests/Services/ContentServicePublishBranchTests.cs +++ b/src/Umbraco.Tests/Services/ContentServicePublishBranchTests.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Services; using Umbraco.Tests.Common.Builders; @@ -426,7 +427,7 @@ namespace Umbraco.Tests.Services private void CreateTypes(out IContentType iContentType, out IContentType vContentType) { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var langDe = new Language(globalSettings, "de") { IsDefault = true }; ServiceContext.LocalizationService.Save(langDe); diff --git a/src/Umbraco.Tests/Services/ContentServiceTagsTests.cs b/src/Umbraco.Tests/Services/ContentServiceTagsTests.cs index 10bd82cbde..d443951cad 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTagsTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTagsTests.cs @@ -29,7 +29,7 @@ namespace Umbraco.Tests.Services { base.SetUp(); ContentRepositoryBase.ThrowOnWarning = true; - _globalSettings = new GlobalSettingsBuilder().Build(); + _globalSettings = new GlobalSettings(); } public override void TearDown() diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index 82d7235388..49767e02dd 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -46,7 +46,7 @@ namespace Umbraco.Tests.Services { base.SetUp(); ContentRepositoryBase.ThrowOnWarning = true; - _globalSettings = new GlobalSettingsBuilder().Build(); + _globalSettings = new GlobalSettings(); } public override void TearDown() diff --git a/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs b/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs index bef6fde816..bece3d2f68 100644 --- a/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs +++ b/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs @@ -62,7 +62,7 @@ namespace Umbraco.Tests.Services var typeFinder = TestHelper.GetTypeFinder(); - var nuCacheSettings = new NuCacheSettingsBuilder().Build(); + var nuCacheSettings = new NuCacheSettings(); return new PublishedSnapshotService( options, @@ -77,7 +77,7 @@ namespace Umbraco.Tests.Services documentRepository, mediaRepository, memberRepository, DefaultCultureAccessor, new DatabaseDataSource(Mock.Of()), - Microsoft.Extensions.Options.Options.Create(globalSettings ?? new GlobalSettingsBuilder().Build()), + Microsoft.Extensions.Options.Options.Create(globalSettings ?? new GlobalSettings()), Factory.GetInstance(), Mock.Of(), new UrlSegmentProviderCollection(new[] { new DefaultUrlSegmentProvider(ShortStringHelper) }), @@ -313,7 +313,7 @@ namespace Umbraco.Tests.Services var nlContentName = "Content nl-NL"; var nlCulture = "nl-NL"; - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); ServiceContext.LocalizationService.Save(new Language(globalSettings, nlCulture)); @@ -671,7 +671,7 @@ namespace Umbraco.Tests.Services // can change it to variant and back // can then switch one property to variant - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var languageEn = new Language(globalSettings, "en") { IsDefault = true }; ServiceContext.LocalizationService.Save(languageEn); @@ -1266,7 +1266,7 @@ namespace Umbraco.Tests.Services private void CreateFrenchAndEnglishLangs() { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var languageEn = new Language(globalSettings, "en") { IsDefault = true }; ServiceContext.LocalizationService.Save(languageEn); var languageFr = new Language(globalSettings, "fr"); diff --git a/src/Umbraco.Tests/Services/EntityServiceTests.cs b/src/Umbraco.Tests/Services/EntityServiceTests.cs index 8be2dcc962..ca2f123deb 100644 --- a/src/Umbraco.Tests/Services/EntityServiceTests.cs +++ b/src/Umbraco.Tests/Services/EntityServiceTests.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Threading; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Core.Persistence.DatabaseModelDefinitions; @@ -32,7 +33,7 @@ namespace Umbraco.Tests.Services if (_langFr == null && _langEs == null) { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); _langFr = new Language(globalSettings, "fr-FR"); _langEs = new Language(globalSettings, "es-ES"); ServiceContext.LocalizationService.Save(_langFr); diff --git a/src/Umbraco.Tests/Services/EntityXmlSerializerTests.cs b/src/Umbraco.Tests/Services/EntityXmlSerializerTests.cs index 8497208d93..1e8e6bd17d 100644 --- a/src/Umbraco.Tests/Services/EntityXmlSerializerTests.cs +++ b/src/Umbraco.Tests/Services/EntityXmlSerializerTests.cs @@ -23,7 +23,7 @@ namespace Umbraco.Tests.Services public override void SetUp() { base.SetUp(); - _globalSettings = new GlobalSettingsBuilder().Build(); + _globalSettings = new GlobalSettings(); } [Test] diff --git a/src/Umbraco.Tests/Services/LocalizationServiceTests.cs b/src/Umbraco.Tests/Services/LocalizationServiceTests.cs index 2785cdea27..4d3c5fdddc 100644 --- a/src/Umbraco.Tests/Services/LocalizationServiceTests.cs +++ b/src/Umbraco.Tests/Services/LocalizationServiceTests.cs @@ -36,7 +36,7 @@ namespace Umbraco.Tests.Services public override void SetUp() { base.SetUp(); - _globalSettings = new GlobalSettingsBuilder().Build(); + _globalSettings = new GlobalSettings(); } [Test] diff --git a/src/Umbraco.Tests/Services/SectionServiceTests.cs b/src/Umbraco.Tests/Services/SectionServiceTests.cs index 82fda67003..032d317ebc 100644 --- a/src/Umbraco.Tests/Services/SectionServiceTests.cs +++ b/src/Umbraco.Tests/Services/SectionServiceTests.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Threading; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models.Membership; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Testing; @@ -35,7 +36,7 @@ namespace Umbraco.Tests.Services private IUser CreateTestUser() { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var user = new User(globalSettings) { Name = "Test user", diff --git a/src/Umbraco.Tests/Services/UserServiceTests.cs b/src/Umbraco.Tests/Services/UserServiceTests.cs index fef2fa30af..76eda054bc 100644 --- a/src/Umbraco.Tests/Services/UserServiceTests.cs +++ b/src/Umbraco.Tests/Services/UserServiceTests.cs @@ -6,6 +6,7 @@ using System.Text; using System.Threading; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Models.Membership; using Umbraco.Core.Persistence.Querying; @@ -721,7 +722,7 @@ namespace Umbraco.Tests.Services var hash = new HMACSHA1(); hash.Key = Encoding.Unicode.GetBytes(password); var encodedPassword = Convert.ToBase64String(hash.ComputeHash(Encoding.Unicode.GetBytes(password))); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var membershipUser = new User(globalSettings, "JohnDoe", "john@umbraco.io", encodedPassword, encodedPassword); userService.Save(membershipUser); diff --git a/src/Umbraco.Tests/Strings/CmsHelperCasingTests.cs b/src/Umbraco.Tests/Strings/CmsHelperCasingTests.cs index 71d789eddb..382d984e52 100644 --- a/src/Umbraco.Tests/Strings/CmsHelperCasingTests.cs +++ b/src/Umbraco.Tests/Strings/CmsHelperCasingTests.cs @@ -1,5 +1,6 @@ using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Strings; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; @@ -31,7 +32,7 @@ namespace Umbraco.Tests.Strings [TestCase("WhoIsNumber6InTheVillage", "Who Is Number6 In The Village")] // issue is fixed public void CompatibleDefaultReplacement(string input, string expected) { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); var helper = new DefaultShortStringHelper(Microsoft.Extensions.Options.Options.Create(requestHandlerSettings)); var output = input.Length < 2 ? input : helper.SplitPascalCasing(input, ' ').ToFirstUpperInvariant(); Assert.AreEqual(expected, output); diff --git a/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs b/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs index 12f5022b55..73e08ee1d8 100644 --- a/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs +++ b/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs @@ -6,9 +6,9 @@ using System.Text.RegularExpressions; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Strings; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Testing; namespace Umbraco.Tests.Strings @@ -24,7 +24,7 @@ namespace Umbraco.Tests.Strings // NOTE pre-filters runs _before_ Recode takes place // so there still may be utf8 chars even though you want ascii - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); _helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) .WithConfig(CleanStringType.FileName, new DefaultShortStringHelperConfig.Config { @@ -93,10 +93,7 @@ namespace Umbraco.Tests.Strings [Test] public void U4_4056() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder() - .WithConvertUrlsToAscii("false") - .WithCharCollection(Enumerable.Empty()) - .Build(); + var requestHandlerSettings = new RequestHandlerSettings { ConvertUrlsToAscii = "false", CharCollection = Enumerable.Empty() }; const string input = "ÆØÅ and æøå and 中文测试 and אודות האתר and größer БбДдЖж page"; @@ -118,10 +115,7 @@ namespace Umbraco.Tests.Strings [Test] public void U4_4056_TryAscii() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder() - .WithConvertUrlsToAscii("false") - .WithCharCollection(Enumerable.Empty()) - .Build(); + var requestHandlerSettings = new RequestHandlerSettings { ConvertUrlsToAscii = "false", CharCollection = Enumerable.Empty() }; const string input1 = "ÆØÅ and æøå and 中文测试 and אודות האתר and größer БбДдЖж page"; const string input2 = "ÆØÅ and æøå and größer БбДдЖж page"; @@ -144,7 +138,8 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringUnderscoreInTerm() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings { ConvertUrlsToAscii = "false", CharCollection = Enumerable.Empty() }; + var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { @@ -169,7 +164,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringLeadingChars() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { @@ -198,7 +193,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringTermOnUpper() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { @@ -223,7 +218,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringAcronymOnNonUpper() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { @@ -254,7 +249,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringGreedyAcronyms() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { @@ -285,7 +280,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringWhiteSpace() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { @@ -299,7 +294,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringSeparator() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { @@ -335,7 +330,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringSymbols() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { @@ -390,7 +385,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringEncoding() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config @@ -414,10 +409,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringDefaultConfig() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder() - .WithCharCollection(Enumerable.Empty()) - .WithConvertUrlsToAscii("false") - .Build(); + var requestHandlerSettings = new RequestHandlerSettings { ConvertUrlsToAscii = "false", CharCollection = Enumerable.Empty() }; var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings)); @@ -440,7 +432,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringCasing() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { diff --git a/src/Umbraco.Tests/Templates/HtmlImageSourceParserTests.cs b/src/Umbraco.Tests/Templates/HtmlImageSourceParserTests.cs index 4dc7ad0278..4a796e67af 100644 --- a/src/Umbraco.Tests/Templates/HtmlImageSourceParserTests.cs +++ b/src/Umbraco.Tests/Templates/HtmlImageSourceParserTests.cs @@ -1,20 +1,16 @@ -using Umbraco.Core.Logging; +using System; +using System.Diagnostics; +using System.Linq; using Moq; using NUnit.Framework; -using Umbraco.Web.Templates; -using Umbraco.Web; -using Umbraco.Core.Models.PublishedContent; -using Umbraco.Web.Routing; -using Umbraco.Tests.Testing.Objects; -using System.Web; -using System; -using System.Linq; -using Umbraco.Core.Models; using Umbraco.Core; -using System.Diagnostics; -using Umbraco.Tests.TestHelpers; +using Umbraco.Core.Configuration.Models; +using Umbraco.Core.Models; +using Umbraco.Core.Models.PublishedContent; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Testing.Objects; +using Umbraco.Web.Routing; +using Umbraco.Web.Templates; namespace Umbraco.Tests.Templates { @@ -77,7 +73,7 @@ namespace Umbraco.Tests.Templates var umbracoContextFactory = TestUmbracoContextFactory.Create( umbracoContextAccessor: umbracoContextAccessor); - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); var publishedUrlProvider = new UrlProvider(umbracoContextAccessor, Microsoft.Extensions.Options.Options.Create(webRoutingSettings), new UrlProviderCollection(Enumerable.Empty()), diff --git a/src/Umbraco.Tests/Templates/HtmlLocalLinkParserTests.cs b/src/Umbraco.Tests/Templates/HtmlLocalLinkParserTests.cs index 375dc91d19..60fd2f103c 100644 --- a/src/Umbraco.Tests/Templates/HtmlLocalLinkParserTests.cs +++ b/src/Umbraco.Tests/Templates/HtmlLocalLinkParserTests.cs @@ -1,16 +1,13 @@ -using Moq; -using NUnit.Framework; -using System; +using System; using System.Linq; -using System.Web; +using Moq; +using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing.Objects; -using Umbraco.Web; using Umbraco.Web.Routing; using Umbraco.Web.Templates; @@ -73,7 +70,7 @@ namespace Umbraco.Tests.Templates var umbracoContextFactory = TestUmbracoContextFactory.Create( umbracoContextAccessor: umbracoContextAccessor); - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); var publishedUrlProvider = new UrlProvider(umbracoContextAccessor, Microsoft.Extensions.Options.Options.Create(webRoutingSettings), new UrlProviderCollection(new []{contentUrlProvider.Object}), diff --git a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs index e51a10da50..8f18d96a97 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs @@ -93,7 +93,7 @@ namespace Umbraco.Tests.TestHelpers internal PublishedRouter CreatePublishedRouter(IFactory container = null, ContentFinderCollection contentFinders = null) { - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); return CreatePublishedRouter(webRoutingSettings, container ?? Factory, contentFinders); } diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedUser.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedUser.cs index 4977b5d81a..4707c4af38 100644 --- a/src/Umbraco.Tests/TestHelpers/Entities/MockedUser.cs +++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedUser.cs @@ -1,8 +1,8 @@ -using Moq; -using System; +using System; using System.Collections.Generic; +using Moq; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models.Membership; -using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.TestHelpers.Entities { @@ -24,7 +24,7 @@ namespace Umbraco.Tests.TestHelpers.Entities internal static User CreateUser(string suffix = "") { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var user = new User(globalSettings) { Language = "en", @@ -43,7 +43,7 @@ namespace Umbraco.Tests.TestHelpers.Entities { var list = new List(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); for (int i = 0; i < amount; i++) { var name = "Member No-" + i; diff --git a/src/Umbraco.Tests/TestHelpers/TestHelper.cs b/src/Umbraco.Tests/TestHelpers/TestHelper.cs index 760fb7dbaa..4311abc52b 100644 --- a/src/Umbraco.Tests/TestHelpers/TestHelper.cs +++ b/src/Umbraco.Tests/TestHelpers/TestHelper.cs @@ -104,7 +104,7 @@ namespace Umbraco.Tests.TestHelpers public static IMainDom MainDom => _testHelperInternal.MainDom; public static UriUtility UriUtility => _testHelperInternal.UriUtility; - public static IEmailSender EmailSender { get; } = new EmailSender(Options.Create(new GlobalSettingsBuilder().Build())); + public static IEmailSender EmailSender { get; } = new EmailSender(Options.Create(new GlobalSettings())); /// diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index e101bb33a3..8e6dadaaeb 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -82,10 +82,10 @@ namespace Umbraco.Tests.TestHelpers public IScopeProvider GetScopeProvider(ILogger logger, ITypeFinder typeFinder = null, FileSystems fileSystems = null, IUmbracoDatabaseFactory databaseFactory = null) { - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var connectionString = ConfigurationManager.ConnectionStrings[Constants.System.UmbracoConnectionName].ConnectionString; - var connectionStrings = new ConnectionStringsBuilder().WithUmbracoConnectionString(connectionString).Build(); - var coreDebugSettings = new CoreDebugSettingsBuilder().Build(); + var connectionStrings = new ConnectionStrings { UmbracoConnectionString = new ConfigConnectionString(Constants.System.UmbracoConnectionName, connectionString) }; + var coreDebugSettings = new CoreDebugSettings(); if (databaseFactory == null) { diff --git a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs index f1a834021f..ad36b3e9c3 100644 --- a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs +++ b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs @@ -373,7 +373,7 @@ namespace Umbraco.Tests.TestHelpers httpContextAccessor, service, Mock.Of(), - globalSettings ?? new GlobalSettingsBuilder().Build(), + globalSettings ?? new GlobalSettings(), HostingEnvironment, new TestVariationContextAccessor(), UriUtility, diff --git a/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs b/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs index 8a08e2be07..04bae0372a 100644 --- a/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs +++ b/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs @@ -86,7 +86,7 @@ namespace Umbraco.Tests.Testing.TestingTests .Returns(UrlInfo.Url("/hello/world/1234")); var urlProvider = urlProviderMock.Object; - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); var theUrlProvider = new UrlProvider( new TestUmbracoContextAccessor(umbracoContext), Microsoft.Extensions.Options.Options.Create(webRoutingSettings), diff --git a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs index 0c39ee47f0..d6f65e4ce5 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs @@ -40,7 +40,6 @@ using Umbraco.Core.Services.Implement; using Umbraco.Core.Strings; using Umbraco.Net; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.Components; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Stubs; @@ -173,7 +172,7 @@ namespace Umbraco.Tests.Testing TypeFinder = new TypeFinder(logger, new DefaultUmbracoAssemblyProvider(GetType().Assembly), new VaryingRuntimeHash()); var appCaches = GetAppCaches(); - var globalSettings = new GlobalSettingsBuilder().Build(); + var globalSettings = new GlobalSettings(); var settings = new WebRoutingSettings(); IBackOfficeInfo backOfficeInfo = new AspNetBackOfficeInfo(globalSettings, IOHelper, logger, Microsoft.Extensions.Options.Options.Create(settings)); @@ -323,7 +322,7 @@ namespace Umbraco.Tests.Testing Composition.RegisterUnique(); Composition.RegisterUnique(); - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); Composition.RegisterUnique(factory => new UrlProvider( factory.GetInstance(), @@ -414,13 +413,13 @@ namespace Umbraco.Tests.Testing protected virtual void ComposeSettings() { - var contentSettings = new ContentSettingsBuilder().Build(); - var coreDebugSettings = new CoreDebugSettingsBuilder().Build(); - var globalSettings = new GlobalSettingsBuilder().Build(); - var nuCacheSettings = new NuCacheSettingsBuilder().Build(); - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var userPasswordConfigurationSettings = new UserPasswordConfigurationSettingsBuilder().Build(); - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var contentSettings = new ContentSettings(); + var coreDebugSettings = new CoreDebugSettings(); + var globalSettings = new GlobalSettings(); + var nuCacheSettings = new NuCacheSettings(); + var requestHandlerSettings = new RequestHandlerSettings(); + var userPasswordConfigurationSettings = new UserPasswordConfigurationSettings(); + var webRoutingSettings = new WebRoutingSettings(); Composition.Register(x => Microsoft.Extensions.Options.Options.Create(contentSettings)); Composition.Register(x => Microsoft.Extensions.Options.Options.Create(coreDebugSettings)); @@ -465,8 +464,8 @@ namespace Umbraco.Tests.Testing Composition.RegisterUnique(_ => new TransientEventMessagesFactory()); - var globalSettings = new GlobalSettingsBuilder().Build(); - var connectionStrings = new ConnectionStringsBuilder().Build(); + var globalSettings = new GlobalSettings(); + var connectionStrings = new ConnectionStrings(); Composition.RegisterUnique(f => new UmbracoDatabaseFactory(Logger, globalSettings, diff --git a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs index eac16e457f..0767bf3191 100644 --- a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs @@ -1,13 +1,10 @@ using System.IO; using NUnit.Framework; -using Umbraco.Core; using Umbraco.Core.Composing; -using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Logging; using Umbraco.Core.Logging.Serilog; using Umbraco.Core.Strings; -using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.Components; using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.UmbracoExamine @@ -34,7 +31,7 @@ namespace Umbraco.Tests.UmbracoExamine protected override void Compose() { base.Compose(); - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); + var requestHandlerSettings = new RequestHandlerSettings(); Composition.RegisterUnique(_ => new DefaultShortStringHelper(Microsoft.Extensions.Options.Options.Create(requestHandlerSettings))); } } diff --git a/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs b/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs index 8e0c534550..6950d69b3e 100644 --- a/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs +++ b/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs @@ -2,24 +2,18 @@ using System.Web; using System.Web.Mvc; using System.Web.Routing; -using System.Web.Security; using Moq; using NUnit.Framework; -using Umbraco.Core; using Umbraco.Core.Cache; -using Umbraco.Core.Dictionary; -using Umbraco.Core.Logging; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Services; using Umbraco.Tests.Common; -using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; using Umbraco.Web; using Umbraco.Web.Mvc; using Umbraco.Web.PublishedCache; -using Umbraco.Web.Security; -using Umbraco.Web.Security.Providers; using Current = Umbraco.Web.Composing.Current; namespace Umbraco.Tests.Web.Mvc @@ -156,7 +150,7 @@ namespace Umbraco.Tests.Web.Mvc var content = Mock.Of(publishedContent => publishedContent.Id == 12345); - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); var publishedRouter = BaseWebTest.CreatePublishedRouter(webRoutingSettings); var frequest = publishedRouter.CreateRequest(umbracoContext, new Uri("http://localhost/test")); frequest.PublishedContent = content; diff --git a/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs b/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs index 5e89f29496..e0e5aa0b2a 100644 --- a/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs +++ b/src/Umbraco.Tests/Web/Mvc/UmbracoViewPageTests.cs @@ -1,28 +1,25 @@ using System; using System.Globalization; -using System.Linq; using System.Web.Mvc; using System.Web.Routing; using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; -using Umbraco.Web.Composing; -using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Configuration.Models; using Umbraco.Core.Logging; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Services; -using Umbraco.Core.Strings; +using Umbraco.Tests.Common; using Umbraco.Tests.LegacyXmlPublishedCache; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; -using Umbraco.Tests.Common; using Umbraco.Web; +using Umbraco.Web.Composing; using Umbraco.Web.Models; using Umbraco.Web.Mvc; using Umbraco.Web.Routing; using Umbraco.Web.Security; -using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.Web.Mvc { @@ -388,7 +385,7 @@ namespace Umbraco.Tests.Web.Mvc { var umbracoContext = GetUmbracoContext("/dang", 0); - var webRoutingSettings = new WebRoutingSettingsBuilder().Build(); + var webRoutingSettings = new WebRoutingSettings(); var publishedRouter = BaseWebTest.CreatePublishedRouter(webRoutingSettings); var frequest = publishedRouter.CreateRequest(umbracoContext, new Uri("http://localhost/dang")); From fe158ec7d940956795158232b344f07d70371d49 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 21 Sep 2020 21:20:46 +0200 Subject: [PATCH 16/17] Removed custom validation of configuration enum values, reverting to framework based validation when binding direct to the enum values. --- .../Configuration/Models/ContentSettings.cs | 22 +-------------- .../Configuration/Models/HostingSettings.cs | 20 +------------ .../Models/ModelsBuilderSettings.cs | 25 ++--------------- .../Configuration/Models/SmtpSettings.cs | 19 +------------ .../Validation/ConfigurationValidatorBase.cs | 6 ---- .../Validation/ContentSettingsValidator.cs | 10 ------- .../Validation/GlobalSettingsValidator.cs | 6 ++-- .../Validation/HostingSettingsValidator.cs | 22 --------------- .../ModelsBuilderSettingsValidator.cs | 22 --------------- .../Models/WebRoutingSettings.cs | 2 +- src/Umbraco.Core/Routing/UrlProvider.cs | 9 +----- .../Users/EmailSender.cs | 2 +- .../BackOffice/DashboardReport.cs | 8 +++--- .../ModelsBuilderDashboardController.cs | 2 +- .../Building/Builder.cs | 2 +- .../Compose/ModelsBuilderComponent.cs | 2 +- .../Compose/ModelsBuilderComposer.cs | 2 +- .../LiveModelsProvider.cs | 2 +- .../ContentSettingsValidatorTests.cs | 12 +------- .../GlobalSettingsValidatorTests.cs | 12 +------- .../HostingSettingsValidatorTests.cs | 28 ------------------- .../ModelsBuilderSettingsValidatorTests.cs | 28 ------------------- .../AspNetCoreHostingEnvironment.cs | 2 +- .../UmbracoCoreServiceCollectionExtensions.cs | 8 ++---- .../Macros/MacroRenderer.cs | 2 +- .../AspNet/AspNetHostingEnvironment.cs | 2 +- src/Umbraco.Web/Macros/MacroRenderer.cs | 2 +- .../CDF/ClientDependencyComponent.cs | 2 +- 28 files changed, 30 insertions(+), 251 deletions(-) delete mode 100644 src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidator.cs delete mode 100644 src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidator.cs delete mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs delete mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs diff --git a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs index 8b1eb47b5b..65d7855dc7 100644 --- a/src/Umbraco.Core/Configuration/Models/ContentSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ContentSettings.cs @@ -20,27 +20,7 @@ namespace Umbraco.Core.Configuration.Models public string PreviewBadge { get; set; } = DefaultPreviewBadge; - // We could bind the enum MacroErrorsBehaviour directly from configuration, but we're doing so - // via this string to allow for validation to occur on start-up that the configured value does - // match one of the enum values. - // Without this it'll fail on first use, and we'd have less control over the error message. - internal string MacroErrors { get; set; } = MacroErrorBehaviour.Inline.ToString(); - - public MacroErrorBehaviour MacroErrorsBehaviour - { - get - { - if (Enum.TryParse(MacroErrors, true, out var value)) - { - return value; - } - - // We need to return somethhing valid here as this property is evalulated during start-up, and if there's an error - // in the configured value it won't be parsed to the enum. - // At run-time though this default won't be used, as an invalid value will be picked up by ContentSettingsValidator. - return MacroErrorBehaviour.Inline; - } - } + public MacroErrorBehaviour MacroErrors { get; set; } = MacroErrorBehaviour.Inline; public IEnumerable DisallowedUploadFiles { get; set; } = new[] { "ashx", "aspx", "ascx", "config", "cshtml", "vbhtml", "asmx", "air", "axd" }; diff --git a/src/Umbraco.Core/Configuration/Models/HostingSettings.cs b/src/Umbraco.Core/Configuration/Models/HostingSettings.cs index a6dec1f104..b003315c56 100644 --- a/src/Umbraco.Core/Configuration/Models/HostingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/HostingSettings.cs @@ -1,5 +1,4 @@ using System; -using Umbraco.Core.Configuration.Models.Validation; namespace Umbraco.Core.Configuration.Models { @@ -7,27 +6,10 @@ namespace Umbraco.Core.Configuration.Models { public string ApplicationVirtualPath { get; set; } - // See note on ContentSettings.MacroErrors - internal string LocalTempStorageLocation { get; set; } = LocalTempStorage.Default.ToString(); - /// /// Gets the configuration for the location of temporary files. /// - public LocalTempStorage LocalTempStorageLocationValue - { - get - { - if (Enum.TryParse(LocalTempStorageLocation, true, out var value)) - { - return value; - } - - // We need to return somethhing valid here as this property is evalulated during start-up, and if there's an error - // in the configured value it won't be parsed to the enum. - // At run-time though this default won't be used, as an invalid value will be picked up by HostingSettingsValidator. - return LocalTempStorage.Default; - } - } + public LocalTempStorage LocalTempStorageLocation { get; set; } = LocalTempStorage.Default; /// /// Gets a value indicating whether umbraco is running in [debug mode]. diff --git a/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs index faabcb8290..414165d2e4 100644 --- a/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/ModelsBuilderSettings.cs @@ -1,6 +1,4 @@ -using System; -using Umbraco.Configuration; -using Umbraco.Core.Configuration.Models.Validation; +using Umbraco.Configuration; namespace Umbraco.Core.Configuration.Models { @@ -20,27 +18,10 @@ namespace Umbraco.Core.Configuration.Models /// public bool Enable { get; set; } = false; - // See note on ContentSettings.MacroErrors - internal string ModelsMode { get; set; } = Configuration.ModelsMode.Nothing.ToString(); - /// /// Gets the models mode. /// - public ModelsMode ModelsModeValue - { - get - { - if (Enum.TryParse(ModelsMode, true, out var value)) - { - return value; - } - - // We need to return somethhing valid here as this property is evalulated during start-up, and if there's an error - // in the configured value it won't be parsed to the enum. - // At run-time though this default won't be used, as an invalid value will be picked up by ModelsBuilderSettingsValidator. - return Configuration.ModelsMode.Nothing; - } - } + public ModelsMode ModelsMode { get; set; } = ModelsMode.Nothing; /// /// Gets the models namespace. @@ -70,7 +51,7 @@ namespace Umbraco.Core.Configuration.Models set { - if (!ModelsModeValue.IsLive()) + if (!ModelsMode.IsLive()) { _flagOutOfDateModels = false; } diff --git a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs index ecc3b71a78..7c19f28d87 100644 --- a/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/SmtpSettings.cs @@ -17,24 +17,7 @@ namespace Umbraco.Core.Configuration.Models public string PickupDirectoryLocation { get; set; } - // See notes on ContentSettings.MacroErrors - internal string DeliveryMethod { get; set; } = SmtpDeliveryMethod.Network.ToString(); - - public SmtpDeliveryMethod DeliveryMethodValue - { - get - { - if (Enum.TryParse(DeliveryMethod, true, out var value)) - { - return value; - } - - // We need to return somethhing valid here as this property is evalulated during start-up, and if there's an error - // in the configured value it won't be parsed to the enum. - // At run-time though this default won't be used, as an invalid value will be picked up by GlobalSettingsValidator. - return SmtpDeliveryMethod.Network; - } - } + public SmtpDeliveryMethod DeliveryMethod { get; set; } = SmtpDeliveryMethod.Network; public string Username { get; set; } diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidatorBase.cs b/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidatorBase.cs index 4f69b326eb..fe8d077166 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidatorBase.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/ConfigurationValidatorBase.cs @@ -18,12 +18,6 @@ namespace Umbraco.Core.Configuration.Models.Validation return true; } - public bool ValidateStringIsOneOfEnumValues(string configPath, string value, Type enumType, out string message) - { - var validValues = Enum.GetValues(enumType).OfType().Select(x => x.ToString()); - return ValidateStringIsOneOfValidValues(configPath, value, validValues, out message); - } - public bool ValidateCollection(string configPath, IEnumerable values, string validationDescription, out string message) { if (values.Any(x => !x.IsValid())) diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidator.cs b/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidator.cs index 05835f5357..9ed22f922e 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidator.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidator.cs @@ -9,11 +9,6 @@ namespace Umbraco.Core.Configuration.Models.Validation public ValidateOptionsResult Validate(string name, ContentSettings options) { string message; - if (!ValidateMacroErrors(options.MacroErrors, out message)) - { - return ValidateOptionsResult.Fail(message); - } - if (!ValidateError404Collection(options.Error404Collection, out message)) { return ValidateOptionsResult.Fail(message); @@ -27,11 +22,6 @@ namespace Umbraco.Core.Configuration.Models.Validation return ValidateOptionsResult.Success; } - private bool ValidateMacroErrors(string value, out string message) - { - return ValidateStringIsOneOfEnumValues($"{Constants.Configuration.ConfigContent}:{nameof(ContentSettings.MacroErrors)}", value, typeof(MacroErrorBehaviour), out message); - } - private bool ValidateError404Collection(IEnumerable values, out string message) { return ValidateCollection($"{Constants.Configuration.ConfigContent}:{nameof(ContentSettings.Error404Collection)}", values, "Culture and one and only one of ContentId, ContentKey and ContentXPath must be specified for each entry", out message); diff --git a/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs index b178126821..ca3fee7999 100644 --- a/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs +++ b/src/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidator.cs @@ -1,5 +1,4 @@ -using System.Net.Mail; -using Microsoft.Extensions.Options; +using Microsoft.Extensions.Options; namespace Umbraco.Core.Configuration.Models.Validation { @@ -18,8 +17,7 @@ namespace Umbraco.Core.Configuration.Models.Validation private bool ValidateSmtpSetting(SmtpSettings value, out string message) { - return ValidateOptionalEntry($"{Constants.Configuration.ConfigGlobal}:{nameof(GlobalSettings.Smtp)}", value, "A valid From email address is required", out message) && - (value == null || ValidateStringIsOneOfEnumValues("Global:Smtp:DeliveryMethod", value.DeliveryMethod, typeof(SmtpDeliveryMethod), out message)); + return ValidateOptionalEntry($"{Constants.Configuration.ConfigGlobal}:{nameof(GlobalSettings.Smtp)}", value, "A valid From email address is required", out message); } } } diff --git a/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidator.cs b/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidator.cs deleted file mode 100644 index b035a5318b..0000000000 --- a/src/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidator.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.Extensions.Options; - -namespace Umbraco.Core.Configuration.Models.Validation -{ - public class HostingSettingsValidator : ConfigurationValidatorBase, IValidateOptions - { - public ValidateOptionsResult Validate(string name, HostingSettings options) - { - if (!ValidateLocalTempStorageLocation(options.LocalTempStorageLocation, out var message)) - { - return ValidateOptionsResult.Fail(message); - } - - return ValidateOptionsResult.Success; - } - - private bool ValidateLocalTempStorageLocation(string value, out string message) - { - return ValidateStringIsOneOfEnumValues($"{Constants.Configuration.ConfigHosting}:{nameof(HostingSettings.LocalTempStorageLocation)}", value, typeof(LocalTempStorage), out message); - } - } -} diff --git a/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidator.cs b/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidator.cs deleted file mode 100644 index aeae0e97ca..0000000000 --- a/src/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidator.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.Extensions.Options; - -namespace Umbraco.Core.Configuration.Models.Validation -{ - public class ModelsBuilderSettingsValidator : ConfigurationValidatorBase, IValidateOptions - { - public ValidateOptionsResult Validate(string name, ModelsBuilderSettings options) - { - if (!ValidateModelsMode(options.ModelsMode, out var message)) - { - return ValidateOptionsResult.Fail(message); - } - - return ValidateOptionsResult.Success; - } - - private bool ValidateModelsMode(string value, out string message) - { - return ValidateStringIsOneOfEnumValues($"{Constants.Configuration.ConfigModelsBuilder}:{nameof(ModelsBuilderSettings.ModelsMode)}", value, typeof(ModelsMode), out message); - } - } -} diff --git a/src/Umbraco.Core/Configuration/Models/WebRoutingSettings.cs b/src/Umbraco.Core/Configuration/Models/WebRoutingSettings.cs index 7e0c4d5d8c..476d58c913 100644 --- a/src/Umbraco.Core/Configuration/Models/WebRoutingSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/WebRoutingSettings.cs @@ -16,7 +16,7 @@ namespace Umbraco.Core.Configuration.Models public bool DisableRedirectUrlTracking { get; set; } = false; - public string UrlProviderMode { get; set; } = UrlMode.Auto.ToString(); + public UrlMode UrlProviderMode { get; set; } = UrlMode.Auto; public string UmbracoApplicationUrl { get; set; } } diff --git a/src/Umbraco.Core/Routing/UrlProvider.cs b/src/Umbraco.Core/Routing/UrlProvider.cs index 69d2e00276..9dd4a413a2 100644 --- a/src/Umbraco.Core/Routing/UrlProvider.cs +++ b/src/Umbraco.Core/Routing/UrlProvider.cs @@ -31,16 +31,9 @@ namespace Umbraco.Web.Routing _urlProviders = urlProviders; _mediaUrlProviders = mediaUrlProviders; _variationContextAccessor = variationContextAccessor ?? throw new ArgumentNullException(nameof(variationContextAccessor)); - var provider = UrlMode.Auto; - Mode = provider; - - if (Enum.TryParse(routingSettings.Value.UrlProviderMode, out provider)) - { - Mode = provider; - } + Mode = routingSettings.Value.UrlProviderMode; } - private readonly IUmbracoContextAccessor _umbracoContextAccessor; private readonly IEnumerable _urlProviders; private readonly IEnumerable _mediaUrlProviders; diff --git a/src/Umbraco.Infrastructure/Users/EmailSender.cs b/src/Umbraco.Infrastructure/Users/EmailSender.cs index 0aa7d12181..c45a9af0d3 100644 --- a/src/Umbraco.Infrastructure/Users/EmailSender.cs +++ b/src/Umbraco.Infrastructure/Users/EmailSender.cs @@ -89,7 +89,7 @@ namespace Umbraco.Core } var mailMessage = ConstructEmailMessage(message); - if (_globalSettings.Smtp.DeliveryMethodValue == SmtpDeliveryMethod.Network) + if (_globalSettings.Smtp.DeliveryMethod == SmtpDeliveryMethod.Network) { await client.SendAsync(mailMessage); } diff --git a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/DashboardReport.cs b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/DashboardReport.cs index 8b792343a3..c615559920 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/DashboardReport.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/DashboardReport.cs @@ -19,7 +19,7 @@ namespace Umbraco.ModelsBuilder.Embedded.BackOffice _mbErrors = mbErrors; } - public bool CanGenerate() => _config.ModelsModeValue.SupportsExplicitGeneration(); + public bool CanGenerate() => _config.ModelsMode.SupportsExplicitGeneration(); public bool AreModelsOutOfDate() => _outOfDateModels.IsOutOfDate; @@ -41,13 +41,13 @@ namespace Umbraco.ModelsBuilder.Embedded.BackOffice sb.Append("
      "); sb.Append("
    • The models factory is "); - sb.Append(_config.EnableFactory || _config.ModelsModeValue == ModelsMode.PureLive + sb.Append(_config.EnableFactory || _config.ModelsMode == ModelsMode.PureLive ? "enabled" : "not enabled. Umbraco will not use models"); sb.Append(".
    • "); - sb.Append(_config.ModelsModeValue != ModelsMode.Nothing - ? $"
    • {_config.ModelsModeValue} models are enabled.
    • " + sb.Append(_config.ModelsMode != ModelsMode.Nothing + ? $"
    • {_config.ModelsMode} models are enabled.
    • " : "
    • No models mode is specified: models will not be generated.
    • "); sb.Append($"
    • Models namespace is {_config.ModelsNamespace}.
    • "); diff --git a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs index 0240671c13..3adbc0df2c 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs @@ -51,7 +51,7 @@ namespace Umbraco.ModelsBuilder.Embedded.BackOffice { var config = _config; - if (!config.ModelsModeValue.SupportsExplicitGeneration()) + if (!config.ModelsMode.SupportsExplicitGeneration()) { var result2 = new BuildResult { Success = false, Message = "Models generation is not enabled." }; return Ok(result2); diff --git a/src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs index 871e221bbc..aa7ab40ba5 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/Building/Builder.cs @@ -92,7 +92,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Building { TypeModel.MapModelTypes(_typeModels, ModelsNamespace); - var pureLive = Config.ModelsModeValue == ModelsMode.PureLive; + var pureLive = Config.ModelsMode == ModelsMode.PureLive; // for the first two of these two tests, // always throw, even in purelive: cannot happen unless ppl start fidling with attributes to rename diff --git a/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComponent.cs b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComponent.cs index b490a9b62f..837bf18dae 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComponent.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComponent.cs @@ -55,7 +55,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Compose if (_config.Enable) FileService.SavingTemplate += FileService_SavingTemplate; - if (_config.ModelsModeValue.IsLiveNotPure()) + if (_config.ModelsMode.IsLiveNotPure()) _liveModelsProvider.Install(); if (_config.FlagOutOfDateModels) diff --git a/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs index d2ec4a4a09..3e63fb8e94 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs @@ -28,7 +28,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Compose composition.RegisterUnique(factory => { var config = factory.GetInstance>().Value; - if (config.ModelsModeValue == ModelsMode.PureLive) + if (config.ModelsMode == ModelsMode.PureLive) { composition.RegisterUnique(); diff --git a/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs b/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs index 1161d4879e..628e66bc6a 100644 --- a/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs +++ b/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs @@ -26,7 +26,7 @@ namespace Umbraco.ModelsBuilder.Embedded private readonly IHostingEnvironment _hostingEnvironment; // we do not manage pure live here - internal bool IsEnabled => _config.ModelsModeValue.IsLiveNotPure(); + internal bool IsEnabled => _config.ModelsMode.IsLiveNotPure(); public LiveModelsProvider(ILogger logger, IOptions config, ModelsGenerator modelGenerator, ModelsGenerationError mbErrors, IHostingEnvironment hostingEnvironment) { diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs index e22752d12f..c90e4e4c7d 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ContentSettingsValidatorTests.cs @@ -17,15 +17,6 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation Assert.True(result.Succeeded); } - [Test] - public void Returns_Fail_For_Configuration_With_Invalid_MacroErrors_Field() - { - var validator = new ContentSettingsValidator(); - var options = BuildContentSettings(macroErrors: "invalid"); - var result = validator.Validate("settings", options); - Assert.False(result.Succeeded); - } - [Test] public void Returns_Fail_For_Configuration_With_Invalid_Error404Collection_Due_To_Duplicate_Id() { @@ -53,11 +44,10 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation Assert.False(result.Succeeded); } - private static ContentSettings BuildContentSettings(string macroErrors = "inline", string culture = "en-US", string contentXPath = "", string autoFillImagePropertyAlias = "testAlias") + private static ContentSettings BuildContentSettings(string culture = "en-US", string contentXPath = "", string autoFillImagePropertyAlias = "testAlias") { return new ContentSettings { - MacroErrors = macroErrors, Error404Collection = new ContentErrorPage[] { new ContentErrorPage { Culture = culture, ContentId = 1, ContentXPath = contentXPath }, diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs index 2bf227d686..3cc0532db2 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/GlobalSettingsValidatorTests.cs @@ -25,23 +25,13 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation Assert.False(result.Succeeded); } - [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") + private static GlobalSettings BuildGlobalSettings(string smtpEmail = "test@test.com") { return new GlobalSettings { Smtp = new SmtpSettings { From = smtpEmail, - DeliveryMethod = smtpDeliveryMethod, } }; } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs deleted file mode 100644 index 2122a62c64..0000000000 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/HostingSettingsValidatorTests.cs +++ /dev/null @@ -1,28 +0,0 @@ -using NUnit.Framework; -using Umbraco.Core.Configuration.Models; -using Umbraco.Core.Configuration.Models.Validation; - -namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation -{ - [TestFixture] - public class HostingSettingsValidatorTests - { - [Test] - public void Returns_Success_ForValid_Configuration() - { - var validator = new HostingSettingsValidator(); - var options = new HostingSettings(); - var result = validator.Validate("settings", options); - Assert.True(result.Succeeded); - } - - [Test] - public void Returns_Fail_For_Configuration_With_Invalid_LocalTempStorage_Field() - { - var validator = new HostingSettingsValidator(); - var options = new HostingSettings { LocalTempStorageLocation = "invalid" }; - var result = validator.Validate("settings", options); - Assert.False(result.Succeeded); - } - } -} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs deleted file mode 100644 index fe71509095..0000000000 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Configuration/Models/Validation/ModelsBuilderSettingsValidatorTests.cs +++ /dev/null @@ -1,28 +0,0 @@ -using NUnit.Framework; -using Umbraco.Core.Configuration.Models; -using Umbraco.Core.Configuration.Models.Validation; - -namespace Umbraco.Tests.UnitTests.Umbraco.Core.Configuration.Models.Validation -{ - [TestFixture] - public class ModelsBuilderSettingsValidatorTests - { - [Test] - public void Returns_Success_ForValid_Configuration() - { - var validator = new ModelsBuilderSettingsValidator(); - var options = new ModelsBuilderSettings(); - var result = validator.Validate("settings", options); - Assert.True(result.Succeeded); - } - - [Test] - public void Returns_Fail_For_Configuration_With_Invalid_ModelsMode_Field() - { - var validator = new ModelsBuilderSettingsValidator(); - var options = new ModelsBuilderSettings { ModelsMode = "invalid" }; - var result = validator.Validate("settings", options); - Assert.False(result.Succeeded); - } - } -} diff --git a/src/Umbraco.Web.Common/AspNetCore/AspNetCoreHostingEnvironment.cs b/src/Umbraco.Web.Common/AspNetCore/AspNetCoreHostingEnvironment.cs index d5e4a9f258..ede121a9f7 100644 --- a/src/Umbraco.Web.Common/AspNetCore/AspNetCoreHostingEnvironment.cs +++ b/src/Umbraco.Web.Common/AspNetCore/AspNetCoreHostingEnvironment.cs @@ -45,7 +45,7 @@ namespace Umbraco.Web.Common.AspNetCore if (_localTempPath != null) return _localTempPath; - switch (_hostingSettings.CurrentValue.LocalTempStorageLocationValue) + switch (_hostingSettings.CurrentValue.LocalTempStorageLocation) { case LocalTempStorage.AspNetTemp: diff --git a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs index d357916791..c5f3c3dfe8 100644 --- a/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs +++ b/src/Umbraco.Web.Common/Extensions/UmbracoCoreServiceCollectionExtensions.cs @@ -129,18 +129,16 @@ namespace Umbraco.Extensions services.AddSingleton, ContentSettingsValidator>(); services.AddSingleton, GlobalSettingsValidator>(); - services.AddSingleton, HostingSettingsValidator>(); - services.AddSingleton, ModelsBuilderSettingsValidator>(); services.AddSingleton, RequestHandlerSettingsValidator>(); services.Configure(configuration.GetSection(Constants.Configuration.ConfigActiveDirectory)); services.Configure(configuration.GetSection("ConnectionStrings"), o => o.BindNonPublicProperties = true); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigContent), o => o.BindNonPublicProperties = true); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigContent)); services.Configure(configuration.GetSection(Constants.Configuration.ConfigCoreDebug)); services.Configure(configuration.GetSection(Constants.Configuration.ConfigExceptionFilter)); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigGlobal), o => o.BindNonPublicProperties = true); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigGlobal)); services.Configure(configuration.GetSection(Constants.Configuration.ConfigHealthChecks)); - services.Configure(configuration.GetSection(Constants.Configuration.ConfigHosting), o => o.BindNonPublicProperties = true); + services.Configure(configuration.GetSection(Constants.Configuration.ConfigHosting)); services.Configure(configuration.GetSection(Constants.Configuration.ConfigImaging)); services.Configure(configuration.GetSection(Constants.Configuration.ConfigExamine)); services.Configure(configuration.GetSection(Constants.Configuration.ConfigKeepAlive)); diff --git a/src/Umbraco.Web.Common/Macros/MacroRenderer.cs b/src/Umbraco.Web.Common/Macros/MacroRenderer.cs index 5114f4a20f..58c1e59338 100644 --- a/src/Umbraco.Web.Common/Macros/MacroRenderer.cs +++ b/src/Umbraco.Web.Common/Macros/MacroRenderer.cs @@ -290,7 +290,7 @@ namespace Umbraco.Web.Macros Alias = macro.Alias, MacroSource = macro.MacroSource, Exception = e, - Behaviour = _contentSettings.MacroErrorsBehaviour + Behaviour = _contentSettings.MacroErrors }; switch (macroErrorEventArgs.Behaviour) diff --git a/src/Umbraco.Web/AspNet/AspNetHostingEnvironment.cs b/src/Umbraco.Web/AspNet/AspNetHostingEnvironment.cs index dae6b1ffbe..2ec6599939 100644 --- a/src/Umbraco.Web/AspNet/AspNetHostingEnvironment.cs +++ b/src/Umbraco.Web/AspNet/AspNetHostingEnvironment.cs @@ -63,7 +63,7 @@ namespace Umbraco.Web.Hosting if (_localTempPath != null) return _localTempPath; - switch (_hostingSettings.LocalTempStorageLocationValue) + switch (_hostingSettings.LocalTempStorageLocation) { case LocalTempStorage.AspNetTemp: return _localTempPath = System.IO.Path.Combine(HttpRuntime.CodegenDir, "UmbracoData"); diff --git a/src/Umbraco.Web/Macros/MacroRenderer.cs b/src/Umbraco.Web/Macros/MacroRenderer.cs index 8c11478c78..8d13c03e8b 100644 --- a/src/Umbraco.Web/Macros/MacroRenderer.cs +++ b/src/Umbraco.Web/Macros/MacroRenderer.cs @@ -290,7 +290,7 @@ namespace Umbraco.Web.Macros Alias = macro.Alias, MacroSource = macro.MacroSource, Exception = e, - Behaviour = _contentSettings.MacroErrorsBehaviour + Behaviour = _contentSettings.MacroErrors }; switch (macroErrorEventArgs.Behaviour) diff --git a/src/Umbraco.Web/WebAssets/CDF/ClientDependencyComponent.cs b/src/Umbraco.Web/WebAssets/CDF/ClientDependencyComponent.cs index 1f357d65b5..47dd0908dd 100644 --- a/src/Umbraco.Web/WebAssets/CDF/ClientDependencyComponent.cs +++ b/src/Umbraco.Web/WebAssets/CDF/ClientDependencyComponent.cs @@ -46,7 +46,7 @@ namespace Umbraco.Web.WebAssets.CDF // Now we need to detect if we are running 'Umbraco.Core.LocalTempStorage' as EnvironmentTemp and in that case we want to change the CDF file // location to be there - if (_hostingSettings.LocalTempStorageLocationValue == LocalTempStorage.EnvironmentTemp) + if (_hostingSettings.LocalTempStorageLocation == LocalTempStorage.EnvironmentTemp) { var cachePath = _hostingEnvironment.LocalTempPath; From 0ea251945b6c48cff164412a4dd3d4bdb7c9ca72 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 22 Sep 2020 15:59:37 +0200 Subject: [PATCH 17/17] Netcore: migrate more unittests (#8939) * Migrated unit tests * Migrated CoreThings tests Signed-off-by: Bjarke Berg * Migrated Property Editor unit tests Signed-off-by: Bjarke Berg * Migrated CoreXml tests Signed-off-by: Bjarke Berg * Moved more tests Signed-off-by: Bjarke Berg * revert some IsSZArray test code Signed-off-by: Bjarke Berg * Renamed bad named test Signed-off-by: Bjarke Berg * removed unnecessary file mentions in csproj file Signed-off-by: Bjarke Berg Co-authored-by: Elitsa Marinovska --- .../Models/PublishedContent/ModelType.cs | 1 - .../Compose/BlockEditorComponent.cs | 0 .../Compose/BlockEditorComposer.cs | 0 .../Compose/NestedContentPropertyComponent.cs | 0 .../Compose/NestedContentPropertyComposer.cs | 0 .../Published/PublishedSnapshotTestObjects.cs | 18 +- .../TestHelpers/MockedValueEditors.cs | 27 ++ .../TestHelpers/SolidPublishedSnapshot.cs | 445 ++++++++++++++++++ .../TestHelpers}/StringNewlineExtensions.cs | 2 +- .../CoreThings/CallContextTests.cs | 0 .../CoreThings/ObjectExtensionsTests.cs | 19 +- .../CoreThings/TryConvertToTests.cs | 9 +- .../Umbraco.Core}/CoreThings/UdiTests.cs | 0 .../CoreXml/FrameworkXmlTests.cs | 0 .../CoreXml/NavigableNavigatorTests.cs | 2 +- .../CoreXml/RenamedRootNavigatorTests.cs | 0 .../BlockEditorComponentTests.cs | 2 +- .../BlockListPropertyValueConverterTests.cs | 0 .../PropertyEditors/ColorListValidatorTest.cs | 8 +- ...ataValueReferenceFactoryCollectionTests.cs | 2 +- .../EnsureUniqueValuesValidatorTest.cs | 12 +- .../MultiValuePropertyEditorTests.cs | 32 +- .../NestedContentPropertyComponentTests.cs | 0 .../PropertyEditorValueConverterTests.cs | 3 +- .../PropertyEditorValueEditorTests.cs | 61 +-- .../Umbraco.Core/Published/ConvertersTests.cs | 177 +++++++ .../Umbraco.Core/Published/ModelTypeTests.cs | 64 +++ .../Published/NestedContentTests.cs | 25 +- .../Published/PropertyCacheLevelTests.cs | 48 +- .../CmsHelperCasingTests.cs | 15 +- .../DefaultShortStringHelperTests.cs | 202 ++++++++ ...aultShortStringHelperTestsWithoutSetup.cs} | 318 +++---------- .../MockShortStringHelper.cs | 0 .../StringExtensionsTests.cs | 40 +- .../StringValidationTests.cs | 42 ++ .../StylesheetHelperTests.cs | 5 +- .../Umbraco.Tests.UnitTests.csproj | 1 + src/Umbraco.Tests/Models/MediaXmlTest.cs | 1 - src/Umbraco.Tests/Models/VariationTests.cs | 3 +- .../Published/ConvertersTests.cs | 177 +------ src/Umbraco.Tests/Published/ModelTypeTests.cs | 61 +-- .../PublishedContent/NuCacheChildrenTests.cs | 3 +- .../PublishedContent/NuCacheTests.cs | 3 +- .../SolidPublishedSnapshot.cs | 39 +- .../Scoping/ScopedNuCacheTests.cs | 11 +- .../ContentTypeServiceVariantsTests.cs | 4 +- .../Strings/StringValidationTests.cs | 43 -- src/Umbraco.Tests/TestHelpers/TestHelper.cs | 19 - src/Umbraco.Tests/Umbraco.Tests.csproj | 32 +- src/Umbraco.Web/Umbraco.Web.csproj | 4 - 50 files changed, 1191 insertions(+), 789 deletions(-) rename src/{Umbraco.Web => Umbraco.Infrastructure}/Compose/BlockEditorComponent.cs (100%) rename src/{Umbraco.Web => Umbraco.Infrastructure}/Compose/BlockEditorComposer.cs (100%) rename src/{Umbraco.Web => Umbraco.Infrastructure}/Compose/NestedContentPropertyComponent.cs (100%) rename src/{Umbraco.Web => Umbraco.Infrastructure}/Compose/NestedContentPropertyComposer.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.Common}/Published/PublishedSnapshotTestObjects.cs (75%) create mode 100644 src/Umbraco.Tests.Common/TestHelpers/MockedValueEditors.cs create mode 100644 src/Umbraco.Tests.Common/TestHelpers/SolidPublishedSnapshot.cs rename src/{Umbraco.Tests => Umbraco.Tests.Common/TestHelpers}/StringNewlineExtensions.cs (96%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/CoreThings/CallContextTests.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/CoreThings/ObjectExtensionsTests.cs (93%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/CoreThings/TryConvertToTests.cs (90%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/CoreThings/UdiTests.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/CoreXml/FrameworkXmlTests.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/CoreXml/NavigableNavigatorTests.cs (99%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/CoreXml/RenamedRootNavigatorTests.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/PropertyEditors/BlockEditorComponentTests.cs (99%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/PropertyEditors/BlockListPropertyValueConverterTests.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/PropertyEditors/ColorListValidatorTest.cs (82%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/PropertyEditors/DataValueReferenceFactoryCollectionTests.cs (99%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/PropertyEditors/EnsureUniqueValuesValidatorTest.cs (81%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/PropertyEditors/MultiValuePropertyEditorTests.cs (83%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/PropertyEditors/NestedContentPropertyComponentTests.cs (100%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/PropertyEditors/PropertyEditorValueConverterTests.cs (97%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/PropertyEditors/PropertyEditorValueEditorTests.cs (60%) create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/ConvertersTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/ModelTypeTests.cs rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/Published/NestedContentTests.cs (92%) rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Core}/Published/PropertyCacheLevelTests.cs (84%) rename src/{Umbraco.Tests/Strings => Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper}/CmsHelperCasingTests.cs (74%) create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/DefaultShortStringHelperTests.cs rename src/{Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs => Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/DefaultShortStringHelperTestsWithoutSetup.cs} (60%) rename src/{Umbraco.Tests/Strings => Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper}/MockShortStringHelper.cs (100%) rename src/{Umbraco.Tests/Strings => Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper}/StringExtensionsTests.cs (90%) create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/StringValidationTests.cs rename src/{Umbraco.Tests/Strings => Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper}/StylesheetHelperTests.cs (97%) delete mode 100644 src/Umbraco.Tests/Strings/StringValidationTests.cs diff --git a/src/Umbraco.Core/Models/PublishedContent/ModelType.cs b/src/Umbraco.Core/Models/PublishedContent/ModelType.cs index dd60eb9beb..94e7958780 100644 --- a/src/Umbraco.Core/Models/PublishedContent/ModelType.cs +++ b/src/Umbraco.Core/Models/PublishedContent/ModelType.cs @@ -390,7 +390,6 @@ namespace Umbraco.Core.Models.PublishedContent protected override bool IsCOMObjectImpl() => false; - public override object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters) { throw new NotSupportedException(); diff --git a/src/Umbraco.Web/Compose/BlockEditorComponent.cs b/src/Umbraco.Infrastructure/Compose/BlockEditorComponent.cs similarity index 100% rename from src/Umbraco.Web/Compose/BlockEditorComponent.cs rename to src/Umbraco.Infrastructure/Compose/BlockEditorComponent.cs diff --git a/src/Umbraco.Web/Compose/BlockEditorComposer.cs b/src/Umbraco.Infrastructure/Compose/BlockEditorComposer.cs similarity index 100% rename from src/Umbraco.Web/Compose/BlockEditorComposer.cs rename to src/Umbraco.Infrastructure/Compose/BlockEditorComposer.cs diff --git a/src/Umbraco.Web/Compose/NestedContentPropertyComponent.cs b/src/Umbraco.Infrastructure/Compose/NestedContentPropertyComponent.cs similarity index 100% rename from src/Umbraco.Web/Compose/NestedContentPropertyComponent.cs rename to src/Umbraco.Infrastructure/Compose/NestedContentPropertyComponent.cs diff --git a/src/Umbraco.Web/Compose/NestedContentPropertyComposer.cs b/src/Umbraco.Infrastructure/Compose/NestedContentPropertyComposer.cs similarity index 100% rename from src/Umbraco.Web/Compose/NestedContentPropertyComposer.cs rename to src/Umbraco.Infrastructure/Compose/NestedContentPropertyComposer.cs diff --git a/src/Umbraco.Tests/Published/PublishedSnapshotTestObjects.cs b/src/Umbraco.Tests.Common/Published/PublishedSnapshotTestObjects.cs similarity index 75% rename from src/Umbraco.Tests/Published/PublishedSnapshotTestObjects.cs rename to src/Umbraco.Tests.Common/Published/PublishedSnapshotTestObjects.cs index 0ec8c9cc4e..1c618380a0 100644 --- a/src/Umbraco.Tests/Published/PublishedSnapshotTestObjects.cs +++ b/src/Umbraco.Tests.Common/Published/PublishedSnapshotTestObjects.cs @@ -1,13 +1,13 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using Moq; +using Umbraco.Core; using Umbraco.Core.Models.PublishedContent; -using Umbraco.Web; -using Umbraco.Web.PublishedCache; namespace Umbraco.Tests.Published { public class PublishedSnapshotTestObjects { + [PublishedModel("element1")] public class TestElementModel1 : PublishedElementModel { @@ -15,7 +15,7 @@ namespace Umbraco.Tests.Published : base(content) { } - public string Prop1 => this.Value("prop1"); + public string Prop1 => this.Value(Mock.Of(), "prop1"); } [PublishedModel("element2")] @@ -25,7 +25,7 @@ namespace Umbraco.Tests.Published : base(content) { } - public IEnumerable Prop2 => this.Value>("prop2"); + public IEnumerable Prop2 => this.Value>(Mock.Of(), "prop2"); } [PublishedModel("content1")] @@ -35,7 +35,7 @@ namespace Umbraco.Tests.Published : base(content) { } - public string Prop1 => this.Value("prop1"); + public string Prop1 => this.Value(Mock.Of(), "prop1"); } [PublishedModel("content2")] @@ -45,8 +45,8 @@ namespace Umbraco.Tests.Published : base(content) { } - public IEnumerable Prop2 => this.Value>("prop2"); + public IEnumerable Prop2 => this.Value>(Mock.Of(), "prop2"); } - + } } diff --git a/src/Umbraco.Tests.Common/TestHelpers/MockedValueEditors.cs b/src/Umbraco.Tests.Common/TestHelpers/MockedValueEditors.cs new file mode 100644 index 0000000000..954dedd3b4 --- /dev/null +++ b/src/Umbraco.Tests.Common/TestHelpers/MockedValueEditors.cs @@ -0,0 +1,27 @@ +using Moq; +using Umbraco.Core.PropertyEditors; +using Umbraco.Core.Services; +using Umbraco.Core.Strings; + +namespace Umbraco.Tests.TestHelpers.Entities +{ + public class MockedValueEditors + { + public static DataValueEditor CreateDataValueEditor(string name) + { + var valueType = (ValueTypes.IsValue(name)) ? name : ValueTypes.String; + + return new DataValueEditor( + Mock.Of(), + Mock.Of(), + Mock.Of(), + Mock.Of(), + new DataEditorAttribute(name, name, name) + { + ValueType = valueType + } + + ); + } + } +} diff --git a/src/Umbraco.Tests.Common/TestHelpers/SolidPublishedSnapshot.cs b/src/Umbraco.Tests.Common/TestHelpers/SolidPublishedSnapshot.cs new file mode 100644 index 0000000000..1eef61a29e --- /dev/null +++ b/src/Umbraco.Tests.Common/TestHelpers/SolidPublishedSnapshot.cs @@ -0,0 +1,445 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Moq; +using Umbraco.Core; +using Umbraco.Core.Cache; +using Umbraco.Core.Logging; +using Umbraco.Core.Models; +using Umbraco.Core.Models.PublishedContent; +using Umbraco.Core.PropertyEditors; +using Umbraco.Core.Services; +using Umbraco.Core.Strings; +using Umbraco.Web.PublishedCache; + +namespace Umbraco.Tests.Common.PublishedContent +{ + public class SolidPublishedSnapshot : IPublishedSnapshot + { + public readonly SolidPublishedContentCache InnerContentCache = new SolidPublishedContentCache(); + public readonly SolidPublishedContentCache InnerMediaCache = new SolidPublishedContentCache(); + + public IPublishedContentCache Content => InnerContentCache; + + public IPublishedMediaCache Media => InnerMediaCache; + + public IPublishedMemberCache Members => null; + + public IDomainCache Domains => null; + + public IDisposable ForcedPreview(bool forcedPreview, Action callback = null) + { + throw new NotImplementedException(); + } + + public void Resync() + { } + + public IAppCache SnapshotCache => null; + + public IAppCache ElementsCache => null; + + public void Dispose() + { } + } + + public class SolidPublishedContentCache : PublishedCacheBase, IPublishedContentCache, IPublishedMediaCache + { + private readonly Dictionary _content = new Dictionary(); + + public SolidPublishedContentCache() + : base(false) + { } + + public void Add(SolidPublishedContent content) + { + _content[content.Id] = content.CreateModel(Mock.Of()); + } + + public void Clear() + { + _content.Clear(); + } + + public IPublishedContent GetByRoute(bool preview, string route, bool? hideTopLevelNode = null, string culture = null) + { + throw new NotImplementedException(); + } + + public IPublishedContent GetByRoute(string route, bool? hideTopLevelNode = null, string culture = null) + { + throw new NotImplementedException(); + } + + public string GetRouteById(bool preview, int contentId, string culture = null) + { + throw new NotImplementedException(); + } + + public string GetRouteById(int contentId, string culture = null) + { + throw new NotImplementedException(); + } + + public override IPublishedContent GetById(bool preview, int contentId) + { + return _content.ContainsKey(contentId) ? _content[contentId] : null; + } + + public override IPublishedContent GetById(bool preview, Guid contentId) + { + throw new NotImplementedException(); + } + + public override IPublishedContent GetById(bool preview, Udi nodeId) + => throw new NotSupportedException(); + + public override bool HasById(bool preview, int contentId) + { + return _content.ContainsKey(contentId); + } + + public override IEnumerable GetAtRoot(bool preview, string culture = null) + { + return _content.Values.Where(x => x.Parent == null); + } + + public override IPublishedContent GetSingleByXPath(bool preview, string xpath, Core.Xml.XPathVariable[] vars) + { + throw new NotImplementedException(); + } + + public override IPublishedContent GetSingleByXPath(bool preview, System.Xml.XPath.XPathExpression xpath, Core.Xml.XPathVariable[] vars) + { + throw new NotImplementedException(); + } + + public override IEnumerable GetByXPath(bool preview, string xpath, Core.Xml.XPathVariable[] vars) + { + throw new NotImplementedException(); + } + + public override IEnumerable GetByXPath(bool preview, System.Xml.XPath.XPathExpression xpath, Core.Xml.XPathVariable[] vars) + { + throw new NotImplementedException(); + } + + public override System.Xml.XPath.XPathNavigator CreateNavigator(bool preview) + { + throw new NotImplementedException(); + } + + public override System.Xml.XPath.XPathNavigator CreateNodeNavigator(int id, bool preview) + { + throw new NotImplementedException(); + } + + public override bool HasContent(bool preview) + { + return _content.Count > 0; + } + + public override IPublishedContentType GetContentType(int id) + { + throw new NotImplementedException(); + } + + public override IPublishedContentType GetContentType(string alias) + { + throw new NotImplementedException(); + } + + public override IPublishedContentType GetContentType(Guid key) + { + throw new NotImplementedException(); + } + + public override IEnumerable GetByContentType(IPublishedContentType contentType) + { + throw new NotImplementedException(); + } + } + + public class SolidPublishedContent : IPublishedContent + { + #region Constructor + + public SolidPublishedContent(IPublishedContentType contentType) + { + // initialize boring stuff + TemplateId = 0; + WriterId = CreatorId = 0; + CreateDate = UpdateDate = DateTime.Now; + Version = Guid.Empty; + + ContentType = contentType; + } + + #endregion + + #region Content + + private Dictionary _cultures; + + private Dictionary GetCultures() + { + return new Dictionary { { "", new PublishedCultureInfo("", Name, UrlSegment, UpdateDate) } }; + } + + public int Id { get; set; } + public Guid Key { get; set; } + public int? TemplateId { get; set; } + public int SortOrder { get; set; } + public string Name { get; set; } + public IReadOnlyDictionary Cultures => _cultures ?? (_cultures = GetCultures()); + public string UrlSegment { get; set; } + public int WriterId { get; set; } + public int CreatorId { get; set; } + public string Path { get; set; } + public DateTime CreateDate { get; set; } + public DateTime UpdateDate { get; set; } + public Guid Version { get; set; } + public int Level { get; set; } + + public PublishedItemType ItemType => PublishedItemType.Content; + public bool IsDraft(string culture = null) => false; + public bool IsPublished(string culture = null) => true; + + #endregion + + #region Tree + + public int ParentId { get; set; } + public IEnumerable ChildIds { get; set; } + + public IPublishedContent Parent { get; set; } + public IEnumerable Children { get; set; } + public IEnumerable ChildrenForAllCultures => Children; + + #endregion + + #region ContentType + + public IPublishedContentType ContentType { get; set; } + + #endregion + + #region Properties + + public IEnumerable Properties { get; set; } + + public IPublishedProperty GetProperty(string alias) + { + return Properties.FirstOrDefault(p => p.Alias.InvariantEquals(alias)); + } + + public IPublishedProperty GetProperty(string alias, bool recurse) + { + var property = GetProperty(alias); + if (recurse == false) return property; + + IPublishedContent content = this; + while (content != null && (property == null || property.HasValue() == false)) + { + content = content.Parent; + property = content?.GetProperty(alias); + } + + return property; + } + + public object this[string alias] + { + get + { + var property = GetProperty(alias); + return property == null || property.HasValue() == false ? null : property.GetValue(); + } + } + + #endregion + } + + public class SolidPublishedProperty : IPublishedProperty + { + public IPublishedPropertyType PropertyType { get; set; } + public string Alias { get; set; } + public object SolidSourceValue { get; set; } + public object SolidValue { get; set; } + public bool SolidHasValue { get; set; } + public object SolidXPathValue { get; set; } + + public virtual object GetSourceValue(string culture = null, string segment = null) => SolidSourceValue; + public virtual object GetValue(string culture = null, string segment = null) => SolidValue; + public virtual object GetXPathValue(string culture = null, string segment = null) => SolidXPathValue; + public virtual bool HasValue(string culture = null, string segment = null) => SolidHasValue; + } + + public class SolidPublishedPropertyWithLanguageVariants : SolidPublishedProperty + { + private readonly IDictionary _solidSourceValues = new Dictionary(); + private readonly IDictionary _solidValues = new Dictionary(); + private readonly IDictionary _solidXPathValues = new Dictionary(); + + public override object GetSourceValue(string culture = null, string segment = null) + { + if (string.IsNullOrEmpty(culture)) + { + return base.GetSourceValue(culture, segment); + } + + return _solidSourceValues.ContainsKey(culture) ? _solidSourceValues[culture] : null; + } + + public override object GetValue(string culture = null, string segment = null) + { + if (string.IsNullOrEmpty(culture)) + { + return base.GetValue(culture, segment); + } + + return _solidValues.ContainsKey(culture) ? _solidValues[culture] : null; + } + + public override object GetXPathValue(string culture = null, string segment = null) + { + if (string.IsNullOrEmpty(culture)) + { + return base.GetXPathValue(culture, segment); + } + + return _solidXPathValues.ContainsKey(culture) ? _solidXPathValues[culture] : null; + } + + public override bool HasValue(string culture = null, string segment = null) + { + if (string.IsNullOrEmpty(culture)) + { + return base.HasValue(culture, segment); + } + + return _solidSourceValues.ContainsKey(culture); + } + + public void SetSourceValue(string culture, object value, bool defaultValue = false) + { + _solidSourceValues.Add(culture, value); + if (defaultValue) + { + SolidSourceValue = value; + SolidHasValue = true; + } + } + + public void SetValue(string culture, object value, bool defaultValue = false) + { + _solidValues.Add(culture, value); + if (defaultValue) + { + SolidValue = value; + SolidHasValue = true; + } + } + + public void SetXPathValue(string culture, object value, bool defaultValue = false) + { + _solidXPathValues.Add(culture, value); + if (defaultValue) + { + SolidXPathValue = value; + } + } + } + + [PublishedModel("ContentType2")] + public class ContentType2 : PublishedContentModel + { + #region Plumbing + + public ContentType2(IPublishedContent content, IPublishedValueFallback fallback) + : base(content) + { } + + #endregion + + public int Prop1 => this.Value(Mock.Of(), "prop1"); + } + + [PublishedModel("ContentType2Sub")] + public class ContentType2Sub : ContentType2 + { + #region Plumbing + + public ContentType2Sub(IPublishedContent content, IPublishedValueFallback fallback) + : base(content, fallback) + { } + + #endregion + } + + public class PublishedContentStrong1 : PublishedContentModel + { + public PublishedContentStrong1(IPublishedContent content, IPublishedValueFallback fallback) + : base(content) + { } + + public int StrongValue => this.Value(Mock.Of(), "strongValue"); + } + + public class PublishedContentStrong1Sub : PublishedContentStrong1 + { + public PublishedContentStrong1Sub(IPublishedContent content, IPublishedValueFallback fallback) + : base(content, fallback) + { } + + public int AnotherValue => this.Value(Mock.Of(), "anotherValue"); + } + + public class PublishedContentStrong2 : PublishedContentModel + { + public PublishedContentStrong2(IPublishedContent content, IPublishedValueFallback fallback) + : base(content) + { } + + public int StrongValue => this.Value(Mock.Of(), "strongValue"); + } + + public class AutoPublishedContentType : PublishedContentType + { + private static readonly IPublishedPropertyType Default; + + static AutoPublishedContentType() + { + var dataTypeServiceMock = new Mock(); + var dataType = new DataType(new VoidEditor(Mock.Of(), dataTypeServiceMock.Object, + Mock.Of(), Mock.Of(), Mock.Of())) + { Id = 666 }; + dataTypeServiceMock.Setup(x => x.GetAll()).Returns(dataType.Yield); + + var factory = new PublishedContentTypeFactory(Mock.Of(), new PropertyValueConverterCollection(Array.Empty()), dataTypeServiceMock.Object); + Default = factory.CreatePropertyType("*", 666); + } + + public AutoPublishedContentType(Guid key, int id, string alias, IEnumerable propertyTypes) + : base(key, id, alias, PublishedItemType.Content, Enumerable.Empty(), propertyTypes, ContentVariation.Nothing) + { } + + public AutoPublishedContentType(Guid key, int id, string alias, Func> propertyTypes) + : base(key, id, alias, PublishedItemType.Content, Enumerable.Empty(), propertyTypes, ContentVariation.Nothing) + { } + + public AutoPublishedContentType(Guid key, int id, string alias, IEnumerable compositionAliases, IEnumerable propertyTypes) + : base(key, id, alias, PublishedItemType.Content, compositionAliases, propertyTypes, ContentVariation.Nothing) + { } + + public AutoPublishedContentType(Guid key, int id, string alias, IEnumerable compositionAliases, Func> propertyTypes) + : base(key, id, alias, PublishedItemType.Content, compositionAliases, propertyTypes, ContentVariation.Nothing) + { } + + public override IPublishedPropertyType GetPropertyType(string alias) + { + var propertyType = base.GetPropertyType(alias); + return propertyType ?? Default; + } + } +} diff --git a/src/Umbraco.Tests/StringNewlineExtensions.cs b/src/Umbraco.Tests.Common/TestHelpers/StringNewlineExtensions.cs similarity index 96% rename from src/Umbraco.Tests/StringNewlineExtensions.cs rename to src/Umbraco.Tests.Common/TestHelpers/StringNewlineExtensions.cs index b26f345788..6de58f84b2 100644 --- a/src/Umbraco.Tests/StringNewlineExtensions.cs +++ b/src/Umbraco.Tests.Common/TestHelpers/StringNewlineExtensions.cs @@ -1,6 +1,6 @@ namespace Umbraco.Tests { - static class StringNewLineExtensions + public static class StringNewLineExtensions { /// /// Ensures Lf only everywhere. diff --git a/src/Umbraco.Tests/CoreThings/CallContextTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/CallContextTests.cs similarity index 100% rename from src/Umbraco.Tests/CoreThings/CallContextTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/CallContextTests.cs diff --git a/src/Umbraco.Tests/CoreThings/ObjectExtensionsTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/ObjectExtensionsTests.cs similarity index 93% rename from src/Umbraco.Tests/CoreThings/ObjectExtensionsTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/ObjectExtensionsTests.cs index 544c6335e1..3b09de2d0b 100644 --- a/src/Umbraco.Tests/CoreThings/ObjectExtensionsTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/ObjectExtensionsTests.cs @@ -3,11 +3,10 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Threading; -using System.Web.UI.WebControls; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.PropertyEditors; -using Umbraco.Tests.TestHelpers; +using Umbraco.Tests.TestHelpers.Entities; namespace Umbraco.Tests.CoreThings { @@ -29,20 +28,6 @@ namespace Umbraco.Tests.CoreThings Thread.CurrentThread.CurrentCulture = _savedCulture; } - [Test] - public void CanParseStringToUnit() - { - const string stringUnit = "1234px"; - object objUnit = "1234px"; - var result = stringUnit.TryConvertTo(); - var result2 = objUnit.TryConvertTo(); - var unit = new Unit("1234px"); - Assert.IsTrue(result.Success); - Assert.IsTrue(result2.Success); - Assert.AreEqual(unit, result.Result); - Assert.AreEqual(unit, result2.Result); - } - [Test] public void Can_Convert_List_To_Enumerable() { @@ -301,7 +286,7 @@ namespace Umbraco.Tests.CoreThings [Test] public void Value_Editor_Can_Convert_Decimal_To_Decimal_Clr_Type() { - var valueEditor = TestHelper.CreateDataValueEditor(ValueTypes.Decimal); + var valueEditor = MockedValueEditors.CreateDataValueEditor(ValueTypes.Decimal); var result = valueEditor.TryConvertValueToCrlType(12.34d); Assert.IsTrue(result.Success); diff --git a/src/Umbraco.Tests/CoreThings/TryConvertToTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/TryConvertToTests.cs similarity index 90% rename from src/Umbraco.Tests/CoreThings/TryConvertToTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/TryConvertToTests.cs index cd26bf914f..c5c027ac65 100644 --- a/src/Umbraco.Tests/CoreThings/TryConvertToTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/TryConvertToTests.cs @@ -10,15 +10,8 @@ using Umbraco.Tests.Testing; namespace Umbraco.Tests.CoreThings { [TestFixture] - public class TryConvertToTests : UmbracoTestBase + public class TryConvertToTests { - protected void Compose() - { - base.Compose(); - - Composition.RegisterUnique(f => new DefaultShortStringHelper(f.GetInstance>())); - } - [Test] public void ConvertToIntegerTest() { diff --git a/src/Umbraco.Tests/CoreThings/UdiTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/UdiTests.cs similarity index 100% rename from src/Umbraco.Tests/CoreThings/UdiTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/UdiTests.cs diff --git a/src/Umbraco.Tests/CoreXml/FrameworkXmlTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreXml/FrameworkXmlTests.cs similarity index 100% rename from src/Umbraco.Tests/CoreXml/FrameworkXmlTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreXml/FrameworkXmlTests.cs diff --git a/src/Umbraco.Tests/CoreXml/NavigableNavigatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreXml/NavigableNavigatorTests.cs similarity index 99% rename from src/Umbraco.Tests/CoreXml/NavigableNavigatorTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreXml/NavigableNavigatorTests.cs index 91ac3aacc2..c0d5d9af6d 100644 --- a/src/Umbraco.Tests/CoreXml/NavigableNavigatorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreXml/NavigableNavigatorTests.cs @@ -15,7 +15,7 @@ using Umbraco.Tests.Testing; namespace Umbraco.Tests.CoreXml { [TestFixture] - public class NavigableNavigatorTests : UmbracoTestBase + public class NavigableNavigatorTests { [Test] public void NewNavigatorIsAtRoot() diff --git a/src/Umbraco.Tests/CoreXml/RenamedRootNavigatorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreXml/RenamedRootNavigatorTests.cs similarity index 100% rename from src/Umbraco.Tests/CoreXml/RenamedRootNavigatorTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreXml/RenamedRootNavigatorTests.cs diff --git a/src/Umbraco.Tests/PropertyEditors/BlockEditorComponentTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockEditorComponentTests.cs similarity index 99% rename from src/Umbraco.Tests/PropertyEditors/BlockEditorComponentTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockEditorComponentTests.cs index bfd8b8c77b..1636936615 100644 --- a/src/Umbraco.Tests/PropertyEditors/BlockEditorComponentTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockEditorComponentTests.cs @@ -15,7 +15,7 @@ namespace Umbraco.Tests.PropertyEditors { Formatting = Formatting.None, NullValueHandling = NullValueHandling.Ignore, - + }; private const string _contentGuid1 = "036ce82586a64dfba2d523a99ed80f58"; diff --git a/src/Umbraco.Tests/PropertyEditors/BlockListPropertyValueConverterTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockListPropertyValueConverterTests.cs similarity index 100% rename from src/Umbraco.Tests/PropertyEditors/BlockListPropertyValueConverterTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockListPropertyValueConverterTests.cs diff --git a/src/Umbraco.Tests/PropertyEditors/ColorListValidatorTest.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/ColorListValidatorTest.cs similarity index 82% rename from src/Umbraco.Tests/PropertyEditors/ColorListValidatorTest.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/ColorListValidatorTest.cs index f140e6a239..feb1b53b96 100644 --- a/src/Umbraco.Tests/PropertyEditors/ColorListValidatorTest.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/ColorListValidatorTest.cs @@ -2,8 +2,10 @@ using Moq; using NUnit.Framework; using Newtonsoft.Json.Linq; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Services; +using Umbraco.Core.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Web.PropertyEditors; @@ -16,7 +18,7 @@ namespace Umbraco.Tests.PropertyEditors public void Only_Tests_On_JArray() { var validator = new ColorPickerConfigurationEditor.ColorListValidator(); - var result = validator.Validate("hello", null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of())); + var result = validator.Validate("hello", null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())); Assert.AreEqual(0, result.Count()); } @@ -24,7 +26,7 @@ namespace Umbraco.Tests.PropertyEditors public void Only_Tests_On_JArray_Of_Item_JObject() { var validator = new ColorPickerConfigurationEditor.ColorListValidator(); - var result = validator.Validate(new JArray("hello", "world"), null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of())); + var result = validator.Validate(new JArray("hello", "world"), null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())); Assert.AreEqual(0, result.Count()); } @@ -37,7 +39,7 @@ namespace Umbraco.Tests.PropertyEditors JObject.FromObject(new { value = "zxcvzxcvxzcv" }), JObject.FromObject(new { value = "ABC" }), JObject.FromObject(new { value = "1234567" })), - null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of())); + null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())); Assert.AreEqual(2, result.Count()); } } diff --git a/src/Umbraco.Tests/PropertyEditors/DataValueReferenceFactoryCollectionTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/DataValueReferenceFactoryCollectionTests.cs similarity index 99% rename from src/Umbraco.Tests/PropertyEditors/DataValueReferenceFactoryCollectionTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/DataValueReferenceFactoryCollectionTests.cs index 24ac9cdbf4..aea4dab134 100644 --- a/src/Umbraco.Tests/PropertyEditors/DataValueReferenceFactoryCollectionTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/DataValueReferenceFactoryCollectionTests.cs @@ -21,7 +21,7 @@ namespace Umbraco.Tests.PropertyEditors public class DataValueReferenceFactoryCollectionTests { IDataTypeService DataTypeService { get; } = Mock.Of(); - private IIOHelper IOHelper { get; } = TestHelper.IOHelper; + private IIOHelper IOHelper { get; } = Mock.Of(); ILocalizedTextService LocalizedTextService { get; } = Mock.Of(); ILocalizationService LocalizationService { get; } = Mock.Of(); IShortStringHelper ShortStringHelper { get; } = Mock.Of(); diff --git a/src/Umbraco.Tests/PropertyEditors/EnsureUniqueValuesValidatorTest.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/EnsureUniqueValuesValidatorTest.cs similarity index 81% rename from src/Umbraco.Tests/PropertyEditors/EnsureUniqueValuesValidatorTest.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/EnsureUniqueValuesValidatorTest.cs index f3c3fb4672..930d039625 100644 --- a/src/Umbraco.Tests/PropertyEditors/EnsureUniqueValuesValidatorTest.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/EnsureUniqueValuesValidatorTest.cs @@ -2,8 +2,10 @@ using Moq; using NUnit.Framework; using Newtonsoft.Json.Linq; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Services; +using Umbraco.Core.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Web.PropertyEditors; @@ -16,7 +18,7 @@ namespace Umbraco.Tests.PropertyEditors public void Only_Tests_On_JArray() { var validator = new ValueListUniqueValueValidator(); - var result = validator.Validate("hello", null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of())); + var result = validator.Validate("hello", null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())); Assert.AreEqual(0, result.Count()); } @@ -24,7 +26,7 @@ namespace Umbraco.Tests.PropertyEditors public void Only_Tests_On_JArray_Of_Item_JObject() { var validator = new ValueListUniqueValueValidator(); - var result = validator.Validate(new JArray("hello", "world"), null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of())); + var result = validator.Validate(new JArray("hello", "world"), null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())); Assert.AreEqual(0, result.Count()); } @@ -32,7 +34,7 @@ namespace Umbraco.Tests.PropertyEditors public void Allows_Unique_Values() { var validator = new ValueListUniqueValueValidator(); - var result = validator.Validate(new JArray(JObject.FromObject(new { value = "hello" }), JObject.FromObject(new { value = "world" })), null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of())); + var result = validator.Validate(new JArray(JObject.FromObject(new { value = "hello" }), JObject.FromObject(new { value = "world" })), null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())); Assert.AreEqual(0, result.Count()); } @@ -41,7 +43,7 @@ namespace Umbraco.Tests.PropertyEditors { var validator = new ValueListUniqueValueValidator(); var result = validator.Validate(new JArray(JObject.FromObject(new { value = "hello" }), JObject.FromObject(new { value = "hello" })), - null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of())); + null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())); Assert.AreEqual(1, result.Count()); } @@ -54,7 +56,7 @@ namespace Umbraco.Tests.PropertyEditors JObject.FromObject(new { value = "hello" }), JObject.FromObject(new { value = "world" }), JObject.FromObject(new { value = "world" })), - null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of())); + null, new ColorPickerPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())); Assert.AreEqual(2, result.Count()); } } diff --git a/src/Umbraco.Tests/PropertyEditors/MultiValuePropertyEditorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/MultiValuePropertyEditorTests.cs similarity index 83% rename from src/Umbraco.Tests/PropertyEditors/MultiValuePropertyEditorTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/MultiValuePropertyEditorTests.cs index 152a751a7b..262d55b6d7 100644 --- a/src/Umbraco.Tests/PropertyEditors/MultiValuePropertyEditorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/MultiValuePropertyEditorTests.cs @@ -1,18 +1,14 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Globalization; using Moq; using Newtonsoft.Json; using NUnit.Framework; -using Umbraco.Core; -using Umbraco.Core.Cache; -using Umbraco.Core.Composing; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; using Umbraco.Core.Strings; -using Umbraco.Tests.TestHelpers; using Umbraco.Web.PropertyEditors; namespace Umbraco.Tests.PropertyEditors @@ -31,7 +27,7 @@ namespace Umbraco.Tests.PropertyEditors [Test] public void DropDownMultipleValueEditor_Format_Data_For_Cache() { - var dataType = new DataType(new CheckBoxListPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, Mock.Of())) + var dataType = new DataType(new CheckBoxListPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())) { Configuration = new ValueListConfiguration { @@ -45,14 +41,17 @@ namespace Umbraco.Tests.PropertyEditors Id = 1 }; - var dataTypeService = new TestObjects.TestDataTypeService(dataType); + var dataTypeServiceMock = new Mock(); + dataTypeServiceMock + .Setup(x=>x.GetDataType(It.IsAny())) + .Returns(dataType); - var prop = new Property(1, new PropertyType(TestHelper.ShortStringHelper, dataType)); + var prop = new Property(1, new PropertyType(Mock.Of(), dataType)); prop.SetValue("Value 1,Value 2,Value 3"); var valueEditor = dataType.Editor.GetValueEditor(); ((DataValueEditor) valueEditor).Configuration = dataType.Configuration; - var result = valueEditor.ConvertDbToString(prop.PropertyType, prop.GetValue(), dataTypeService); + var result = valueEditor.ConvertDbToString(prop.PropertyType, prop.GetValue(), dataTypeServiceMock.Object); Assert.AreEqual("Value 1,Value 2,Value 3", result); } @@ -60,7 +59,7 @@ namespace Umbraco.Tests.PropertyEditors [Test] public void DropDownValueEditor_Format_Data_For_Cache() { - var dataType = new DataType(new CheckBoxListPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), TestHelper.IOHelper, Mock.Of())) + var dataType = new DataType(new CheckBoxListPropertyEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())) { Configuration = new ValueListConfiguration { @@ -74,12 +73,15 @@ namespace Umbraco.Tests.PropertyEditors Id = 1 }; - var dataTypeService = new TestObjects.TestDataTypeService(dataType); + var dataTypeServiceMock = new Mock(); + dataTypeServiceMock + .Setup(x=>x.GetDataType(It.IsAny())) + .Returns(dataType); - var prop = new Property(1, new PropertyType(TestHelper.ShortStringHelper, dataType)); + var prop = new Property(1, new PropertyType(Mock.Of(), dataType)); prop.SetValue("Value 2"); - var result = dataType.Editor.GetValueEditor().ConvertDbToString(prop.PropertyType, prop.GetValue(), dataTypeService); + var result = dataType.Editor.GetValueEditor().ConvertDbToString(prop.PropertyType, prop.GetValue(), dataTypeServiceMock.Object); Assert.AreEqual("Value 2", result); } @@ -114,7 +116,7 @@ namespace Umbraco.Tests.PropertyEditors } }; - var editor = new ValueListConfigurationEditor(Mock.Of(), TestHelper.IOHelper); + var editor = new ValueListConfigurationEditor(Mock.Of(), Mock.Of()); var result = editor.ToConfigurationEditor(configuration); diff --git a/src/Umbraco.Tests/PropertyEditors/NestedContentPropertyComponentTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/NestedContentPropertyComponentTests.cs similarity index 100% rename from src/Umbraco.Tests/PropertyEditors/NestedContentPropertyComponentTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/NestedContentPropertyComponentTests.cs diff --git a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueConverterTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/PropertyEditorValueConverterTests.cs similarity index 97% rename from src/Umbraco.Tests/PropertyEditors/PropertyEditorValueConverterTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/PropertyEditorValueConverterTests.cs index e8aa4f987c..dfd0e29674 100644 --- a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueConverterTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/PropertyEditorValueConverterTests.cs @@ -8,6 +8,7 @@ using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors; using Umbraco.Core.PropertyEditors.ValueConverters; using Umbraco.Core.Serialization; +using Umbraco.Core.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Web.PropertyEditors; using Umbraco.Web.PropertyEditors.ValueConverters; @@ -96,7 +97,7 @@ namespace Umbraco.Tests.PropertyEditors var publishedPropType = new PublishedPropertyType( new PublishedContentType(Guid.NewGuid(),1234, "test", PublishedItemType.Content, Enumerable.Empty(), Enumerable.Empty(), ContentVariation.Nothing), - new PropertyType(TestHelper.ShortStringHelper, "test", ValueStorageType.Nvarchar) { DataTypeId = 123 }, + new PropertyType(Mock.Of(), "test", ValueStorageType.Nvarchar) { DataTypeId = 123 }, new PropertyValueConverterCollection(Enumerable.Empty()), Mock.Of(), mockPublishedContentTypeFactory.Object); diff --git a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/PropertyEditorValueEditorTests.cs similarity index 60% rename from src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/PropertyEditorValueEditorTests.cs index 439036fa16..043f682a3f 100644 --- a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/PropertyEditorValueEditorTests.cs @@ -1,56 +1,27 @@ using System; -using System.Threading; using Moq; using NUnit.Framework; using Umbraco.Core; -using Umbraco.Core.Cache; -using Umbraco.Core.Composing; -using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Strings; -using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.Components; -using Umbraco.Tests.TestHelpers; -using Current = Umbraco.Web.Composing.Current; +using Umbraco.Tests.TestHelpers.Entities; namespace Umbraco.Tests.PropertyEditors { [TestFixture] public class PropertyEditorValueEditorTests { - [SetUp] - public virtual void TestSetup() - { - //normalize culture - Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; - - var register = TestHelper.GetRegister(); - var composition = new Composition(register, TestHelper.GetMockedTypeLoader(), Mock.Of(), ComponentTests.MockRuntimeState(RuntimeLevel.Run), TestHelper.IOHelper, AppCaches.NoCache); - - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - register.Register(_ - => new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings))); - - Current.Factory = composition.CreateFactory(); - } - - [TearDown] - public virtual void TestTearDown() - { - Current.Reset(); - } - [TestCase("{prop1: 'val1', prop2: 'val2'}", true)] [TestCase("{1,2,3,4}", false)] [TestCase("[1,2,3,4]", true)] [TestCase("hello world", false)] public void Value_Editor_Can_Convert_To_Json_Object_For_Editor(string value, bool isOk) { - var prop = new Property(1, new PropertyType(TestHelper.ShortStringHelper, "test", ValueStorageType.Nvarchar)); + var prop = new Property(1, new PropertyType(Mock.Of(), "test", ValueStorageType.Nvarchar)); prop.SetValue(value); - var valueEditor = TestHelper.CreateDataValueEditor(ValueTypes.String); + var valueEditor = MockedValueEditors.CreateDataValueEditor(ValueTypes.String); var result = valueEditor.ToEditor(prop); Assert.AreEqual(isOk, !(result is string)); @@ -63,7 +34,7 @@ namespace Umbraco.Tests.PropertyEditors [TestCase("DATETIME", "", null)] //test empty string for date public void Value_Editor_Can_Convert_To_Clr_Type(string valueType, string val, object expected) { - var valueEditor = TestHelper.CreateDataValueEditor(valueType); + var valueEditor = MockedValueEditors.CreateDataValueEditor(valueType); var result = valueEditor.TryConvertValueToCrlType(val); Assert.IsTrue(result.Success); @@ -75,7 +46,7 @@ namespace Umbraco.Tests.PropertyEditors [Test] public void Value_Editor_Can_Convert_To_Decimal_Clr_Type() { - var valueEditor = TestHelper.CreateDataValueEditor(ValueTypes.Decimal); + var valueEditor = MockedValueEditors.CreateDataValueEditor(ValueTypes.Decimal); var result = valueEditor.TryConvertValueToCrlType("12.34"); Assert.IsTrue(result.Success); @@ -85,7 +56,7 @@ namespace Umbraco.Tests.PropertyEditors [Test] public void Value_Editor_Can_Convert_To_Decimal_Clr_Type_With_Other_Separator() { - var valueEditor = TestHelper.CreateDataValueEditor(ValueTypes.Decimal); + var valueEditor = MockedValueEditors.CreateDataValueEditor(ValueTypes.Decimal); var result = valueEditor.TryConvertValueToCrlType("12,34"); Assert.IsTrue(result.Success); @@ -95,7 +66,7 @@ namespace Umbraco.Tests.PropertyEditors [Test] public void Value_Editor_Can_Convert_To_Decimal_Clr_Type_With_Empty_String() { - var valueEditor = TestHelper.CreateDataValueEditor(ValueTypes.Decimal); + var valueEditor = MockedValueEditors.CreateDataValueEditor(ValueTypes.Decimal); var result = valueEditor.TryConvertValueToCrlType(string.Empty); Assert.IsTrue(result.Success); @@ -105,7 +76,7 @@ namespace Umbraco.Tests.PropertyEditors [Test] public void Value_Editor_Can_Convert_To_Date_Clr_Type() { - var valueEditor = TestHelper.CreateDataValueEditor(ValueTypes.Date); + var valueEditor = MockedValueEditors.CreateDataValueEditor(ValueTypes.Date); var result = valueEditor.TryConvertValueToCrlType("2010-02-05"); Assert.IsTrue(result.Success); @@ -119,10 +90,10 @@ namespace Umbraco.Tests.PropertyEditors [TestCase(ValueTypes.DateTime, "", "")] //test empty string for date public void Value_Editor_Can_Serialize_Value(string valueType, object val, string expected) { - var prop = new Property(1, new PropertyType(TestHelper.ShortStringHelper, "test", ValueStorageType.Nvarchar)); + var prop = new Property(1, new PropertyType(Mock.Of(), "test", ValueStorageType.Nvarchar)); prop.SetValue(val); - var valueEditor = TestHelper.CreateDataValueEditor(valueType); + var valueEditor = MockedValueEditors.CreateDataValueEditor(valueType); var result = valueEditor.ToEditor(prop); Assert.AreEqual(expected, result); @@ -132,9 +103,9 @@ namespace Umbraco.Tests.PropertyEditors public void Value_Editor_Can_Serialize_Decimal_Value() { var value = 12.34M; - var valueEditor = TestHelper.CreateDataValueEditor(ValueTypes.Decimal); + var valueEditor = MockedValueEditors.CreateDataValueEditor(ValueTypes.Decimal); - var prop = new Property(1, new PropertyType(TestHelper.ShortStringHelper, "test", ValueStorageType.Decimal)); + var prop = new Property(1, new PropertyType(Mock.Of(), "test", ValueStorageType.Decimal)); prop.SetValue(value); var result = valueEditor.ToEditor(prop); @@ -144,9 +115,9 @@ namespace Umbraco.Tests.PropertyEditors [Test] public void Value_Editor_Can_Serialize_Decimal_Value_With_Empty_String() { - var valueEditor = TestHelper.CreateDataValueEditor(ValueTypes.Decimal); + var valueEditor = MockedValueEditors.CreateDataValueEditor(ValueTypes.Decimal); - var prop = new Property(1, new PropertyType(TestHelper.ShortStringHelper, "test", ValueStorageType.Decimal)); + var prop = new Property(1, new PropertyType(Mock.Of(), "test", ValueStorageType.Decimal)); prop.SetValue(string.Empty); var result = valueEditor.ToEditor(prop); @@ -157,9 +128,9 @@ namespace Umbraco.Tests.PropertyEditors public void Value_Editor_Can_Serialize_Date_Value() { var now = DateTime.Now; - var valueEditor = TestHelper.CreateDataValueEditor(ValueTypes.Date); + var valueEditor = MockedValueEditors.CreateDataValueEditor(ValueTypes.Date); - var prop = new Property(1, new PropertyType(TestHelper.ShortStringHelper, "test", ValueStorageType.Date)); + var prop = new Property(1, new PropertyType(Mock.Of(), "test", ValueStorageType.Date)); prop.SetValue(now); var result = valueEditor.ToEditor(prop); diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/ConvertersTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/ConvertersTests.cs new file mode 100644 index 0000000000..04c7abb72f --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/ConvertersTests.cs @@ -0,0 +1,177 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Moq; +using NUnit.Framework; +using Umbraco.Core; +using Umbraco.Core.Logging; +using Umbraco.Core.Models; +using Umbraco.Core.Models.PublishedContent; +using Umbraco.Core.PropertyEditors; +using Umbraco.Core.Services; +using Umbraco.Core.Strings; +using Umbraco.Tests.Common.PublishedContent; +using Umbraco.Web.PublishedCache; + +namespace Umbraco.Tests.Published +{ + [TestFixture] + public class ConvertersTests + { + #region SimpleConverter1 + + [Test] + public void SimpleConverter1Test() + { + var converters = new PropertyValueConverterCollection(new IPropertyValueConverter[] + { + new SimpleConverter1(), + }); + + var dataTypeServiceMock = new Mock(); + var dataType = new DataType(new VoidEditor(Mock.Of(), dataTypeServiceMock.Object, + Mock.Of(), Mock.Of(), Mock.Of())) + { Id = 1 }; + dataTypeServiceMock.Setup(x => x.GetAll()).Returns(dataType.Yield); + + var contentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), converters, dataTypeServiceMock.Object); + + IEnumerable CreatePropertyTypes(IPublishedContentType contentType) + { + yield return contentTypeFactory.CreatePropertyType(contentType, "prop1", 1); + } + + var elementType1 = contentTypeFactory.CreateContentType(Guid.NewGuid(), 1000, "element1", CreatePropertyTypes); + + var element1 = new PublishedElement(elementType1, Guid.NewGuid(), new Dictionary { { "prop1", "1234" } }, false); + + Assert.AreEqual(1234, element1.Value(Mock.Of(), "prop1")); + + // 'null' would be considered a 'missing' value by the default, magic logic + var e = new PublishedElement(elementType1, Guid.NewGuid(), new Dictionary { { "prop1", null } }, false); + Assert.IsFalse(e.HasValue("prop1")); + + // '0' would not - it's a valid integer - but the converter knows better + e = new PublishedElement(elementType1, Guid.NewGuid(), new Dictionary { { "prop1", "0" } }, false); + Assert.IsFalse(e.HasValue("prop1")); + } + + private class SimpleConverter1 : IPropertyValueConverter + { + public bool? IsValue(object value, PropertyValueLevel level) + { + switch (level) + { + case PropertyValueLevel.Source: + return null; + case PropertyValueLevel.Inter: + return value is int ivalue && ivalue != 0; + default: + throw new NotSupportedException($"Invalid level: {level}."); + } + } + + public bool IsConverter(IPublishedPropertyType propertyType) + => propertyType.EditorAlias.InvariantEquals("Umbraco.Void"); + + public Type GetPropertyValueType(IPublishedPropertyType propertyType) + => typeof(int); + + public PropertyCacheLevel GetPropertyCacheLevel(IPublishedPropertyType propertyType) + => PropertyCacheLevel.Element; + + public object ConvertSourceToIntermediate(IPublishedElement owner, IPublishedPropertyType propertyType, object source, bool preview) + => int.TryParse(source as string, out int i) ? i : 0; + + public object ConvertIntermediateToObject(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) + => (int)inter; + + public object ConvertIntermediateToXPath(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) + => ((int)inter).ToString(); + } + + #endregion + + #region SimpleConverter2 + + [Test] + public void SimpleConverter2Test() + { + var cacheMock = new Mock(); + var cacheContent = new Dictionary(); + cacheMock.Setup(x => x.GetById(It.IsAny())).Returns(id => cacheContent.TryGetValue(id, out IPublishedContent content) ? content : null); + var publishedSnapshotMock = new Mock(); + publishedSnapshotMock.Setup(x => x.Content).Returns(cacheMock.Object); + var publishedSnapshotAccessorMock = new Mock(); + publishedSnapshotAccessorMock.Setup(x => x.PublishedSnapshot).Returns(publishedSnapshotMock.Object); + var publishedSnapshotAccessor = publishedSnapshotAccessorMock.Object; + + var converters = new PropertyValueConverterCollection(new IPropertyValueConverter[] + { + new SimpleConverter2(publishedSnapshotAccessor), + }); + + var dataTypeServiceMock = new Mock(); + var dataType = new DataType(new VoidEditor(Mock.Of(), dataTypeServiceMock.Object, + Mock.Of(), Mock.Of(), Mock.Of())) + { Id = 1 }; + dataTypeServiceMock.Setup(x => x.GetAll()).Returns(dataType.Yield); + + var contentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), converters, dataTypeServiceMock.Object); + + IEnumerable CreatePropertyTypes(IPublishedContentType contentType) + { + yield return contentTypeFactory.CreatePropertyType(contentType, "prop1", 1); + } + + var elementType1 = contentTypeFactory.CreateContentType(Guid.NewGuid(), 1000, "element1", CreatePropertyTypes); + + var element1 = new PublishedElement(elementType1, Guid.NewGuid(), new Dictionary { { "prop1", "1234" } }, false); + + var cntType1 = contentTypeFactory.CreateContentType(Guid.NewGuid(), 1001, "cnt1", t => Enumerable.Empty()); + var cnt1 = new SolidPublishedContent(cntType1) { Id = 1234 }; + cacheContent[cnt1.Id] = cnt1; + + Assert.AreSame(cnt1, element1.Value(Mock.Of(), "prop1")); + } + + private class SimpleConverter2 : IPropertyValueConverter + { + private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor; + private readonly PropertyCacheLevel _cacheLevel; + + public SimpleConverter2(IPublishedSnapshotAccessor publishedSnapshotAccessor, PropertyCacheLevel cacheLevel = PropertyCacheLevel.None) + { + _publishedSnapshotAccessor = publishedSnapshotAccessor; + _cacheLevel = cacheLevel; + } + + public bool? IsValue(object value, PropertyValueLevel level) + => value != null && (!(value is string) || string.IsNullOrWhiteSpace((string)value) == false); + + public bool IsConverter(IPublishedPropertyType propertyType) + => propertyType.EditorAlias.InvariantEquals("Umbraco.Void"); + + public Type GetPropertyValueType(IPublishedPropertyType propertyType) + // the first version would be the "generic" version, but say we want to be more precise + // and return: whatever Clr type is generated for content type with alias "cnt1" -- which + // we cannot really typeof() at the moment because it has not been generated, hence ModelType. + // => typeof (IPublishedContent); + => ModelType.For("cnt1"); + + public PropertyCacheLevel GetPropertyCacheLevel(IPublishedPropertyType propertyType) + => _cacheLevel; + + public object ConvertSourceToIntermediate(IPublishedElement owner, IPublishedPropertyType propertyType, object source, bool preview) + => int.TryParse(source as string, out int i) ? i : -1; + + public object ConvertIntermediateToObject(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) + => _publishedSnapshotAccessor.PublishedSnapshot.Content.GetById((int)inter); + + public object ConvertIntermediateToXPath(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) + => ((int)inter).ToString(); + } + + #endregion + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/ModelTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/ModelTypeTests.cs new file mode 100644 index 0000000000..43d5b56d6b --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/ModelTypeTests.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using NUnit.Framework; +using Umbraco.Core.Models.PublishedContent; + +namespace Umbraco.Tests.Published +{ + [TestFixture] + public class ModelTypeTests + { + [Test] + public void ModelTypeEqualityTests() + { + Assert.AreNotEqual(ModelType.For("alias1"), ModelType.For("alias1")); + + Assert.IsTrue(ModelType.Equals(ModelType.For("alias1"), ModelType.For("alias1"))); + Assert.IsFalse(ModelType.Equals(ModelType.For("alias1"), ModelType.For("alias2"))); + + Assert.IsTrue(ModelType.Equals(typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1")), typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1")))); + Assert.IsFalse(ModelType.Equals(typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1")), typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias2")))); + + Assert.IsTrue(ModelType.Equals(ModelType.For("alias1").MakeArrayType(), ModelType.For("alias1").MakeArrayType())); + Assert.IsFalse(ModelType.Equals(ModelType.For("alias1").MakeArrayType(), ModelType.For("alias2").MakeArrayType())); + } + + [Test] + public void TypeToStringTests() + { + var type = typeof(int); + Assert.AreEqual("System.Int32", type.ToString()); + Assert.AreEqual("System.Int32[]", type.MakeArrayType().ToString()); + Assert.AreEqual("System.Collections.Generic.IEnumerable`1[System.Int32[]]", typeof(IEnumerable<>).MakeGenericType(type.MakeArrayType()).ToString()); + } + + [Test] + public void TypeFullNameTests() + { + var type = typeof(int); + Assert.AreEqual("System.Int32", type.FullName); + Assert.AreEqual("System.Int32[]", type.MakeArrayType().FullName); + // note the inner assembly qualified name + Assert.AreEqual("System.Collections.Generic.IEnumerable`1[[System.Int32[], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]", typeof(IEnumerable<>).MakeGenericType(type.MakeArrayType()).FullName); + } + + [Test] + public void ModelTypeMapTests() + { + var map = new Dictionary + { + { "alias1", typeof (PublishedSnapshotTestObjects.TestElementModel1) }, + { "alias2", typeof (PublishedSnapshotTestObjects.TestElementModel2) }, + }; + + Assert.AreEqual("Umbraco.Tests.Published.PublishedSnapshotTestObjects+TestElementModel1", + ModelType.Map(ModelType.For("alias1"), map).ToString()); + Assert.AreEqual("Umbraco.Tests.Published.PublishedSnapshotTestObjects+TestElementModel1[]", + ModelType.Map(ModelType.For("alias1").MakeArrayType(), map).ToString()); + Assert.AreEqual("System.Collections.Generic.IEnumerable`1[Umbraco.Tests.Published.PublishedSnapshotTestObjects+TestElementModel1]", + ModelType.Map(typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1")), map).ToString()); + Assert.AreEqual("System.Collections.Generic.IEnumerable`1[Umbraco.Tests.Published.PublishedSnapshotTestObjects+TestElementModel1[]]", + ModelType.Map(typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1").MakeArrayType()), map).ToString()); + } + } +} diff --git a/src/Umbraco.Tests/Published/NestedContentTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/NestedContentTests.cs similarity index 92% rename from src/Umbraco.Tests/Published/NestedContentTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/NestedContentTests.cs index b4b941733c..49362183a9 100644 --- a/src/Umbraco.Tests/Published/NestedContentTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/NestedContentTests.cs @@ -5,24 +5,22 @@ using System.Linq; using Moq; using NUnit.Framework; using Umbraco.Core; -using Umbraco.Web.Composing; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; -using Umbraco.Tests.PublishedContent; -using Umbraco.Tests.TestHelpers; -using Umbraco.Web; +using Umbraco.Core.Strings; +using Umbraco.Tests.Common.PublishedContent; using Umbraco.Web.PropertyEditors; using Umbraco.Web.PropertyEditors.ValueConverters; using Umbraco.Web.PublishedCache; -using Umbraco.Tests.Testing; namespace Umbraco.Tests.Published { [TestFixture] - public class NestedContentTests : UmbracoTestBase + public class NestedContentTests { private (IPublishedContentType, IPublishedContentType) CreateContentTypes() { @@ -32,7 +30,7 @@ namespace Umbraco.Tests.Published var localizationService = Mock.Of(); PropertyEditorCollection editors = null; - var editor = new NestedContentPropertyEditor(logger, new Lazy(() => editors), Mock.Of(),localizationService, Mock.Of(), TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of()); + var editor = new NestedContentPropertyEditor(logger, new Lazy(() => editors), Mock.Of(),localizationService, Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); editors = new PropertyEditorCollection(new DataEditorCollection(new DataEditor[] { editor })); var dataType1 = new DataType(editor) @@ -63,13 +61,14 @@ namespace Umbraco.Tests.Published } }; - var dataType3 = new DataType(new TextboxPropertyEditor(logger, Mock.Of(), localizationService, TestHelper.IOHelper, TestHelper.ShortStringHelper, Mock.Of())) + var dataType3 = new DataType(new TextboxPropertyEditor(logger, Mock.Of(), localizationService, Mock.Of(), Mock.Of(), Mock.Of())) { Id = 3 }; // mocked dataservice returns nested content preValues - var dataTypeService = new TestObjects.TestDataTypeService(dataType1, dataType2, dataType3); + var dataTypeServiceMock = new Mock(); + dataTypeServiceMock.Setup(x => x.GetAll()).Returns(new []{dataType1, dataType2, dataType3}); var publishedModelFactory = new Mock(); @@ -123,7 +122,7 @@ namespace Umbraco.Tests.Published new NestedContentManyValueConverter(publishedSnapshotAccessor.Object, publishedModelFactory.Object, proflog), }); - var factory = new PublishedContentTypeFactory(publishedModelFactory.Object, converters, dataTypeService); + var factory = new PublishedContentTypeFactory(publishedModelFactory.Object, converters, dataTypeServiceMock.Object); IEnumerable CreatePropertyTypes1(IPublishedContentType contentType) { @@ -177,7 +176,7 @@ namespace Umbraco.Tests.Published ]") } }; - var value = content.Value("property1"); + var value = content.Value(Mock.Of(),"property1"); // nested single converter returns proper TestModel value Assert.IsInstanceOf(value); @@ -209,7 +208,7 @@ namespace Umbraco.Tests.Published ]") } }; - var value = content.Value("property2"); + var value = content.Value(Mock.Of(), ("property2")); // nested many converter returns proper IEnumerable value Assert.IsInstanceOf>(value); @@ -227,7 +226,7 @@ namespace Umbraco.Tests.Published : base(content) { } - public string PropValue => this.Value("propertyN1"); + public string PropValue => this.Value(Mock.Of(),"propertyN1"); } class TestPublishedProperty : PublishedPropertyBase diff --git a/src/Umbraco.Tests/Published/PropertyCacheLevelTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/PropertyCacheLevelTests.cs similarity index 84% rename from src/Umbraco.Tests/Published/PropertyCacheLevelTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/PropertyCacheLevelTests.cs index 8aeaf37f7f..cd0c3263dc 100644 --- a/src/Umbraco.Tests/Published/PropertyCacheLevelTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Published/PropertyCacheLevelTests.cs @@ -4,22 +4,18 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; -using Umbraco.Core.Composing; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; using Umbraco.Core.Strings; -using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.Testing; -using Umbraco.Web; using Umbraco.Web.PublishedCache; namespace Umbraco.Tests.Published { [TestFixture] - public class PropertyCacheLevelTests : UmbracoTestBase + public class PropertyCacheLevelTests { [TestCase(PropertyCacheLevel.None, 2)] [TestCase(PropertyCacheLevel.Element, 1)] @@ -34,14 +30,18 @@ namespace Umbraco.Tests.Published converter, }); - var dataTypeService = new TestObjects.TestDataTypeService( - new DataType(new VoidEditor(Mock.Of(), Mock.Of(), Mock.Of(),Mock.Of(), Mock.Of())) { Id = 1 }); + var dataTypeServiceMock = new Mock(); + var dataType = new DataType(new VoidEditor(Mock.Of(), dataTypeServiceMock.Object, + Mock.Of(), Mock.Of(), Mock.Of())) + { Id = 1 }; + dataTypeServiceMock.Setup(x => x.GetAll()).Returns(dataType.Yield); - var publishedContentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), converters, dataTypeService); + + var publishedContentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), converters, dataTypeServiceMock.Object); IEnumerable CreatePropertyTypes(IPublishedContentType contentType) { - yield return publishedContentTypeFactory.CreatePropertyType(contentType, "prop1", 1); + yield return publishedContentTypeFactory.CreatePropertyType(contentType, "prop1", dataType.Id); } var setType1 = publishedContentTypeFactory.CreateContentType(Guid.NewGuid(), 1000, "set1", CreatePropertyTypes); @@ -61,14 +61,14 @@ namespace Umbraco.Tests.Published var set1 = new PublishedElement(setType1, Guid.NewGuid(), new Dictionary { { "prop1", "1234" } }, false); - Assert.AreEqual(1234, set1.Value("prop1")); + Assert.AreEqual(1234, set1.Value(Mock.Of(), "prop1")); Assert.AreEqual(1, converter.SourceConverts); Assert.AreEqual(1, converter.InterConverts); // source is always converted once and cached per content // inter conversion depends on the specified cache level - Assert.AreEqual(1234, set1.Value("prop1")); + Assert.AreEqual(1234, set1.Value(Mock.Of(), "prop1")); Assert.AreEqual(1, converter.SourceConverts); Assert.AreEqual(interConverts, converter.InterConverts); } @@ -115,10 +115,13 @@ namespace Umbraco.Tests.Published converter, }); - var dataTypeService = new TestObjects.TestDataTypeService( - new DataType(new VoidEditor(Mock.Of(), Mock.Of(), Mock.Of(),Mock.Of(), Mock.Of())) { Id = 1 }); + var dataTypeServiceMock = new Mock(); + var dataType = new DataType(new VoidEditor(Mock.Of(), dataTypeServiceMock.Object, + Mock.Of(), Mock.Of(), Mock.Of())) + { Id = 1 }; + dataTypeServiceMock.Setup(x => x.GetAll()).Returns(dataType.Yield); - var publishedContentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), converters, dataTypeService); + var publishedContentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), converters, dataTypeServiceMock.Object); IEnumerable CreatePropertyTypes(IPublishedContentType contentType) { @@ -143,14 +146,14 @@ namespace Umbraco.Tests.Published var set1 = new PublishedElement(setType1, Guid.NewGuid(), new Dictionary { { "prop1", "1234" } }, false, referenceCacheLevel, publishedSnapshotAccessor.Object); - Assert.AreEqual(1234, set1.Value("prop1")); + Assert.AreEqual(1234, set1.Value(Mock.Of(), "prop1")); Assert.AreEqual(1, converter.SourceConverts); Assert.AreEqual(1, converter.InterConverts); Assert.AreEqual(elementsCount1, elementsCache.Count); Assert.AreEqual(snapshotCount1, snapshotCache.Count); - Assert.AreEqual(1234, set1.Value("prop1")); + Assert.AreEqual(1234, set1.Value(Mock.Of(), "prop1")); Assert.AreEqual(1, converter.SourceConverts); Assert.AreEqual(interConverts, converter.InterConverts); @@ -160,7 +163,7 @@ namespace Umbraco.Tests.Published var oldSnapshotCache = snapshotCache; snapshotCache.Clear(); - Assert.AreEqual(1234, set1.Value("prop1")); + Assert.AreEqual(1234, set1.Value(Mock.Of(), "prop1")); Assert.AreEqual(1, converter.SourceConverts); Assert.AreEqual(elementsCount2, elementsCache.Count); @@ -172,7 +175,7 @@ namespace Umbraco.Tests.Published var oldElementsCache = elementsCache; elementsCache.Clear(); - Assert.AreEqual(1234, set1.Value("prop1")); + Assert.AreEqual(1234, set1.Value(Mock.Of(), "prop1")); Assert.AreEqual(1, converter.SourceConverts); Assert.AreEqual(elementsCount2, elementsCache.Count); @@ -192,10 +195,13 @@ namespace Umbraco.Tests.Published converter, }); - var dataTypeService = new TestObjects.TestDataTypeService( - new DataType(new VoidEditor(Mock.Of(), Mock.Of(), Mock.Of(),Mock.Of(), Mock.Of())) { Id = 1 }); + var dataTypeServiceMock = new Mock(); + var dataType = new DataType(new VoidEditor(Mock.Of(), dataTypeServiceMock.Object, + Mock.Of(), Mock.Of(), Mock.Of())) + { Id = 1 }; + dataTypeServiceMock.Setup(x => x.GetAll()).Returns(dataType.Yield); - var publishedContentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), converters, dataTypeService); + var publishedContentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), converters, dataTypeServiceMock.Object); IEnumerable CreatePropertyTypes(IPublishedContentType contentType) { diff --git a/src/Umbraco.Tests/Strings/CmsHelperCasingTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/CmsHelperCasingTests.cs similarity index 74% rename from src/Umbraco.Tests/Strings/CmsHelperCasingTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/CmsHelperCasingTests.cs index 71d789eddb..ecdeb2b9e5 100644 --- a/src/Umbraco.Tests/Strings/CmsHelperCasingTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/CmsHelperCasingTests.cs @@ -1,5 +1,9 @@ -using NUnit.Framework; +using Microsoft.Extensions.Options; +using Moq; +using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration.Models; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Strings; using Umbraco.Tests.Common.Builders; using Umbraco.Tests.TestHelpers; @@ -8,8 +12,10 @@ using Umbraco.Tests.Testing; namespace Umbraco.Tests.Strings { [TestFixture] - public class CmsHelperCasingTests : UmbracoTestBase + public class CmsHelperCasingTests { + private IShortStringHelper ShortStringHelper => new DefaultShortStringHelper(Options.Create(new RequestHandlerSettings())); + [TestCase("thisIsTheEnd", "This Is The End")] [TestCase("th", "Th")] [TestCase("t", "t")] @@ -31,9 +37,8 @@ namespace Umbraco.Tests.Strings [TestCase("WhoIsNumber6InTheVillage", "Who Is Number6 In The Village")] // issue is fixed public void CompatibleDefaultReplacement(string input, string expected) { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var helper = new DefaultShortStringHelper(Microsoft.Extensions.Options.Options.Create(requestHandlerSettings)); - var output = input.Length < 2 ? input : helper.SplitPascalCasing(input, ' ').ToFirstUpperInvariant(); + + var output = input.Length < 2 ? input : ShortStringHelper.SplitPascalCasing(input, ' ').ToFirstUpperInvariant(); Assert.AreEqual(expected, output); } } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/DefaultShortStringHelperTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/DefaultShortStringHelperTests.cs new file mode 100644 index 0000000000..e89fe680b3 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/DefaultShortStringHelperTests.cs @@ -0,0 +1,202 @@ +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using Moq; +using NUnit.Framework; +using Umbraco.Core; +using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.Models; +using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Strings; +using Umbraco.Tests.TestHelpers; +using Umbraco.Tests.Testing; + +namespace Umbraco.Tests.Strings +{ + [TestFixture] + public class DefaultShortStringHelperTests + { + private IShortStringHelper ShortStringHelper { get; set; } + + [SetUp] + public void SetUp() + { + + // NOTE pre-filters runs _before_ Recode takes place + // so there still may be utf8 chars even though you want ascii + + ShortStringHelper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) + .WithConfig(CleanStringType.FileName, new DefaultShortStringHelperConfig.Config + { + //PreFilter = ClearFileChars, // done in IsTerm + IsTerm = (c, leading) => (char.IsLetterOrDigit(c) || c == '_') && DefaultShortStringHelper.IsValidFileNameChar(c), + StringType = CleanStringType.LowerCase | CleanStringType.Ascii, + Separator = '-' + }) + .WithConfig(CleanStringType.UrlSegment, new DefaultShortStringHelperConfig.Config + { + PreFilter = StripQuotes, + IsTerm = (c, leading) => char.IsLetterOrDigit(c) || c == '_', + StringType = CleanStringType.LowerCase | CleanStringType.Ascii, + Separator = '-' + }) + .WithConfig("fr-FR", CleanStringType.UrlSegment, new DefaultShortStringHelperConfig.Config + { + PreFilter = FilterFrenchElisions, + IsTerm = (c, leading) => leading ? char.IsLetter(c) : (char.IsLetterOrDigit(c) || c == '_'), + StringType = CleanStringType.LowerCase | CleanStringType.Ascii, + Separator = '-' + }) + .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config + { + PreFilter = StripQuotes, + IsTerm = (c, leading) => leading ? char.IsLetter(c) : char.IsLetterOrDigit(c), + StringType = CleanStringType.UmbracoCase | CleanStringType.Ascii + }) + .WithConfig("fr-FR", CleanStringType.Alias, new DefaultShortStringHelperConfig.Config + { + PreFilter = WhiteQuotes, + IsTerm = (c, leading) => leading ? char.IsLetter(c) : char.IsLetterOrDigit(c), + StringType = CleanStringType.UmbracoCase | CleanStringType.Ascii + }) + .WithConfig(CleanStringType.ConvertCase, new DefaultShortStringHelperConfig.Config + { + PreFilter = null, + IsTerm = (c, leading) => char.IsLetterOrDigit(c) || c == '_', // letter, digit or underscore + StringType = CleanStringType.Ascii, + BreakTermsOnUpper = true + })); + } + + private static readonly Regex FrenchElisionsRegex = new Regex("\\b(c|d|j|l|m|n|qu|s|t)('|\u8217)", RegexOptions.Compiled | RegexOptions.IgnoreCase); + + private static string FilterFrenchElisions(string s) + { + return FrenchElisionsRegex.Replace(s, ""); + } + + private static string StripQuotes(string s) + { + s = s.ReplaceMany(new Dictionary {{"'", ""}, {"\u8217", ""}}); + return s; + } + + private static string WhiteQuotes(string s) + { + s = s.ReplaceMany(new Dictionary { { "'", " " }, { "\u8217", " " } }); + return s; + } + + #region Cases + [TestCase("foo", "foo")] + [TestCase(" foo ", "foo")] + [TestCase("Foo", "Foo")] + [TestCase("FoO", "FoO")] + [TestCase("FoO bar", "FoOBar")] + [TestCase("FoO bar NIL", "FoOBarNIL")] + [TestCase("FoO 33bar 22NIL", "FoO33bar22NIL")] + [TestCase("FoO 33bar 22NI", "FoO33bar22NI")] + [TestCase("0foo", "foo")] + [TestCase("2foo bar", "fooBar")] + [TestCase("9FOO", "FOO")] + [TestCase("foo-BAR", "fooBAR")] + [TestCase("foo-BA-dang", "fooBADang")] + [TestCase("foo_BAR", "fooBAR")] + [TestCase("foo'BAR", "fooBAR")] + [TestCase("sauté dans l'espace", "sauteDansLespace")] + [TestCase("foo\"\"bar", "fooBar")] + [TestCase("-foo-", "foo")] + [TestCase("_foo_", "foo")] + [TestCase("spécial", "special")] + [TestCase("brô dëk ", "broDek")] + [TestCase("1235brô dëk ", "broDek")] + [TestCase("汉#字*/漢?字", "")] + [TestCase("aa DB cd EFG X KLMN OP qrst", "aaDBCdEFGXKLMNOPQrst")] + [TestCase("AA db cd EFG X KLMN OP qrst", "AADbCdEFGXKLMNOPQrst")] + [TestCase("AAA db cd EFG X KLMN OP qrst", "AAADbCdEFGXKLMNOPQrst")] + [TestCase("4 ways selector", "waysSelector")] + [TestCase("WhatIfWeDoItAgain", "WhatIfWeDoItAgain")] + [TestCase("whatIfWeDoItAgain", "whatIfWeDoItAgain")] + [TestCase("WhatIfWEDOITAgain", "WhatIfWEDOITAgain")] + [TestCase("WhatIfWe doItAgain", "WhatIfWeDoItAgain")] + #endregion + public void CleanStringForSafeAlias(string input, string expected) + { + var output = ShortStringHelper.CleanStringForSafeAlias(input); + Assert.AreEqual(expected, output); + } + + #region Cases + [TestCase("Home Page", "home-page")] + [TestCase("Shannon's Home Page!", "shannons-home-page")] + [TestCase("#Someones's Twitter $h1z%n", "someoness-twitter-h1z-n")] + [TestCase("Räksmörgås", "raksmorgas")] + [TestCase("'em guys-over there, are#goin' a \"little\"bit crazy eh!! :)", "em-guys-over-there-are-goin-a-little-bit-crazy-eh")] + [TestCase("汉#字*/漢?字", "")] + [TestCase("Réalösk fix bran#lo'sk", "realosk-fix-bran-losk")] + [TestCase("200 ways to be happy", "200-ways-to-be-happy")] + #endregion + public void CleanStringForUrlSegment(string input, string expected) + { + var output = ShortStringHelper.CleanStringForUrlSegment(input); + Assert.AreEqual(expected, output); + } + + #region Cases + [TestCase("ThisIsTheEndMyFriend", "This Is The End My Friend")] + [TestCase("ThisIsTHEEndMyFriend", "This Is THE End My Friend")] + [TestCase("THISIsTHEEndMyFriend", "THIS Is THE End My Friend")] + [TestCase("This33I33sThe33EndMyFriend", "This33 I33s The33 End My Friend")] // works! + [TestCase("ThisIsTHEEndMyFriendX", "This Is THE End My Friend X")] + [TestCase("ThisIsTHEEndMyFriendXYZ", "This Is THE End My Friend XYZ")] + [TestCase("ThisIsTHEEndMyFriendXYZt", "This Is THE End My Friend XY Zt")] + [TestCase("UneÉlévationÀPartir", "Une Élévation À Partir")] + #endregion + public void SplitPascalCasing(string input, string expected) + { + var output = ShortStringHelper.SplitPascalCasing(input, ' '); + Assert.AreEqual(expected, output); + + output = ShortStringHelper.SplitPascalCasing(input, '*'); + expected = expected.Replace(' ', '*'); + Assert.AreEqual(expected, output); + } + + #region Cases + [TestCase("sauté dans l'espace", "saute-dans-espace", "fr-FR", CleanStringType.UrlSegment | CleanStringType.Ascii | CleanStringType.LowerCase)] + [TestCase("sauté dans l'espace", "sauté-dans-espace", "fr-FR", CleanStringType.UrlSegment | CleanStringType.Utf8 | CleanStringType.LowerCase)] + [TestCase("sauté dans l'espace", "SauteDansLEspace", "fr-FR", CleanStringType.Alias | CleanStringType.Ascii | CleanStringType.PascalCase)] + [TestCase("he doesn't want", "he-doesnt-want", null, CleanStringType.UrlSegment | CleanStringType.Ascii | CleanStringType.LowerCase)] + [TestCase("he doesn't want", "heDoesntWant", null, CleanStringType.Alias | CleanStringType.Ascii | CleanStringType.CamelCase)] + #endregion + public void CleanStringWithTypeAndCulture(string input, string expected, string culture, CleanStringType stringType) + { + // picks the proper config per culture + // and overrides some stringType params (ascii...) + var output = ShortStringHelper.CleanString(input, stringType, culture); + Assert.AreEqual(expected, output); + } + + #region Cases + [TestCase("foo.txt", "foo.txt")] + [TestCase("foo", "foo")] + [TestCase(".txt", ".txt")] + [TestCase("nag*dog/poo:xit.txt", "nag-dog-poo-xit.txt")] + [TestCase("the dog is in the house.txt", "the-dog-is-in-the-house.txt")] + [TestCase("nil.nil.nil.txt", "nil-nil-nil.txt")] + [TestCase("taradabum", "taradabum")] + [TestCase("tara$$da:b/u (char.IsLetterOrDigit(c) || c == '_') && DefaultShortStringHelper.IsValidFileNameChar(c), - StringType = CleanStringType.LowerCase | CleanStringType.Ascii, - Separator = '-' - }) - .WithConfig(CleanStringType.UrlSegment, new DefaultShortStringHelperConfig.Config - { - PreFilter = StripQuotes, - IsTerm = (c, leading) => char.IsLetterOrDigit(c) || c == '_', - StringType = CleanStringType.LowerCase | CleanStringType.Ascii, - Separator = '-' - }) - .WithConfig("fr-FR", CleanStringType.UrlSegment, new DefaultShortStringHelperConfig.Config - { - PreFilter = FilterFrenchElisions, - IsTerm = (c, leading) => leading ? char.IsLetter(c) : (char.IsLetterOrDigit(c) || c == '_'), - StringType = CleanStringType.LowerCase | CleanStringType.Ascii, - Separator = '-' - }) - .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config - { - PreFilter = StripQuotes, - IsTerm = (c, leading) => leading ? char.IsLetter(c) : char.IsLetterOrDigit(c), - StringType = CleanStringType.UmbracoCase | CleanStringType.Ascii - }) - .WithConfig("fr-FR", CleanStringType.Alias, new DefaultShortStringHelperConfig.Config - { - PreFilter = WhiteQuotes, - IsTerm = (c, leading) => leading ? char.IsLetter(c) : char.IsLetterOrDigit(c), - StringType = CleanStringType.UmbracoCase | CleanStringType.Ascii - }) - .WithConfig(CleanStringType.ConvertCase, new DefaultShortStringHelperConfig.Config - { - PreFilter = null, - IsTerm = (c, leading) => char.IsLetterOrDigit(c) || c == '_', // letter, digit or underscore - StringType = CleanStringType.Ascii, - BreakTermsOnUpper = true - })); - - // FIXME: move to a "compose" thing? - Composition.RegisterUnique(f => _helper); - } - - private static readonly Regex FrenchElisionsRegex = new Regex("\\b(c|d|j|l|m|n|qu|s|t)('|\u8217)", RegexOptions.Compiled | RegexOptions.IgnoreCase); - - private static string FilterFrenchElisions(string s) - { - return FrenchElisionsRegex.Replace(s, ""); - } - - private static string StripQuotes(string s) - { - s = s.ReplaceMany(new Dictionary {{"'", ""}, {"\u8217", ""}}); - return s; - } - - private static string WhiteQuotes(string s) - { - s = s.ReplaceMany(new Dictionary { { "'", " " }, { "\u8217", " " } }); - return s; - } [Test] public void U4_4056() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder() - .WithConvertUrlsToAscii("false") - .WithCharCollection(Enumerable.Empty()) - .Build(); + var requestHandlerSettings = new RequestHandlerSettings() + { + CharCollection = Enumerable.Empty(), + ConvertUrlsToAscii = "false" + }; const string input = "ÆØÅ and æøå and 中文测试 and אודות האתר and größer БбДдЖж page"; @@ -118,10 +42,11 @@ namespace Umbraco.Tests.Strings [Test] public void U4_4056_TryAscii() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder() - .WithConvertUrlsToAscii("false") - .WithCharCollection(Enumerable.Empty()) - .Build(); + var requestHandlerSettings = new RequestHandlerSettings() + { + CharCollection = Enumerable.Empty(), + ConvertUrlsToAscii = "false" + }; const string input1 = "ÆØÅ and æøå and 中文测试 and אודות האתר and größer БбДдЖж page"; const string input2 = "ÆØÅ and æøå and größer БбДдЖж page"; @@ -144,8 +69,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringUnderscoreInTerm() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { // underscore is accepted within terms @@ -155,7 +79,7 @@ namespace Umbraco.Tests.Strings })); Assert.AreEqual("foo_bar*nil", helper.CleanString("foo_bar nil", CleanStringType.Alias)); - helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { // underscore is not accepted within terms @@ -169,8 +93,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringLeadingChars() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { // letters and digits are valid leading chars @@ -180,7 +103,7 @@ namespace Umbraco.Tests.Strings })); Assert.AreEqual("0123foo*bar*543*nil*321", helper.CleanString("0123foo_bar 543 nil 321", CleanStringType.Alias)); - helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { // only letters are valid leading chars @@ -191,15 +114,14 @@ namespace Umbraco.Tests.Strings Assert.AreEqual("foo*bar*543*nil*321", helper.CleanString("0123foo_bar 543 nil 321", CleanStringType.Alias)); Assert.AreEqual("foo*bar*543*nil*321", helper.CleanString("0123 foo_bar 543 nil 321", CleanStringType.Alias)); - helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings)); + helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings() )); Assert.AreEqual("child2", helper.CleanStringForSafeAlias("1child2")); } [Test] public void CleanStringTermOnUpper() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -209,7 +131,7 @@ namespace Umbraco.Tests.Strings })); Assert.AreEqual("foo*Bar", helper.CleanString("fooBar", CleanStringType.Alias)); - helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -223,8 +145,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringAcronymOnNonUpper() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -237,7 +158,7 @@ namespace Umbraco.Tests.Strings Assert.AreEqual("foo*BAnil", helper.CleanString("foo BAnil", CleanStringType.Alias)); Assert.AreEqual("foo*Bnil", helper.CleanString("foo Bnil", CleanStringType.Alias)); - helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -254,8 +175,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringGreedyAcronyms() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -268,7 +188,7 @@ namespace Umbraco.Tests.Strings Assert.AreEqual("foo*BA*nil", helper.CleanString("foo BAnil", CleanStringType.Alias)); Assert.AreEqual("foo*Bnil", helper.CleanString("foo Bnil", CleanStringType.Alias)); - helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -285,8 +205,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringWhiteSpace() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -299,8 +218,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringSeparator() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -308,7 +226,7 @@ namespace Umbraco.Tests.Strings })); Assert.AreEqual("foo*bar", helper.CleanString("foo bar", CleanStringType.Alias)); - helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -316,14 +234,14 @@ namespace Umbraco.Tests.Strings })); Assert.AreEqual("foo bar", helper.CleanString("foo bar", CleanStringType.Alias)); - helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged })); Assert.AreEqual("foobar", helper.CleanString("foo bar", CleanStringType.Alias)); - helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -335,8 +253,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringSymbols() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -390,9 +307,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringEncoding() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - - var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -401,7 +316,7 @@ namespace Umbraco.Tests.Strings Assert.AreEqual("中文测试", helper.CleanString("中文测试", CleanStringType.Alias)); Assert.AreEqual("léger*中文测试*ZÔRG", helper.CleanString("léger 中文测试 ZÔRG", CleanStringType.Alias)); - helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Ascii | CleanStringType.Unchanged, @@ -414,10 +329,11 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringDefaultConfig() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder() - .WithCharCollection(Enumerable.Empty()) - .WithConvertUrlsToAscii("false") - .Build(); + var requestHandlerSettings = new RequestHandlerSettings() + { + CharCollection = Enumerable.Empty(), + ConvertUrlsToAscii = "false" + }; var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings)); @@ -440,8 +356,7 @@ namespace Umbraco.Tests.Strings [Test] public void CleanStringCasing() { - var requestHandlerSettings = new RequestHandlerSettingsBuilder().Build(); - var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(requestHandlerSettings) + var helper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(new RequestHandlerSettings()) .WithConfig(CleanStringType.Alias, new DefaultShortStringHelperConfig.Config { StringType = CleanStringType.Utf8 | CleanStringType.Unchanged, @@ -487,138 +402,29 @@ namespace Umbraco.Tests.Strings Assert.AreEqual("Special Xml Writer", helper.CleanString("special XML writer", CleanStringType.Alias | CleanStringType.PascalCase)); } - #region Cases - [TestCase("foo", "foo")] - [TestCase(" foo ", "foo")] - [TestCase("Foo", "Foo")] - [TestCase("FoO", "FoO")] - [TestCase("FoO bar", "FoOBar")] - [TestCase("FoO bar NIL", "FoOBarNIL")] - [TestCase("FoO 33bar 22NIL", "FoO33bar22NIL")] - [TestCase("FoO 33bar 22NI", "FoO33bar22NI")] - [TestCase("0foo", "foo")] - [TestCase("2foo bar", "fooBar")] - [TestCase("9FOO", "FOO")] - [TestCase("foo-BAR", "fooBAR")] - [TestCase("foo-BA-dang", "fooBADang")] - [TestCase("foo_BAR", "fooBAR")] - [TestCase("foo'BAR", "fooBAR")] - [TestCase("sauté dans l'espace", "sauteDansLespace")] - [TestCase("foo\"\"bar", "fooBar")] - [TestCase("-foo-", "foo")] - [TestCase("_foo_", "foo")] - [TestCase("spécial", "special")] - [TestCase("brô dëk ", "broDek")] - [TestCase("1235brô dëk ", "broDek")] - [TestCase("汉#字*/漢?字", "")] - [TestCase("aa DB cd EFG X KLMN OP qrst", "aaDBCdEFGXKLMNOPQrst")] - [TestCase("AA db cd EFG X KLMN OP qrst", "AADbCdEFGXKLMNOPQrst")] - [TestCase("AAA db cd EFG X KLMN OP qrst", "AAADbCdEFGXKLMNOPQrst")] - [TestCase("4 ways selector", "waysSelector")] - [TestCase("WhatIfWeDoItAgain", "WhatIfWeDoItAgain")] - [TestCase("whatIfWeDoItAgain", "whatIfWeDoItAgain")] - [TestCase("WhatIfWEDOITAgain", "WhatIfWEDOITAgain")] - [TestCase("WhatIfWe doItAgain", "WhatIfWeDoItAgain")] - #endregion - public void CleanStringForSafeAlias(string input, string expected) - { - var output = _helper.CleanStringForSafeAlias(input); - Assert.AreEqual(expected, output); - } + // #region Cases + // [TestCase("This is my_little_house so cute.", "thisIsMyLittleHouseSoCute", false)] + // [TestCase("This is my_little_house so cute.", "thisIsMy_little_houseSoCute", true)] + // [TestCase("This is my_Little_House so cute.", "thisIsMyLittleHouseSoCute", false)] + // [TestCase("This is my_Little_House so cute.", "thisIsMy_Little_HouseSoCute", true)] + // [TestCase("An UPPER_CASE_TEST to check", "anUpperCaseTestToCheck", false)] + // [TestCase("An UPPER_CASE_TEST to check", "anUpper_case_testToCheck", true)] + // [TestCase("Trailing_", "trailing", false)] + // [TestCase("Trailing_", "trailing_", true)] + // [TestCase("_Leading", "leading", false)] + // [TestCase("_Leading", "leading", true)] + // [TestCase("Repeat___Repeat", "repeatRepeat", false)] + // [TestCase("Repeat___Repeat", "repeat___Repeat", true)] + // [TestCase("Repeat___repeat", "repeatRepeat", false)] + // [TestCase("Repeat___repeat", "repeat___repeat", true)] + // #endregion + // public void CleanStringWithUnderscore(string input, string expected, bool allowUnderscoreInTerm) + // { + // var helper = new DefaultShortStringHelper(SettingsForTests.GetDefault()) + // .WithConfig(allowUnderscoreInTerm: allowUnderscoreInTerm); + // var output = helper.CleanString(input, CleanStringType.Alias | CleanStringType.Ascii | CleanStringType.CamelCase); + // Assert.AreEqual(expected, output); + // } - //#region Cases - //[TestCase("This is my_little_house so cute.", "thisIsMyLittleHouseSoCute", false)] - //[TestCase("This is my_little_house so cute.", "thisIsMy_little_houseSoCute", true)] - //[TestCase("This is my_Little_House so cute.", "thisIsMyLittleHouseSoCute", false)] - //[TestCase("This is my_Little_House so cute.", "thisIsMy_Little_HouseSoCute", true)] - //[TestCase("An UPPER_CASE_TEST to check", "anUpperCaseTestToCheck", false)] - //[TestCase("An UPPER_CASE_TEST to check", "anUpper_case_testToCheck", true)] - //[TestCase("Trailing_", "trailing", false)] - //[TestCase("Trailing_", "trailing_", true)] - //[TestCase("_Leading", "leading", false)] - //[TestCase("_Leading", "leading", true)] - //[TestCase("Repeat___Repeat", "repeatRepeat", false)] - //[TestCase("Repeat___Repeat", "repeat___Repeat", true)] - //[TestCase("Repeat___repeat", "repeatRepeat", false)] - //[TestCase("Repeat___repeat", "repeat___repeat", true)] - //#endregion - //public void CleanStringWithUnderscore(string input, string expected, bool allowUnderscoreInTerm) - //{ - // var helper = new DefaultShortStringHelper(SettingsForTests.GetDefault()) - // .WithConfig(allowUnderscoreInTerm: allowUnderscoreInTerm); - // var output = helper.CleanString(input, CleanStringType.Alias | CleanStringType.Ascii | CleanStringType.CamelCase); - // Assert.AreEqual(expected, output); - //} - - #region Cases - [TestCase("Home Page", "home-page")] - [TestCase("Shannon's Home Page!", "shannons-home-page")] - [TestCase("#Someones's Twitter $h1z%n", "someoness-twitter-h1z-n")] - [TestCase("Räksmörgås", "raksmorgas")] - [TestCase("'em guys-over there, are#goin' a \"little\"bit crazy eh!! :)", "em-guys-over-there-are-goin-a-little-bit-crazy-eh")] - [TestCase("汉#字*/漢?字", "")] - [TestCase("Réalösk fix bran#lo'sk", "realosk-fix-bran-losk")] - [TestCase("200 ways to be happy", "200-ways-to-be-happy")] - #endregion - public void CleanStringForUrlSegment(string input, string expected) - { - var output = _helper.CleanStringForUrlSegment(input); - Assert.AreEqual(expected, output); - } - - #region Cases - [TestCase("ThisIsTheEndMyFriend", "This Is The End My Friend")] - [TestCase("ThisIsTHEEndMyFriend", "This Is THE End My Friend")] - [TestCase("THISIsTHEEndMyFriend", "THIS Is THE End My Friend")] - [TestCase("This33I33sThe33EndMyFriend", "This33 I33s The33 End My Friend")] // works! - [TestCase("ThisIsTHEEndMyFriendX", "This Is THE End My Friend X")] - [TestCase("ThisIsTHEEndMyFriendXYZ", "This Is THE End My Friend XYZ")] - [TestCase("ThisIsTHEEndMyFriendXYZt", "This Is THE End My Friend XY Zt")] - [TestCase("UneÉlévationÀPartir", "Une Élévation À Partir")] - #endregion - public void SplitPascalCasing(string input, string expected) - { - var output = _helper.SplitPascalCasing(input, ' '); - Assert.AreEqual(expected, output); - - output = _helper.SplitPascalCasing(input, '*'); - expected = expected.Replace(' ', '*'); - Assert.AreEqual(expected, output); - } - - #region Cases - [TestCase("sauté dans l'espace", "saute-dans-espace", "fr-FR", CleanStringType.UrlSegment | CleanStringType.Ascii | CleanStringType.LowerCase)] - [TestCase("sauté dans l'espace", "sauté-dans-espace", "fr-FR", CleanStringType.UrlSegment | CleanStringType.Utf8 | CleanStringType.LowerCase)] - [TestCase("sauté dans l'espace", "SauteDansLEspace", "fr-FR", CleanStringType.Alias | CleanStringType.Ascii | CleanStringType.PascalCase)] - [TestCase("he doesn't want", "he-doesnt-want", null, CleanStringType.UrlSegment | CleanStringType.Ascii | CleanStringType.LowerCase)] - [TestCase("he doesn't want", "heDoesntWant", null, CleanStringType.Alias | CleanStringType.Ascii | CleanStringType.CamelCase)] - #endregion - public void CleanStringWithTypeAndCulture(string input, string expected, string culture, CleanStringType stringType) - { - // picks the proper config per culture - // and overrides some stringType params (ascii...) - var output = _helper.CleanString(input, stringType, culture); - Assert.AreEqual(expected, output); - } - - #region Cases - [TestCase("foo.txt", "foo.txt")] - [TestCase("foo", "foo")] - [TestCase(".txt", ".txt")] - [TestCase("nag*dog/poo:xit.txt", "nag-dog-poo-xit.txt")] - [TestCase("the dog is in the house.txt", "the-dog-is-in-the-house.txt")] - [TestCase("nil.nil.nil.txt", "nil-nil-nil.txt")] - [TestCase("taradabum", "taradabum")] - [TestCase("tara$$da:b/u()); Assert.AreEqual(result, output.Success); } @@ -89,37 +88,6 @@ namespace Umbraco.Tests.Strings Assert.AreEqual(cleaned, result); } - [TestCase("This is a string to encrypt")] - [TestCase("This is a string to encrypt\nThis is a second line")] - [TestCase(" White space is preserved ")] - [TestCase("\nWhite space is preserved\n")] - public void Encrypt_And_Decrypt(string input) - { - var encrypted = input.EncryptWithMachineKey(); - var decrypted = encrypted.DecryptWithMachineKey(); - Assert.AreNotEqual(input, encrypted); - Assert.AreEqual(input, decrypted); - } - - [Test()] - public void Encrypt_And_Decrypt_Long_Value() - { - // Generate a really long string - char[] chars = { 'a', 'b', 'c', '1', '2', '3', '\n' }; - - string valueToTest = string.Empty; - - // Create a string 7035 chars long - for (int i = 0; i < 1005; i++) - for (int j = 0; j < chars.Length; j++) - valueToTest += chars[j].ToString(); - - var encrypted = valueToTest.EncryptWithMachineKey(); - var decrypted = encrypted.DecryptWithMachineKey(); - Assert.AreNotEqual(valueToTest, encrypted); - Assert.AreEqual(valueToTest, decrypted); - } - [TestCase("Hello this is my string", " string", "Hello this is my")] [TestCase("Hello this is my string strung", " string", "Hello this is my string strung")] [TestCase("Hello this is my string string", " string", "Hello this is my")] diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/StringValidationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/StringValidationTests.cs new file mode 100644 index 0000000000..4de74b2828 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/StringValidationTests.cs @@ -0,0 +1,42 @@ +using System.ComponentModel.DataAnnotations; +using NUnit.Framework; +using Umbraco.Tests.TestHelpers; +using Umbraco.Tests.Testing; + +namespace Umbraco.Tests.Strings +{ + [TestFixture] + public class StringValidationTests + { + [TestCase("someone@somewhere.com", ExpectedResult = true)] + [TestCase("someone@somewhere.co.uk", ExpectedResult = true)] + [TestCase("someone+tag@somewhere.net", ExpectedResult = true)] + [TestCase("futureTLD@somewhere.fooo", ExpectedResult = true)] + + [TestCase("abc@xyz.financial", ExpectedResult = true)] + [TestCase("admin+gmail-syntax@c.pizza", ExpectedResult = true)] + [TestCase("admin@c.pizza", ExpectedResult = true)] + + [TestCase("fdsa", ExpectedResult = false)] + [TestCase("fdsa@", ExpectedResult = false)] + + // IsValid can be either a powerful regex OR a dummy test, + // and by default it depends on System.ComponentModel.DataAnnotations.AppSettings.DisableRegEx + // which ends up using BinaryCompatibility.Current.TargetsAtLeastFramework472 so for some reason + // in 472 we are not using the regex anymore + // + // it can be forced, though with an app settings + // dataAnnotations:dataTypeAttribute:disableRegEx = false + // + // since Umbraco is now 4.7.2+, the setting is required for the following tests to pass + + //[TestCase("fdsa@fdsa", ExpectedResult = false)] + //[TestCase("fdsa@fdsa.", ExpectedResult = false)] + public bool Validate_Email_Address(string input) + { + var foo = new EmailAddressAttribute(); + + return foo.IsValid(input); + } + } +} diff --git a/src/Umbraco.Tests/Strings/StylesheetHelperTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/StylesheetHelperTests.cs similarity index 97% rename from src/Umbraco.Tests/Strings/StylesheetHelperTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/StylesheetHelperTests.cs index 5ae4c0511f..46efce7a5b 100644 --- a/src/Umbraco.Tests/Strings/StylesheetHelperTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/ShortStringHelper/StylesheetHelperTests.cs @@ -1,15 +1,12 @@ using System.Linq; -using System.Text; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Strings.Css; -using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.Testing; namespace Umbraco.Tests.Strings { [TestFixture] - public class StylesheetHelperTests : UmbracoTestBase + public class StylesheetHelperTests { [Test] public void Replace_Rule() diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj index d22ca002a1..a0be703791 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj @@ -21,4 +21,5 @@ + diff --git a/src/Umbraco.Tests/Models/MediaXmlTest.cs b/src/Umbraco.Tests/Models/MediaXmlTest.cs index 593a581f85..1a1f854e5e 100644 --- a/src/Umbraco.Tests/Models/MediaXmlTest.cs +++ b/src/Umbraco.Tests/Models/MediaXmlTest.cs @@ -9,7 +9,6 @@ using Umbraco.Core.Logging; using Umbraco.Core.Services; using Umbraco.Core.Strings; using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; diff --git a/src/Umbraco.Tests/Models/VariationTests.cs b/src/Umbraco.Tests/Models/VariationTests.cs index e811d06db1..b8868a8d0d 100644 --- a/src/Umbraco.Tests/Models/VariationTests.cs +++ b/src/Umbraco.Tests/Models/VariationTests.cs @@ -9,6 +9,7 @@ using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; using Umbraco.Core.Strings; using Umbraco.Tests.TestHelpers; +using Umbraco.Tests.TestHelpers.Entities; using ILogger = Umbraco.Core.Logging.ILogger; using Current = Umbraco.Web.Composing.Current; @@ -37,7 +38,7 @@ namespace Umbraco.Tests.Models var dataEditors = new DataEditorCollection(new IDataEditor[] { - new DataEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()) { Alias = "editor", ExplicitValueEditor = TestHelper.CreateDataValueEditor("view") } + new DataEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()) { Alias = "editor", ExplicitValueEditor = MockedValueEditors.CreateDataValueEditor("view") } }); var propertyEditors = new PropertyEditorCollection(dataEditors); diff --git a/src/Umbraco.Tests/Published/ConvertersTests.cs b/src/Umbraco.Tests/Published/ConvertersTests.cs index 5f1fd7c3fd..21f7be9a54 100644 --- a/src/Umbraco.Tests/Published/ConvertersTests.cs +++ b/src/Umbraco.Tests/Published/ConvertersTests.cs @@ -6,6 +6,7 @@ using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Composing; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; @@ -15,165 +16,13 @@ using Umbraco.Core.Strings; using Umbraco.Tests.Components; using Umbraco.Tests.PublishedContent; using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.Testing; -using Umbraco.Web; using Umbraco.Web.PublishedCache; namespace Umbraco.Tests.Published { [TestFixture] - public class ConvertersTests : UmbracoTestBase + public class ConvertersTests { - #region SimpleConverter1 - - [Test] - public void SimpleConverter1Test() - { - var converters = new PropertyValueConverterCollection(new IPropertyValueConverter[] - { - new SimpleConverter1(), - }); - - var dataTypeService = new TestObjects.TestDataTypeService( - new DataType(new VoidEditor(Mock.Of(), Mock.Of(), Mock.Of(),Mock.Of(), Mock.Of())) { Id = 1 }); - - var contentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), converters, dataTypeService); - - IEnumerable CreatePropertyTypes(IPublishedContentType contentType) - { - yield return contentTypeFactory.CreatePropertyType(contentType, "prop1", 1); - } - - var elementType1 = contentTypeFactory.CreateContentType(Guid.NewGuid(), 1000, "element1", CreatePropertyTypes); - - var element1 = new PublishedElement(elementType1, Guid.NewGuid(), new Dictionary { { "prop1", "1234" } }, false); - - Assert.AreEqual(1234, element1.Value("prop1")); - - // 'null' would be considered a 'missing' value by the default, magic logic - var e = new PublishedElement(elementType1, Guid.NewGuid(), new Dictionary { { "prop1", null } }, false); - Assert.IsFalse(e.HasValue("prop1")); - - // '0' would not - it's a valid integer - but the converter knows better - e = new PublishedElement(elementType1, Guid.NewGuid(), new Dictionary { { "prop1", "0" } }, false); - Assert.IsFalse(e.HasValue("prop1")); - } - - private class SimpleConverter1 : IPropertyValueConverter - { - public bool? IsValue(object value, PropertyValueLevel level) - { - switch (level) - { - case PropertyValueLevel.Source: - return null; - case PropertyValueLevel.Inter: - return value is int ivalue && ivalue != 0; - default: - throw new NotSupportedException($"Invalid level: {level}."); - } - } - - public bool IsConverter(IPublishedPropertyType propertyType) - => propertyType.EditorAlias.InvariantEquals("Umbraco.Void"); - - public Type GetPropertyValueType(IPublishedPropertyType propertyType) - => typeof(int); - - public PropertyCacheLevel GetPropertyCacheLevel(IPublishedPropertyType propertyType) - => PropertyCacheLevel.Element; - - public object ConvertSourceToIntermediate(IPublishedElement owner, IPublishedPropertyType propertyType, object source, bool preview) - => int.TryParse(source as string, out int i) ? i : 0; - - public object ConvertIntermediateToObject(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) - => (int)inter; - - public object ConvertIntermediateToXPath(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) - => ((int)inter).ToString(); - } - - #endregion - - #region SimpleConverter2 - - [Test] - public void SimpleConverter2Test() - { - var cacheMock = new Mock(); - var cacheContent = new Dictionary(); - cacheMock.Setup(x => x.GetById(It.IsAny())).Returns(id => cacheContent.TryGetValue(id, out IPublishedContent content) ? content : null); - var publishedSnapshotMock = new Mock(); - publishedSnapshotMock.Setup(x => x.Content).Returns(cacheMock.Object); - var publishedSnapshotAccessorMock = new Mock(); - publishedSnapshotAccessorMock.Setup(x => x.PublishedSnapshot).Returns(publishedSnapshotMock.Object); - var publishedSnapshotAccessor = publishedSnapshotAccessorMock.Object; - - var converters = new PropertyValueConverterCollection(new IPropertyValueConverter[] - { - new SimpleConverter2(publishedSnapshotAccessor), - }); - - var dataTypeService = new TestObjects.TestDataTypeService( - new DataType(new VoidEditor(Mock.Of(), Mock.Of(), Mock.Of(),Mock.Of(), Mock.Of())) { Id = 1 }); - - var contentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), converters, dataTypeService); - - IEnumerable CreatePropertyTypes(IPublishedContentType contentType) - { - yield return contentTypeFactory.CreatePropertyType(contentType, "prop1", 1); - } - - var elementType1 = contentTypeFactory.CreateContentType(Guid.NewGuid(), 1000, "element1", CreatePropertyTypes); - - var element1 = new PublishedElement(elementType1, Guid.NewGuid(), new Dictionary { { "prop1", "1234" } }, false); - - var cntType1 = contentTypeFactory.CreateContentType(Guid.NewGuid(), 1001, "cnt1", t => Enumerable.Empty()); - var cnt1 = new SolidPublishedContent(cntType1) { Id = 1234 }; - cacheContent[cnt1.Id] = cnt1; - - Assert.AreSame(cnt1, element1.Value("prop1")); - } - - private class SimpleConverter2 : IPropertyValueConverter - { - private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor; - private readonly PropertyCacheLevel _cacheLevel; - - public SimpleConverter2(IPublishedSnapshotAccessor publishedSnapshotAccessor, PropertyCacheLevel cacheLevel = PropertyCacheLevel.None) - { - _publishedSnapshotAccessor = publishedSnapshotAccessor; - _cacheLevel = cacheLevel; - } - - public bool? IsValue(object value, PropertyValueLevel level) - => value != null && (!(value is string) || string.IsNullOrWhiteSpace((string)value) == false); - - public bool IsConverter(IPublishedPropertyType propertyType) - => propertyType.EditorAlias.InvariantEquals("Umbraco.Void"); - - public Type GetPropertyValueType(IPublishedPropertyType propertyType) - // the first version would be the "generic" version, but say we want to be more precise - // and return: whatever Clr type is generated for content type with alias "cnt1" -- which - // we cannot really typeof() at the moment because it has not been generated, hence ModelType. - // => typeof (IPublishedContent); - => ModelType.For("cnt1"); - - public PropertyCacheLevel GetPropertyCacheLevel(IPublishedPropertyType propertyType) - => _cacheLevel; - - public object ConvertSourceToIntermediate(IPublishedElement owner, IPublishedPropertyType propertyType, object source, bool preview) - => int.TryParse(source as string, out int i) ? i : -1; - - public object ConvertIntermediateToObject(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) - => _publishedSnapshotAccessor.PublishedSnapshot.Content.GetById((int)inter); - - public object ConvertIntermediateToXPath(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) - => ((int)inter).ToString(); - } - - #endregion - #region SimpleConverter3 [Test] @@ -182,10 +31,10 @@ namespace Umbraco.Tests.Published // Current.Reset(); var register = TestHelper.GetRegister(); - var composition = new Composition(register, TestHelper.GetMockedTypeLoader(), Mock.Of(), ComponentTests.MockRuntimeState(RuntimeLevel.Run), TestHelper.IOHelper, AppCaches.NoCache); + var composition = new Composition(register, TestHelper.GetMockedTypeLoader(), Mock.Of(), ComponentTests.MockRuntimeState(RuntimeLevel.Run), Mock.Of(), AppCaches.NoCache); composition.WithCollectionBuilder() - .Append() + .Append() .Append(); IPublishedModelFactory factory = new PublishedModelFactory(new[] @@ -208,11 +57,17 @@ namespace Umbraco.Tests.Published var converters = registerFactory.GetInstance(); - var dataTypeService = new TestObjects.TestDataTypeService( - new DataType(new VoidEditor(Mock.Of(), Mock.Of(), Mock.Of(),Mock.Of(), Mock.Of())) { Id = 1 }, - new DataType(new VoidEditor("2", Mock.Of(), Mock.Of(),Mock.Of(), Mock.Of(), Mock.Of())) { Id = 2 }); + var dataTypeServiceMock = new Mock(); + var dataType1 = new DataType(new VoidEditor(Mock.Of(), dataTypeServiceMock.Object, + Mock.Of(), Mock.Of(), Mock.Of())) + { Id = 1 }; + var dataType2 = new DataType(new VoidEditor("2", Mock.Of(), Mock.Of(), + Mock.Of(), Mock.Of(), Mock.Of())) + { Id = 2 }; - var contentTypeFactory = new PublishedContentTypeFactory(factory, converters, dataTypeService); + dataTypeServiceMock.Setup(x => x.GetAll()).Returns(new []{dataType1, dataType2 }); + + var contentTypeFactory = new PublishedContentTypeFactory(factory, converters, dataTypeServiceMock.Object); IEnumerable CreatePropertyTypes(IPublishedContentType contentType, int i) { @@ -258,8 +113,8 @@ namespace Umbraco.Tests.Published var mmodel2 = (PublishedSnapshotTestObjects.TestElementModel2)model2; // and get direct property - Assert.IsInstanceOf(model2.Value("prop2")); - Assert.AreEqual(1, ((PublishedSnapshotTestObjects.TestContentModel1[])model2.Value("prop2")).Length); + Assert.IsInstanceOf(model2.Value(Mock.Of(), "prop2")); + Assert.AreEqual(1, ((PublishedSnapshotTestObjects.TestContentModel1[])model2.Value(Mock.Of(), "prop2")).Length); // and get model property Assert.IsInstanceOf>(mmodel2.Prop2); diff --git a/src/Umbraco.Tests/Published/ModelTypeTests.cs b/src/Umbraco.Tests/Published/ModelTypeTests.cs index f698c20fa2..43639c88a1 100644 --- a/src/Umbraco.Tests/Published/ModelTypeTests.cs +++ b/src/Umbraco.Tests/Published/ModelTypeTests.cs @@ -8,38 +8,21 @@ namespace Umbraco.Tests.Published [TestFixture] public class ModelTypeTests { - [Test] - public void ModelTypeEqualityTests() - { - Assert.AreNotEqual(ModelType.For("alias1"), ModelType.For("alias1")); - - Assert.IsTrue(ModelType.Equals(ModelType.For("alias1"), ModelType.For("alias1"))); - Assert.IsFalse(ModelType.Equals(ModelType.For("alias1"), ModelType.For("alias2"))); - - Assert.IsTrue(ModelType.Equals(typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1")), typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1")))); - Assert.IsFalse(ModelType.Equals(typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1")), typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias2")))); - - Assert.IsTrue(ModelType.Equals(ModelType.For("alias1").MakeArrayType(), ModelType.For("alias1").MakeArrayType())); - Assert.IsFalse(ModelType.Equals(ModelType.For("alias1").MakeArrayType(), ModelType.For("alias2").MakeArrayType())); - } + //TODO these is not easy to move to the Unittest project due to underlysing NotImplementedException of Type.IsSZArray [Test] public void ModelTypeToStringTests() { - Assert.AreEqual("{alias1}", ModelType.For("alias1").ToString()); + var modelType = ModelType.For("alias1"); + var modelTypeArray = modelType.MakeArrayType(); + + Assert.AreEqual("{alias1}", modelType.ToString()); // there's an "*" there because the arrays are not true SZArray - but that changes when we map - Assert.AreEqual("{alias1}[*]", ModelType.For("alias1").MakeArrayType().ToString()); - Assert.AreEqual("System.Collections.Generic.IEnumerable`1[{alias1}[*]]", typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1").MakeArrayType()).ToString()); - } - [Test] - public void TypeToStringTests() - { - var type = typeof(int); - Assert.AreEqual("System.Int32", type.ToString()); - Assert.AreEqual("System.Int32[]", type.MakeArrayType().ToString()); - Assert.AreEqual("System.Collections.Generic.IEnumerable`1[System.Int32[]]", typeof(IEnumerable<>).MakeGenericType(type.MakeArrayType()).ToString()); + Assert.AreEqual("{alias1}[*]", modelTypeArray.ToString()); + var enumArray = typeof(IEnumerable<>).MakeGenericType(modelTypeArray); + Assert.AreEqual("System.Collections.Generic.IEnumerable`1[{alias1}[*]]", enumArray.ToString()); } [Test] @@ -56,33 +39,5 @@ namespace Umbraco.Tests.Published Assert.AreEqual("System.Collections.Generic.IEnumerable`1[[{alias1}[*], Umbraco.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null]]", typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1").MakeArrayType()).FullName); } - [Test] - public void TypeFullNameTests() - { - var type = typeof(int); - Assert.AreEqual("System.Int32", type.FullName); - Assert.AreEqual("System.Int32[]", type.MakeArrayType().FullName); - // note the inner assembly qualified name - Assert.AreEqual("System.Collections.Generic.IEnumerable`1[[System.Int32[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", typeof(IEnumerable<>).MakeGenericType(type.MakeArrayType()).FullName); - } - - [Test] - public void ModelTypeMapTests() - { - var map = new Dictionary - { - { "alias1", typeof (PublishedSnapshotTestObjects.TestElementModel1) }, - { "alias2", typeof (PublishedSnapshotTestObjects.TestElementModel2) }, - }; - - Assert.AreEqual("Umbraco.Tests.Published.PublishedSnapshotTestObjects+TestElementModel1", - ModelType.Map(ModelType.For("alias1"), map).ToString()); - Assert.AreEqual("Umbraco.Tests.Published.PublishedSnapshotTestObjects+TestElementModel1[]", - ModelType.Map(ModelType.For("alias1").MakeArrayType(), map).ToString()); - Assert.AreEqual("System.Collections.Generic.IEnumerable`1[Umbraco.Tests.Published.PublishedSnapshotTestObjects+TestElementModel1]", - ModelType.Map(typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1")), map).ToString()); - Assert.AreEqual("System.Collections.Generic.IEnumerable`1[Umbraco.Tests.Published.PublishedSnapshotTestObjects+TestElementModel1[]]", - ModelType.Map(typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1").MakeArrayType()), map).ToString()); - } } } diff --git a/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs b/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs index e50d6fe8ab..42eb083667 100644 --- a/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs +++ b/src/Umbraco.Tests/PublishedContent/NuCacheChildrenTests.cs @@ -20,7 +20,6 @@ using Umbraco.Core.Services.Changes; using Umbraco.Core.Strings; using Umbraco.Tests.Common; using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing.Objects; using Umbraco.Web; @@ -163,7 +162,7 @@ namespace Umbraco.Tests.PublishedContent PublishedModelFactory, new UrlSegmentProviderCollection(new[] { new DefaultUrlSegmentProvider(TestHelper.ShortStringHelper) }), hostingEnvironment, - new MockShortStringHelper(), + Mock.Of(), TestHelper.IOHelper, Options.Create(nuCacheSettings)); diff --git a/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs b/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs index 010569fe42..f21ad1a3db 100644 --- a/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs +++ b/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs @@ -18,7 +18,6 @@ using Umbraco.Core.Services.Changes; using Umbraco.Core.Strings; using Umbraco.Tests.Common; using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing.Objects; using Umbraco.Web; @@ -203,7 +202,7 @@ namespace Umbraco.Tests.PublishedContent publishedModelFactory, new UrlSegmentProviderCollection(new[] { new DefaultUrlSegmentProvider(TestHelper.ShortStringHelper) }), TestHelper.GetHostingEnvironment(), - new MockShortStringHelper(), + Mock.Of(), TestHelper.IOHelper, Microsoft.Extensions.Options.Options.Create(nuCacheSettings)); diff --git a/src/Umbraco.Tests/PublishedContent/SolidPublishedSnapshot.cs b/src/Umbraco.Tests/PublishedContent/SolidPublishedSnapshot.cs index 5ce63874bc..0052ebe792 100644 --- a/src/Umbraco.Tests/PublishedContent/SolidPublishedSnapshot.cs +++ b/src/Umbraco.Tests/PublishedContent/SolidPublishedSnapshot.cs @@ -18,7 +18,7 @@ using Umbraco.Web.PublishedCache; namespace Umbraco.Tests.PublishedContent { - class SolidPublishedSnapshot : IPublishedSnapshot + public class SolidPublishedSnapshot : IPublishedSnapshot { public readonly SolidPublishedContentCache InnerContentCache = new SolidPublishedContentCache(); public readonly SolidPublishedContentCache InnerMediaCache = new SolidPublishedContentCache(); @@ -47,7 +47,7 @@ namespace Umbraco.Tests.PublishedContent { } } - class SolidPublishedContentCache : PublishedCacheBase, IPublishedContentCache, IPublishedMediaCache + public class SolidPublishedContentCache : PublishedCacheBase, IPublishedContentCache, IPublishedMediaCache { private readonly Dictionary _content = new Dictionary(); @@ -164,7 +164,7 @@ namespace Umbraco.Tests.PublishedContent } } - internal class SolidPublishedContent : IPublishedContent + public class SolidPublishedContent : IPublishedContent { #region Constructor @@ -264,7 +264,7 @@ namespace Umbraco.Tests.PublishedContent #endregion } - internal class SolidPublishedProperty : IPublishedProperty + public class SolidPublishedProperty : IPublishedProperty { public IPublishedPropertyType PropertyType { get; set; } public string Alias { get; set; } @@ -279,7 +279,7 @@ namespace Umbraco.Tests.PublishedContent public virtual bool HasValue(string culture = null, string segment = null) => SolidHasValue; } - internal class SolidPublishedPropertyWithLanguageVariants : SolidPublishedProperty + public class SolidPublishedPropertyWithLanguageVariants : SolidPublishedProperty { private readonly IDictionary _solidSourceValues = new Dictionary(); private readonly IDictionary _solidValues = new Dictionary(); @@ -356,7 +356,7 @@ namespace Umbraco.Tests.PublishedContent } [PublishedModel("ContentType2")] - internal class ContentType2 : PublishedContentModel + public class ContentType2 : PublishedContentModel { #region Plumbing @@ -366,11 +366,11 @@ namespace Umbraco.Tests.PublishedContent #endregion - public int Prop1 => this.Value("prop1"); + public int Prop1 => this.Value(Mock.Of(), "prop1"); } [PublishedModel("ContentType2Sub")] - internal class ContentType2Sub : ContentType2 + public class ContentType2Sub : ContentType2 { #region Plumbing @@ -381,43 +381,46 @@ namespace Umbraco.Tests.PublishedContent #endregion } - internal class PublishedContentStrong1 : PublishedContentModel + public class PublishedContentStrong1 : PublishedContentModel { public PublishedContentStrong1(IPublishedContent content, IPublishedValueFallback fallback) : base(content) { } - public int StrongValue => this.Value("strongValue"); + public int StrongValue => this.Value(Mock.Of(), "strongValue"); } - internal class PublishedContentStrong1Sub : PublishedContentStrong1 + public class PublishedContentStrong1Sub : PublishedContentStrong1 { public PublishedContentStrong1Sub(IPublishedContent content, IPublishedValueFallback fallback) : base(content, fallback) { } - public int AnotherValue => this.Value("anotherValue"); + public int AnotherValue => this.Value(Mock.Of(), "anotherValue"); } - internal class PublishedContentStrong2 : PublishedContentModel + public class PublishedContentStrong2 : PublishedContentModel { public PublishedContentStrong2(IPublishedContent content, IPublishedValueFallback fallback) : base(content) { } - public int StrongValue => this.Value("strongValue"); + public int StrongValue => this.Value(Mock.Of(), "strongValue"); } - internal class AutoPublishedContentType : PublishedContentType + public class AutoPublishedContentType : PublishedContentType { private static readonly IPublishedPropertyType Default; static AutoPublishedContentType() { - var dataTypeService = new TestObjects.TestDataTypeService( - new DataType(new VoidEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())) { Id = 666 }); + var dataTypeServiceMock = new Mock(); + var dataType = new DataType(new VoidEditor(Mock.Of(), dataTypeServiceMock.Object, + Mock.Of(), Mock.Of(), Mock.Of())) + { Id = 666 }; + dataTypeServiceMock.Setup(x => x.GetAll()).Returns(dataType.Yield); - var factory = new PublishedContentTypeFactory(Mock.Of(), new PropertyValueConverterCollection(Array.Empty()), dataTypeService); + var factory = new PublishedContentTypeFactory(Mock.Of(), new PropertyValueConverterCollection(Array.Empty()), dataTypeServiceMock.Object); Default = factory.CreatePropertyType("*", 666); } diff --git a/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs b/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs index edd4d38075..a669e543f2 100644 --- a/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs @@ -1,17 +1,11 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Web.Routing; using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; -using Umbraco.Core.Composing; -using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.Models; -using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Events; -using Umbraco.Core.Install; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; @@ -22,16 +16,13 @@ using Umbraco.Core.Strings; using Umbraco.Core.Sync; using Umbraco.Tests.Common; using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; -using Umbraco.Tests.Testing.Objects.Accessors; using Umbraco.Web; using Umbraco.Web.Cache; using Umbraco.Web.PublishedCache; using Umbraco.Web.PublishedCache.NuCache; using Umbraco.Web.PublishedCache.NuCache.DataSource; -using Umbraco.Web.Routing; using Umbraco.Web.Security; using Current = Umbraco.Web.Composing.Current; @@ -110,7 +101,7 @@ namespace Umbraco.Tests.Scoping new NoopPublishedModelFactory(), new UrlSegmentProviderCollection(new[] { new DefaultUrlSegmentProvider(ShortStringHelper) }), hostingEnvironment, - new MockShortStringHelper(), + Mock.Of(), IOHelper, Microsoft.Extensions.Options.Options.Create(nuCacheSettings)); } diff --git a/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs b/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs index bef6fde816..7e88e85360 100644 --- a/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs +++ b/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs @@ -10,7 +10,6 @@ using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.Models; using Umbraco.Core.Hosting; -using Umbraco.Core.Install; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; @@ -21,7 +20,6 @@ using Umbraco.Core.Services; using Umbraco.Core.Strings; using Umbraco.Core.Sync; using Umbraco.Tests.Common.Builders; -using Umbraco.Tests.Strings; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.Testing; @@ -82,7 +80,7 @@ namespace Umbraco.Tests.Services Mock.Of(), new UrlSegmentProviderCollection(new[] { new DefaultUrlSegmentProvider(ShortStringHelper) }), hostingEnvironment, - new MockShortStringHelper(), + Mock.Of(), IOHelper, Microsoft.Extensions.Options.Options.Create(nuCacheSettings)); } diff --git a/src/Umbraco.Tests/Strings/StringValidationTests.cs b/src/Umbraco.Tests/Strings/StringValidationTests.cs deleted file mode 100644 index b76783080b..0000000000 --- a/src/Umbraco.Tests/Strings/StringValidationTests.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using NUnit.Framework; -using Umbraco.Tests.TestHelpers; -using Umbraco.Tests.Testing; - -namespace Umbraco.Tests.Strings -{ - [TestFixture] - public class StringValidationTests : UmbracoTestBase - { - [Test] - public void Validate_Email_Address() - { - var foo = new EmailAddressAttribute(); - - Assert.IsTrue(foo.IsValid("someone@somewhere.com")); - Assert.IsTrue(foo.IsValid("someone@somewhere.co.uk")); - Assert.IsTrue(foo.IsValid("someone+tag@somewhere.net")); - Assert.IsTrue(foo.IsValid("futureTLD@somewhere.fooo")); - - Assert.IsTrue(foo.IsValid("abc@xyz.financial")); - Assert.IsTrue(foo.IsValid("admin+gmail-syntax@c.pizza")); - Assert.IsTrue(foo.IsValid("admin@c.pizza")); - - Assert.IsFalse(foo.IsValid("fdsa")); - Assert.IsFalse(foo.IsValid("fdsa@")); - - // IsValid can be either a powerful regex OR a dummy test, - // and by default it depends on System.ComponentModel.DataAnnotations.AppSettings.DisableRegEx - // which ends up using BinaryCompatibility.Current.TargetsAtLeastFramework472 so for some reason - // in 472 we are not using the regex anymore - // - // it can be forced, though with an app settings - // dataAnnotations:dataTypeAttribute:disableRegEx = false - // - // since Umbraco is now 4.7.2+, the setting is required for the following tests to pass - - Assert.IsFalse(foo.IsValid("fdsa@fdsa")); - Assert.IsFalse(foo.IsValid("fdsa@fdsa.")); - - } - } -} diff --git a/src/Umbraco.Tests/TestHelpers/TestHelper.cs b/src/Umbraco.Tests/TestHelpers/TestHelper.cs index 760fb7dbaa..041c9d0c21 100644 --- a/src/Umbraco.Tests/TestHelpers/TestHelper.cs +++ b/src/Umbraco.Tests/TestHelpers/TestHelper.cs @@ -303,25 +303,6 @@ namespace Umbraco.Tests.TestHelpers } } - // TODO: Move to MockedValueEditors.cs - public static DataValueEditor CreateDataValueEditor(string name) - { - var valueType = (ValueTypes.IsValue(name)) ? name : ValueTypes.String; - - return new DataValueEditor( - Mock.Of(), - Mock.Of(), - Mock.Of(), - Mock.Of(), - new DataEditorAttribute(name, name, name) - { - ValueType = valueType - } - - ); - } - - public static IUmbracoVersion GetUmbracoVersion() => _testHelperInternal.GetUmbracoVersion(); public static IRegister GetRegister() => _testHelperInternal.GetRegister(); diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 80b2329d8b..8e69230799 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -121,9 +121,7 @@ - - @@ -135,6 +133,9 @@ + + + @@ -145,14 +146,9 @@ - - - - - @@ -172,10 +168,6 @@ - - - - @@ -183,7 +175,6 @@ - @@ -221,10 +212,8 @@ - - @@ -253,9 +242,6 @@ - - - @@ -278,7 +264,6 @@ - @@ -289,10 +274,6 @@ - - - - @@ -311,11 +292,7 @@ - - - - True @@ -341,7 +318,6 @@ - @@ -367,7 +343,6 @@ - @@ -421,7 +396,6 @@ - diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 7ef41e847e..739bd2c95e 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -148,9 +148,6 @@ - - - @@ -184,7 +181,6 @@ -