diff --git a/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs b/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs
index 058f063f8e..a0e80a33cf 100644
--- a/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs
+++ b/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs
@@ -1,70 +1,67 @@
using System;
using System.Collections.Generic;
using System.Text;
+using LightInject;
+using Moq;
using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Tests.TestHelpers;
+using Umbraco.Core.Cache;
+using Umbraco.Core.Composing;
+using Umbraco.Core.Logging;
+using Umbraco.Tests.TestHelpers;
using Umbraco.Web;
namespace Umbraco.Tests.FrontEnd
{
[TestFixture]
public class UmbracoHelperTests
- //: BaseUmbracoApplicationTest
{
- [Test]
- public void Truncate_Simple()
- {
- var text = "Hello world, this is some text with a link";
+ private const string SampleWithAnchorElement = "Hello world, this is some text with a link";
+ private const string SampleWithBoldAndAnchorElements = "Hello world, this is some text with a link";
+ [Test]
+ public static void Truncate_Simple()
+ {
var helper = new UmbracoHelper();
- var result = helper.Truncate(text, 25).ToString();
-
- Assert.AreEqual("Hello world, this is some…", result);
- }
-
- ///
- /// If a truncated string ends with a space, we should trim the space before appending the ellipsis.
- ///
- [Test]
- public void Truncate_Simple_With_Trimming()
- {
- var text = "Hello world, this is some text with a link";
-
- var helper = new UmbracoHelper();
-
- var result = helper.Truncate(text, 26).ToString();
+ var result = helper.Truncate(SampleWithAnchorElement, 25).ToString();
Assert.AreEqual("Hello world, this is some…", result);
}
[Test]
- public void Truncate_Inside_Word()
+ public static void When_Truncating_A_String_Ends_With_A_Space_We_Should_Trim_The_Space_Before_Appending_The_Ellipsis()
{
- var text = "Hello world, this is some text with a link";
-
var helper = new UmbracoHelper();
- var result = helper.Truncate(text, 24).ToString();
+ var result = helper.Truncate(SampleWithAnchorElement, 26).ToString();
+
+ Assert.AreEqual("Hello world, this is some…", result);
+ }
+
+ [Test]
+ public static void Truncate_Inside_Word()
+ {
+ var helper = new UmbracoHelper();
+
+ var result = helper.Truncate(SampleWithAnchorElement, 24).ToString();
Assert.AreEqual("Hello world, this is som…", result);
}
[Test]
- public void Truncate_With_Tag()
+ public static void Truncate_With_Tag()
{
- var text = "Hello world, this is some text with a link";
-
var helper = new UmbracoHelper();
- var result = helper.Truncate(text, 35).ToString();
+ var result = helper.Truncate(SampleWithAnchorElement, 35).ToString();
Assert.AreEqual("Hello world, this is some text with…", result);
}
[Test]
- public void Create_Encrypted_RouteString_From_Anonymous_Object()
+ public static void Create_Encrypted_RouteString_From_Anonymous_Object()
{
var additionalRouteValues = new
{
@@ -73,15 +70,23 @@ namespace Umbraco.Tests.FrontEnd
Key3 = "Value3",
keY4 = "valuE4"
};
- var encryptedRouteString = UmbracoHelper.CreateEncryptedRouteString("FormController", "FormAction", "", additionalRouteValues);
+
+ var encryptedRouteString = UmbracoHelper.CreateEncryptedRouteString(
+ "FormController",
+ "FormAction",
+ "",
+ additionalRouteValues
+ );
+
var result = encryptedRouteString.DecryptWithMachineKey();
- var expectedResult = "c=FormController&a=FormAction&ar=&key1=value1&key2=value2&Key3=Value3&keY4=valuE4";
+
+ const string expectedResult = "c=FormController&a=FormAction&ar=&key1=value1&key2=value2&Key3=Value3&keY4=valuE4";
Assert.AreEqual(expectedResult, result);
}
[Test]
- public void Create_Encrypted_RouteString_From_Dictionary()
+ public static void Create_Encrypted_RouteString_From_Dictionary()
{
var additionalRouteValues = new Dictionary()
{
@@ -90,79 +95,77 @@ namespace Umbraco.Tests.FrontEnd
{"Key3", "Value3"},
{"keY4", "valuE4"}
};
- var encryptedRouteString = UmbracoHelper.CreateEncryptedRouteString("FormController", "FormAction", "", additionalRouteValues);
+
+ var encryptedRouteString = UmbracoHelper.CreateEncryptedRouteString(
+ "FormController",
+ "FormAction",
+ "",
+ additionalRouteValues
+ );
+
var result = encryptedRouteString.DecryptWithMachineKey();
- var expectedResult = "c=FormController&a=FormAction&ar=&key1=value1&key2=value2&Key3=Value3&keY4=valuE4";
+
+ const string expectedResult = "c=FormController&a=FormAction&ar=&key1=value1&key2=value2&Key3=Value3&keY4=valuE4";
Assert.AreEqual(expectedResult, result);
}
[Test]
- public void Truncate_By_Words()
+ public static void Truncate_By_Words()
{
- var text = "Hello world, this is some text with a link";
-
var helper = new UmbracoHelper();
- var result = helper.TruncateByWords(text, 4).ToString();
+ var result = helper.TruncateByWords(SampleWithAnchorElement, 4).ToString();
Assert.AreEqual("Hello world, this is…", result);
}
[Test]
- public void Truncate_By_Words_With_Tag()
+ public static void Truncate_By_Words_With_Tag()
{
- var text = "Hello world, this is some text with a link";
-
var helper = new UmbracoHelper();
- var result = helper.TruncateByWords(text, 4).ToString();
+ var result = helper.TruncateByWords(SampleWithBoldAndAnchorElements, 4).ToString();
Assert.AreEqual("Hello world, this is…", result);
}
[Test]
- public void Truncate_By_Words_Mid_Tag()
+ public static void Truncate_By_Words_Mid_Tag()
{
- var text = "Hello world, this is some text with a link";
-
var helper = new UmbracoHelper();
- var result = helper.TruncateByWords(text, 7).ToString();
+ var result = helper.TruncateByWords(SampleWithAnchorElement, 7).ToString();
Assert.AreEqual("Hello world, this is some text with…", result);
}
[Test]
- public void Strip_All_Html()
+ public static void Strip_All_Html()
{
- var text = "Hello world, this is some text with a link";
-
var helper = new UmbracoHelper();
- var result = helper.StripHtml(text, null).ToString();
+ var result = helper.StripHtml(SampleWithBoldAndAnchorElements, null).ToString();
Assert.AreEqual("Hello world, this is some text with a link", result);
}
[Test]
- public void Strip_Specific_Html()
+ public static void Strip_Specific_Html()
{
- var text = "Hello world, this is some text with a link";
-
string[] tags = { "b" };
var helper = new UmbracoHelper();
- var result = helper.StripHtml(text, tags).ToString();
+ var result = helper.StripHtml(SampleWithBoldAndAnchorElements, tags).ToString();
Assert.AreEqual("Hello world, this is some text with a link", result);
}
[Test]
- public void Strip_Invalid_Html()
+ public static void Strip_Invalid_Html()
{
- var text = "Hello world, is some text with a link";
+ const string text = "Hello world, is some text with a link";
var helper = new UmbracoHelper();
@@ -398,5 +401,252 @@ namespace Umbraco.Tests.FrontEnd
Assert.IsFalse(success);
Assert.That(result, Is.Null);
}
+
+ // ------- Int32 conversion tests
+ [Test]
+ public static void Converting_Boxed_34_To_An_Int_Returns_34()
+ {
+ // Arrange
+ const int sample = 34;
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToInt(
+ sample,
+ out int result
+ );
+
+ // Assert
+ Assert.IsTrue(success);
+ Assert.That(result, Is.EqualTo(34));
+ }
+
+ [Test]
+ public static void Converting_String_54_To_An_Int_Returns_54()
+ {
+ // Arrange
+ const string sample = "54";
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToInt(
+ sample,
+ out int result
+ );
+
+ // Assert
+ Assert.IsTrue(success);
+ Assert.That(result, Is.EqualTo(54));
+ }
+
+ [Test]
+ public static void Converting_Hello_To_An_Int_Returns_False()
+ {
+ // Arrange
+ const string sample = "Hello";
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToInt(
+ sample,
+ out int result
+ );
+
+ // Assert
+ Assert.IsFalse(success);
+ Assert.That(result, Is.EqualTo(0));
+ }
+
+ [Test]
+ public static void Converting_Unsupported_Object_To_An_Int_Returns_False()
+ {
+ // Arrange
+ var clearlyWillNotConvertToInt = new StringBuilder(0);
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToInt(
+ clearlyWillNotConvertToInt,
+ out int result
+ );
+
+ // Assert
+ Assert.IsFalse(success);
+ Assert.That(result, Is.EqualTo(0));
+ }
+
+ // ------- GUID conversion tests
+ [Test]
+ public static void Converting_Boxed_Guid_To_A_Guid_Returns_Original_Guid_Value()
+ {
+ // Arrange
+ Guid sample = Guid.NewGuid();
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToGuid(
+ sample,
+ out Guid result
+ );
+
+ // Assert
+ Assert.IsTrue(success);
+ Assert.That(result, Is.EqualTo(sample));
+ }
+
+ [Test]
+ public static void Converting_String_Guid_To_A_Guid_Returns_Original_Guid_Value()
+ {
+ // Arrange
+ Guid sample = Guid.NewGuid();
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToGuid(
+ sample.ToString(),
+ out Guid result
+ );
+
+ // Assert
+ Assert.IsTrue(success);
+ Assert.That(result, Is.EqualTo(sample));
+ }
+
+ [Test]
+ public static void Converting_Hello_To_A_Guid_Returns_False()
+ {
+ // Arrange
+ const string sample = "Hello";
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToGuid(
+ sample,
+ out Guid result
+ );
+
+ // Assert
+ Assert.IsFalse(success);
+ Assert.That(result, Is.EqualTo(new Guid("00000000-0000-0000-0000-000000000000")));
+ }
+
+ [Test]
+ public static void Converting_Unsupported_Object_To_A_Guid_Returns_False()
+ {
+ // Arrange
+ var clearlyWillNotConvertToGuid = new StringBuilder(0);
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToGuid(
+ clearlyWillNotConvertToGuid,
+ out Guid result
+ );
+
+ // Assert
+ Assert.IsFalse(success);
+ Assert.That(result, Is.EqualTo(new Guid("00000000-0000-0000-0000-000000000000")));
+ }
+
+ // ------- UDI Conversion Tests
+ [Test]
+ public void Converting_Boxed_Udi_To_A_Udi_Returns_Original_Udi_Value()
+ {
+ // Arrange
+ SetUpDependencyContainer();
+ Udi.ResetUdiTypes();
+
+ Udi sample = new GuidUdi(Constants.UdiEntityType.AnyGuid, Guid.NewGuid());
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToUdi(
+ sample,
+ out Udi result
+ );
+
+ // Assert
+ ResetDependencyContainer();
+
+ Assert.IsTrue(success);
+ Assert.That(result, Is.EqualTo(sample));
+ }
+
+ [Test]
+ public void Converting_String_Udi_To_A_Udi_Returns_Original_Udi_Value()
+ {
+ // Arrange
+ SetUpDependencyContainer();
+ Udi.ResetUdiTypes();
+
+ Udi sample = new GuidUdi(Constants.UdiEntityType.AnyGuid, Guid.NewGuid());
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToUdi(
+ sample.ToString(),
+ out Udi result
+ );
+
+ // Assert
+ ResetDependencyContainer();
+
+ Assert.IsTrue(success);
+ Assert.That(result, Is.EqualTo(sample));
+ }
+
+ [Test]
+ public void Converting_Hello_To_A_Udi_Returns_False()
+ {
+ // Arrange
+ SetUpDependencyContainer();
+ Udi.ResetUdiTypes();
+
+ const string SAMPLE = "Hello";
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToUdi(
+ SAMPLE,
+ out Udi result
+ );
+
+ // Assert
+ ResetDependencyContainer();
+
+ Assert.IsFalse(success);
+ Assert.That(result, Is.Null);
+ }
+
+ [Test]
+ public void Converting_Unsupported_Object_To_A_Udi_Returns_False()
+ {
+ // Arrange
+ SetUpDependencyContainer();
+ Udi.ResetUdiTypes();
+
+ var clearlyWillNotConvertToGuid = new StringBuilder(0);
+
+ // Act
+ bool success = UmbracoHelper.ConvertIdObjectToUdi(
+ clearlyWillNotConvertToGuid,
+ out Udi result
+ );
+
+ // Assert
+ ResetDependencyContainer();
+
+ Assert.IsFalse(success);
+ Assert.That(result, Is.Null);
+ }
+
+ private void SetUpDependencyContainer()
+ {
+ // fixme - bad in a unit test - but Udi has a static ctor that wants it?!
+ var container = new Mock();
+ var globalSettings = SettingsForTests.GenerateMockGlobalSettings();
+
+ container
+ .Setup(x => x.GetInstance(typeof(TypeLoader)))
+ .Returns(new TypeLoader(
+ NullCacheProvider.Instance,
+ globalSettings,
+ new ProfilingLogger(Mock.Of(), Mock.Of())
+ )
+ );
+
+ Current.Container = container.Object;
+ }
+
+ private void ResetDependencyContainer() => Current.Reset();
}
}
diff --git a/src/Umbraco.Web/UmbracoHelper.cs b/src/Umbraco.Web/UmbracoHelper.cs
index 2bc25bb97c..b467a9a15c 100644
--- a/src/Umbraco.Web/UmbracoHelper.cs
+++ b/src/Umbraco.Web/UmbracoHelper.cs
@@ -8,15 +8,15 @@ using System.Web.Mvc;
using System.Xml.XPath;
using Umbraco.Core;
using Umbraco.Core.Dictionary;
-using Umbraco.Core.Services;
-using Umbraco.Core.Xml;
-using Umbraco.Web.Routing;
-using Umbraco.Web.Security;
using Umbraco.Core.Exceptions;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
+using Umbraco.Core.Services;
+using Umbraco.Core.Xml;
using Umbraco.Web.Composing;
using Umbraco.Core.Cache;
+using Umbraco.Web.Routing;
+using Umbraco.Web.Security;
namespace Umbraco.Web
{
@@ -673,6 +673,7 @@ namespace Umbraco.Web
guidId = default;
return false;
}
+ }
}