diff --git a/Oqtane.Shared/Shared/Utilities.cs b/Oqtane.Shared/Shared/Utilities.cs index 6c2825fc..fe7817d0 100644 --- a/Oqtane.Shared/Shared/Utilities.cs +++ b/Oqtane.Shared/Shared/Utilities.cs @@ -14,30 +14,18 @@ namespace Oqtane.Shared var assemblyName = assemblyFullName.Substring(0, assemblyFullName.IndexOf(",", StringComparison.Ordinal)); return $"{type.Namespace}, {assemblyName}"; } + public static string NavigateUrl(string alias, string path, string parameters) { - string url = ""; - if (alias != "") + var uriBuilder = new UriBuilder { - url += alias + "/"; - } - if (path != "" && path != "/") - { - url += path + "/"; - } - if (url.EndsWith("/")) - { - url = url.Substring(0, url.Length - 1); - } - if (!string.IsNullOrEmpty(parameters)) - { - url += "?" + parameters; - } - if (!url.StartsWith("/")) - { - url = "/" + url; - } - return url; + Path = !string.IsNullOrEmpty(alias) + ? $"{alias}/{path}" + : $"{path}", + Query = parameters + }; + + return uriBuilder.Uri.PathAndQuery; } public static string EditUrl(string alias, string path, int moduleid, string action, string parameters) diff --git a/Oqtane.Test/Oqtane.Shared.Tests/UtilitiesTests.cs b/Oqtane.Test/Oqtane.Shared.Tests/UtilitiesTests.cs new file mode 100644 index 00000000..c5de08e4 --- /dev/null +++ b/Oqtane.Test/Oqtane.Shared.Tests/UtilitiesTests.cs @@ -0,0 +1,31 @@ +using Oqtane.Shared; +using Xunit; + +namespace Oqtane.Test.Oqtane.Shared.Tests +{ + public class UtilitiesTests + { + [Theory] + [InlineData("contoso", "login", "returnUrl=/admin", "/contoso/login?returnUrl=/admin")] + [InlineData("contoso", "admin", "", "/contoso/admin")] + [InlineData("contoso", "", "pageId=4", "/contoso?pageId=4")] + [InlineData("contoso", "", "pageId=4&moduleId=10", "/contoso?pageId=4&moduleId=10")] + [InlineData("contoso", "", "", "/contoso/")] + [InlineData("", "login", "returnUrl=/admin", "/login?returnUrl=/admin")] + [InlineData("", "admin", "", "/admin")] + [InlineData("", "", "pageId=4", "?pageId=4")] + [InlineData("", "", "pageId=4&moduleId=10", "?pageId=4&moduleId=10")] + [InlineData("", "", "", "/")] + public void NavigateUrlTest(string alias, string path, string parameters, string expectedUrl) + { + // Arrange + var navigatedUrl = string.Empty; + + // Act + navigatedUrl = Utilities.NavigateUrl(alias, path, parameters); + + // Assert + Assert.Equal(expectedUrl, navigatedUrl); + } + } +}