Merge pull request #2757 from Mundairson/temp8-U4-11492
U4-11492 Clean Umbraco.Web.UmbracoHelper [v8]
This commit is contained in:
@@ -1,6 +1,14 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using LightInject;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Cache;
|
||||
using Umbraco.Core.Composing;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Tests.TestHelpers;
|
||||
using Umbraco.Web;
|
||||
|
||||
namespace Umbraco.Tests.FrontEnd
|
||||
@@ -8,59 +16,51 @@ namespace Umbraco.Tests.FrontEnd
|
||||
[TestFixture]
|
||||
public class UmbracoHelperTests
|
||||
{
|
||||
[Test]
|
||||
public void Truncate_Simple()
|
||||
{
|
||||
var text = "Hello world, this is some text <a href='blah'>with a link</a>";
|
||||
private const string SampleWithAnchorElement = "Hello world, this is some text <a href='blah'>with a link</a>";
|
||||
private const string SampleWithBoldAndAnchorElements = "Hello world, <b>this</b> is some text <a href='blah'>with a link</a>";
|
||||
|
||||
[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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If a truncated string ends with a space, we should trim the space before appending the ellipsis.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void Truncate_Simple_With_Trimming()
|
||||
{
|
||||
var text = "Hello world, this is some text <a href='blah'>with a link</a>";
|
||||
|
||||
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 <a href='blah'>with a link</a>";
|
||||
|
||||
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 <a href='blah'>with a link</a>";
|
||||
|
||||
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 <a href='blah'>with…</a>", result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Create_Encrypted_RouteString_From_Anonymous_Object()
|
||||
public static void Create_Encrypted_RouteString_From_Anonymous_Object()
|
||||
{
|
||||
var additionalRouteValues = new
|
||||
{
|
||||
@@ -68,16 +68,24 @@ namespace Umbraco.Tests.FrontEnd
|
||||
key2 = "value2",
|
||||
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<string, object>()
|
||||
{
|
||||
@@ -86,79 +94,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 <a href='blah'>with a link</a>";
|
||||
|
||||
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, <b>this</b> is some text <a href='blah'>with a link</a>";
|
||||
|
||||
var helper = new UmbracoHelper();
|
||||
|
||||
var result = helper.TruncateByWords(text, 4).ToString();
|
||||
var result = helper.TruncateByWords(SampleWithBoldAndAnchorElements, 4).ToString();
|
||||
|
||||
Assert.AreEqual("Hello world, <b>this</b> 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 <a href='blah'>with a link</a>";
|
||||
|
||||
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 <a href='blah'>with…</a>", result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Strip_All_Html()
|
||||
public static void Strip_All_Html()
|
||||
{
|
||||
var text = "Hello world, <b>this</b> is some text <a href='blah'>with a link</a>";
|
||||
|
||||
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, <b>this</b> is some text <a href='blah'>with a link</a>";
|
||||
|
||||
string [] tags = {"b"};
|
||||
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 <a href='blah'>with a link</a>", result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Strip_Invalid_Html()
|
||||
public static void Strip_Invalid_Html()
|
||||
{
|
||||
var text = "Hello world, <bthis</b> is some text <a href='blah'>with a link</a>";
|
||||
const string text = "Hello world, <bthis</b> is some text <a href='blah'>with a link</a>";
|
||||
|
||||
var helper = new UmbracoHelper();
|
||||
|
||||
@@ -166,5 +172,252 @@ namespace Umbraco.Tests.FrontEnd
|
||||
|
||||
Assert.AreEqual("Hello world, is some text with a link", result);
|
||||
}
|
||||
|
||||
// ------- 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<IServiceContainer>();
|
||||
var globalSettings = SettingsForTests.GenerateMockGlobalSettings();
|
||||
|
||||
container
|
||||
.Setup(x => x.GetInstance(typeof(TypeLoader)))
|
||||
.Returns(new TypeLoader(
|
||||
NullCacheProvider.Instance,
|
||||
globalSettings,
|
||||
new ProfilingLogger(Mock.Of<ILogger>(), Mock.Of<IProfiler>())
|
||||
)
|
||||
);
|
||||
|
||||
Current.Container = container.Object;
|
||||
}
|
||||
|
||||
private void ResetDependencyContainer() => Current.Reset();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Security;
|
||||
using System.Xml.XPath;
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Dictionary;
|
||||
using Umbraco.Core.Security;
|
||||
using Umbraco.Core.Services;
|
||||
using Umbraco.Core.Xml;
|
||||
using Umbraco.Web.Routing;
|
||||
using Umbraco.Web.Security;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using Umbraco.Core.Cache;
|
||||
using Umbraco.Core.Dictionary;
|
||||
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.Web.Routing;
|
||||
using Umbraco.Web.Security;
|
||||
|
||||
namespace Umbraco.Web
|
||||
{
|
||||
@@ -577,37 +573,38 @@ namespace Umbraco.Web
|
||||
return ContentQuery.ContentAtRoot();
|
||||
}
|
||||
|
||||
private static bool ConvertIdObjectToInt(object id, out int intId)
|
||||
internal static bool ConvertIdObjectToInt(object id, out int intId)
|
||||
{
|
||||
var s = id as string;
|
||||
if (s != null)
|
||||
switch (id)
|
||||
{
|
||||
return int.TryParse(s, out intId);
|
||||
}
|
||||
case string s:
|
||||
return int.TryParse(s, out intId);
|
||||
|
||||
if (id is int)
|
||||
{
|
||||
intId = (int) id;
|
||||
return true;
|
||||
case int i:
|
||||
intId = i;
|
||||
return true;
|
||||
|
||||
default:
|
||||
intId = default;
|
||||
return false;
|
||||
}
|
||||
intId = default(int);
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool ConvertIdObjectToGuid(object id, out Guid guidId)
|
||||
internal static bool ConvertIdObjectToGuid(object id, out Guid guidId)
|
||||
{
|
||||
var s = id as string;
|
||||
if (s != null)
|
||||
switch (id)
|
||||
{
|
||||
return Guid.TryParse(s, out guidId);
|
||||
case string s:
|
||||
return Guid.TryParse(s, out guidId);
|
||||
|
||||
case Guid g:
|
||||
guidId = g;
|
||||
return true;
|
||||
|
||||
default:
|
||||
guidId = default;
|
||||
return false;
|
||||
}
|
||||
if (id is Guid)
|
||||
{
|
||||
guidId = (Guid) id;
|
||||
return true;
|
||||
}
|
||||
guidId = default(Guid);
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool ConvertIdsObjectToInts(IEnumerable<object> ids, out IEnumerable<int> intIds)
|
||||
@@ -641,17 +638,21 @@ namespace Umbraco.Web
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool ConvertIdObjectToUdi(object id, out Udi guidId)
|
||||
internal static bool ConvertIdObjectToUdi(object id, out Udi guidId)
|
||||
{
|
||||
if (id is string s)
|
||||
return Udi.TryParse(s, out guidId);
|
||||
if (id is Udi)
|
||||
switch (id)
|
||||
{
|
||||
guidId = (Udi) id;
|
||||
return true;
|
||||
case string s:
|
||||
return Udi.TryParse(s, out guidId);
|
||||
|
||||
case Udi u:
|
||||
guidId = u;
|
||||
return true;
|
||||
|
||||
default:
|
||||
guidId = default;
|
||||
return false;
|
||||
}
|
||||
guidId = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user