Skip to content
This repository has been archived by the owner on Jul 5, 2024. It is now read-only.

Commit

Permalink
SimpleWebSource now preserves query parameters (closes #141)
Browse files Browse the repository at this point in the history
  • Loading branch information
caesay committed Nov 4, 2023
1 parent 220588d commit c183ec8
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/Squirrel/Sources/SimpleWebSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ public virtual Task DownloadReleaseEntry(ReleaseEntry releaseEntry, string local
if (releaseEntry == null) throw new ArgumentNullException(nameof(releaseEntry));
if (localFile == null) throw new ArgumentNullException(nameof(localFile));


var releaseUri = releaseEntry.BaseUrl == null
? releaseEntry.Filename
: Utility.AppendPathToUri(new Uri(releaseEntry.BaseUrl), releaseEntry.Filename).ToString();
Expand All @@ -78,7 +77,10 @@ public virtual Task DownloadReleaseEntry(ReleaseEntry releaseEntry, string local
// releaseUri can be a relative url (eg. "MyPackage.nupkg") or it can be an
// absolute url (eg. "https://example.com/MyPackage.nupkg"). In the former case
var sourceBaseUri = Utility.EnsureTrailingSlash(BaseUri);
var source = new Uri(sourceBaseUri, releaseUri).ToString();

var source = Utility.IsHttpUrl(releaseUri)
? new Uri(sourceBaseUri, releaseUri).ToString()
: Utility.AppendPathToUri(sourceBaseUri, releaseUri).ToString();

this.Log().Info($"Downloading '{releaseEntry.Filename}' from '{source}'.");
return Downloader.DownloadFile(source, localFile, progress);
Expand Down
31 changes: 31 additions & 0 deletions test/CheckForUpdateTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using Squirrel.Tests.TestHelpers;
using Xunit;

Expand Down Expand Up @@ -143,5 +144,35 @@ public async Task WebSourceRequestsExpectedUrls(string releaseEntry, string rele
await source.DownloadReleaseEntry(releases[0], "test", null);
Assert.Equal(baseUrl + "/" + releases[0].Filename, new Uri(dl.LastUrl).GetLeftPart(UriPartial.Path));
}

[Theory]
[InlineData("http://example.com", "MyPackage.nupkg", "http://example.com/MyPackage.nupkg")]
[InlineData("http://example.com?auth=hello", "MyPackage.nupkg", "http://example.com/MyPackage.nupkg?auth=hello")]
[InlineData("http://example.com?auth=hello", "https://my.packages.domain/MyPackage-1.0.0.nupkg", "https://my.packages.domain/MyPackage-1.0.0.nupkg")]
public async Task SimpleWebSourcePreservesQueryParametersAndAbsoluteReleaseUri(string baseUri, string releaseUri, string expectedPackageUrl)
{
var dl = new FakeDownloader();
var source = new Sources.SimpleWebSource(baseUri, dl);
var baseKvp = HttpUtility.ParseQueryString(new Uri(baseUri).Query);
var baseDict = baseKvp.AllKeys.Where(k => k != null).ToDictionary(k => k, k => baseKvp[k]);

var releaseEntry = $"94689fede03fed7ab59c24337673a27837f0c3ec {releaseUri} 1004502";
dl.MockedResponseBytes = Encoding.UTF8.GetBytes(releaseEntry);

var releases = await source.GetReleaseFeed();
var expected = new Uri(baseUri).GetLeftPart(UriPartial.Path).TrimEnd('/') + "/RELEASES";
Assert.StartsWith(expected, dl.LastUrl);

// check that each query parameter in base url is in the releases string
var releasesUri = new Uri(dl.LastUrl);
var releasesKvp = HttpUtility.ParseQueryString(releasesUri.Query);
var releasesDict = releasesKvp.AllKeys.Where(k => k != null).ToDictionary(k => k, k => releasesKvp[k]);
foreach (var kvp in baseDict) {
Assert.Equal(releasesDict[kvp.Key], kvp.Value);
}

await source.DownloadReleaseEntry(releases[0], "test", null);
Assert.Equal(expectedPackageUrl, dl.LastUrl);
}
}
}
1 change: 1 addition & 0 deletions test/Squirrel.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@

<ItemGroup>
<Reference Include="System.Net.Http" />
<Reference Include="System.Web" />
</ItemGroup>

</Project>

0 comments on commit c183ec8

Please sign in to comment.