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();