diff --git a/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs b/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs index a78d087da0..d87b914950 100644 --- a/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs +++ b/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Text; using NUnit.Framework; using Umbraco.Core; @@ -169,11 +170,12 @@ 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 - object sample = 34; + const int sample = 34; // Act bool success = UmbracoHelper.ConvertIdObjectToInt( @@ -190,7 +192,7 @@ namespace Umbraco.Tests.FrontEnd public static void Converting_string_54_to_an_int_returns_54() { // Arrange - object sample = "54"; + const string sample = "54"; // Act bool success = UmbracoHelper.ConvertIdObjectToInt( @@ -207,7 +209,7 @@ namespace Umbraco.Tests.FrontEnd public static void Converting_hello_to_an_int_returns_false() { // Arrange - object sample = "Hello"; + const string sample = "Hello"; // Act bool success = UmbracoHelper.ConvertIdObjectToInt( @@ -236,5 +238,143 @@ namespace Umbraco.Tests.FrontEnd 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 static void Converting_boxed_udi_to_a_udi_returns_original_udi_value() + { + // Arrange + Udi sample = new GuidUdi(Constants.UdiEntityType.AnyGuid, Guid.NewGuid()); + + // Act + bool success = UmbracoHelper.ConvertIdObjectToUdi( + sample, + out Udi result + ); + + // Assert + Assert.IsTrue(success); + Assert.That(result, Is.EqualTo(sample)); + } + + [Test] + public static void Converting_string_udi_to_a_udi_returns_original_udi_value() + { + // Arrange + Udi sample = new GuidUdi(Constants.UdiEntityType.AnyGuid, Guid.NewGuid()); + + // Act + bool success = UmbracoHelper.ConvertIdObjectToUdi( + sample.ToString(), + out Udi result + ); + + // Assert + Assert.IsTrue(success, "Conversion of UDI failed."); + Assert.That(result, Is.EqualTo(sample)); + } + + [Test] + public static void Converting_hello_to_a_udi_returns_false() + { + // Arrange + const string sample = "Hello"; + + // Act + bool success = UmbracoHelper.ConvertIdObjectToUdi( + sample, + out Udi result + ); + + // Assert + Assert.IsFalse(success); + Assert.That(result, Is.Null); + } + + [Test] + public static void Converting_unsupported_object_to_a_udi_returns_false() + { + // Arrange + var clearlyWillNotConvertToGuid = new StringBuilder(0); + + // Act + bool success = UmbracoHelper.ConvertIdObjectToUdi( + clearlyWillNotConvertToGuid, + out Udi result + ); + + // Assert + Assert.IsFalse(success); + Assert.That(result, Is.Null); + } } } diff --git a/src/Umbraco.Web/UmbracoHelper.cs b/src/Umbraco.Web/UmbracoHelper.cs index b69ef5e08a..479c5e2ab9 100644 --- a/src/Umbraco.Web/UmbracoHelper.cs +++ b/src/Umbraco.Web/UmbracoHelper.cs @@ -913,23 +913,23 @@ namespace Umbraco.Web /// Had to change to internal for testing. internal static bool ConvertIdObjectToInt(object id, out int intId) { - if (id is string s) + switch (id) { - return int.TryParse(s, out intId); + case string s: + return int.TryParse(s, out intId); + + case int i: + intId = i; + return true; + + default: + intId = default; + return false; } - - if (id is int i) - { - intId = i; - return true; - } - - intId = default; - - return false; } - private static bool ConvertIdObjectToGuid(object id, out Guid guidId) + /// Had to change to internal for testing. + internal static bool ConvertIdObjectToGuid(object id, out Guid guidId) { var s = id as string; if (s != null) @@ -945,7 +945,8 @@ namespace Umbraco.Web return false; } - private static bool ConvertIdObjectToUdi(object id, out Udi guidId) + /// Had to change to internal for testing. + internal static bool ConvertIdObjectToUdi(object id, out Udi guidId) { var s = id as string; if (s != null)