From 502298aab96099a8445532c59eb37867e8576887 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 3 Apr 2016 18:47:43 -0700 Subject: [PATCH] Cleanup HttpUri.PathCombine --- .../Http/HttpUriFixture.cs | 29 +++++++++++++++++++ .../NzbDrone.Common.Test.csproj | 1 + src/NzbDrone.Common/Http/HttpUri.cs | 18 ++---------- 3 files changed, 33 insertions(+), 15 deletions(-) create mode 100644 src/NzbDrone.Common.Test/Http/HttpUriFixture.cs diff --git a/src/NzbDrone.Common.Test/Http/HttpUriFixture.cs b/src/NzbDrone.Common.Test/Http/HttpUriFixture.cs new file mode 100644 index 000000000..09cda2be7 --- /dev/null +++ b/src/NzbDrone.Common.Test/Http/HttpUriFixture.cs @@ -0,0 +1,29 @@ +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Common.Http; +using NzbDrone.Test.Common; + +namespace NzbDrone.Common.Test.Http +{ + public class HttpUriFixture : TestBase + { + private HttpUri GivenHttpUri(string basePath) + { + return new HttpUri("http", "localhost", 8989, basePath, null, null); + } + + [TestCase("", "", "")] + [TestCase("base", "", "/base")] + [TestCase("/base", "", "/base")] + [TestCase("", "relative", "/relative")] + [TestCase("", "/relative", "/relative")] + [TestCase("base", "relative", "/base/relative")] + [TestCase("base", "/relative", "/base/relative")] + [TestCase("/base", "relative", "/base/relative")] + [TestCase("/base", "/relative", "/base/relative")] + public void should_combine_base_path_and_relative_path(string basePath, string relativePath, string expected) + { + GivenHttpUri(basePath).CombinePath(relativePath).Path.Should().Be(expected); + } + } +} diff --git a/src/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj b/src/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj index 338a9e926..84892c6b1 100644 --- a/src/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj +++ b/src/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj @@ -83,6 +83,7 @@ + diff --git a/src/NzbDrone.Common/Http/HttpUri.cs b/src/NzbDrone.Common/Http/HttpUri.cs index c8c83de66..05d12e7d8 100644 --- a/src/NzbDrone.Common/Http/HttpUri.cs +++ b/src/NzbDrone.Common/Http/HttpUri.cs @@ -144,23 +144,12 @@ namespace NzbDrone.Common.Http return basePath; } - var newPath = "/" + relativePath.TrimStart('/'); - - if (basePath != null && !relativePath.StartsWith("/")) + if (basePath.IsNullOrWhiteSpace()) { - var baseSlashIndex = basePath.LastIndexOf('/'); - - if (baseSlashIndex == basePath.Length - 1) - { - newPath = basePath.TrimEnd('/') + newPath; - } - else if (baseSlashIndex != 0) - { - newPath = basePath.Substring(0, baseSlashIndex) + newPath; - } + return "/" + relativePath.TrimStart('/'); } - return newPath; + return basePath.TrimEnd("/") + "/" + relativePath.TrimStart('/'); } public HttpUri SetQuery(string query) @@ -199,7 +188,6 @@ namespace NzbDrone.Common.Http return SetQuery(builder.ToString()); } - public override int GetHashCode() { return _uri.GetHashCode();