public void IfDownloadFailsFalseIsReturned() { // arrange var fixture = new GitHutReleaseRetrieverFixture(string.Empty, string.Empty); var directory = Guid.NewGuid().ToString(); const string fileName = "TestFile.txt"; const string urlPath = "/TestFile.txt"; fixture.HttpMock.Stub(t => t.Get(urlPath)) .ReturnFile(Path.Combine(fixture.ExecutionPath, "Data", fileName)) .WithStatus(HttpStatusCode.BadGateway); var sut = fixture.GetInstance; // act var result = sut.DownloadFileAsync(fixture.BasePath + urlPath, Path.Combine(fixture.ExecutionPath, directory), fileName).Result; // assert result.Should().BeFalse(); var loggedMessage = fixture.LogDummy.LoggedMessages.Last(); loggedMessage.MessageTemplate.Should().Be("An error occured while retrieving the asset"); loggedMessage.MessageException.Should().NotBeNull(); DirectoryHelper.DeleteDirectory(directory); }
public void WhenUsedOAuthTokenIsPassedCorrectly() { // arrange // arrange const string assetName = "text.exe"; const string testToken = "abc"; var fixture = new GitHutReleaseRetrieverFixture(assetName, testToken); fixture.HttpMock.Stub(t => t.Get($"/repos/{fixture.Owner}/{fixture.Repo}/releases/latest")) .Return(ValidResponseData.GetValidResponseString) .AddHeader("X-RateLimit-Limit", "5000") .AddHeader("X-RateLimit-Remaining", "4999") .OK(); var sut = fixture.GetInstance; // act sut.GetLatestReleaseUrlAsync(fixture.Owner, fixture.Repo, assetName).Wait(); // assert var headers = fixture.HttpMock.AssertWasCalled(t => t.Get($"/repos/{fixture.Owner}/{fixture.Repo}/releases/latest")) .LastRequest() .RequestHead.Headers; var token = headers["Authorization"]; token.Should().Be($"token {testToken}"); }
public void ReturnFallbackUrlIfRateLimited() { // arrange const string assetName = "text.exe"; var fixture = new GitHutReleaseRetrieverFixture(assetName, string.Empty); fixture.HttpMock.Stub(t => t.Get($"/repos/{fixture.Owner}/{fixture.Repo}/releases/latest")) .Return(ValidResponseData.GetValidResponseString) .AddHeader("X-RateLimit-Limit", "2") .AddHeader("X-RateLimit-Remaining", "0") .OK(); var sut = fixture.GetInstance; // act var response = sut.GetLatestReleaseUrlAsync(fixture.Owner, fixture.Repo, assetName).Result; // assert response.Should().Be(FallbackUrl); }
public void RetrievingReleaseUrlReturnsEmptyResponseIfAssetCouldNotBeFound() { // arrange const string assetName = "text.exe"; var fixture = new GitHutReleaseRetrieverFixture(assetName, string.Empty); fixture.HttpMock.Stub(t => t.Get($"/repos/{fixture.Owner}/{fixture.Repo}/releases/latest")) .Return(ValidResponseData.GetValidResponseString) .AddHeader("X-RateLimit-Limit", "2") .AddHeader("X-RateLimit-Remaining", "1") .OK(); var sut = fixture.GetInstance; // act var response = sut.GetLatestReleaseUrlAsync(fixture.Owner, fixture.Repo, assetName).Result; // assert fixture.LogDummy.LoggedMessages.Last().MessageTemplate.Should().Be("Cannot find requested asset in the response"); response.Should().Be(string.Empty); }
public void RetrievingReleaseUrlReturnsValidResponse() { // arrange const string assetName = "MAL.Net.1.0.0.3.zip"; const string expectedUrl = "https://github.com/NinetailLabs/MAL.Net---A-.net-API-for-MAL/releases/download/v1.0.0.3/MAL.Net.1.0.0.3.zip"; var fixture = new GitHutReleaseRetrieverFixture(assetName, string.Empty); fixture.HttpMock.Stub(t => t.Get($"/repos/{fixture.Owner}/{fixture.Repo}/releases/latest")) .AddHeader("X-RateLimit-Limit", "2") .AddHeader("X-RateLimit-Remaining", "1") .Return(ValidResponseData.GetValidResponseString) .OK(); var sut = fixture.GetInstance; // act var response = sut.GetLatestReleaseUrlAsync(fixture.Owner, fixture.Repo, assetName).Result; // assert response.Should().Be(expectedUrl); }
public void DownloadDirectoryIsCreatedIfItDoesNotExist() { // arrange var fixture = new GitHutReleaseRetrieverFixture(string.Empty, string.Empty); var directory = Guid.NewGuid().ToString(); const string fileName = "TestFile.txt"; const string urlPath = "/TestFile.txt"; fixture.HttpMock.Stub(t => t.Get(urlPath)) .ReturnFile(Path.Combine(fixture.ExecutionPath, "Data", fileName)) .OK(); var sut = fixture.GetInstance; // act var result = sut.DownloadFileAsync(fixture.BasePath + urlPath, Path.Combine(fixture.ExecutionPath, directory), fileName).Result; // assert result.Should().BeTrue(); Directory.Exists(Path.Combine(fixture.ExecutionPath, directory)).Should().BeTrue(); File.Exists(Path.Combine(fixture.ExecutionPath, directory, fileName)).Should().BeTrue(); DirectoryHelper.DeleteDirectory(directory); }
public void RetrievingReleaseUrlReturnsAnError() { // arrange const string assetName = "test.exe"; var fixture = new GitHutReleaseRetrieverFixture(assetName, string.Empty); fixture.HttpMock.Stub(t => t.Get($"/repos/{fixture.Owner}/{fixture.Repo}/releases/latest")) .AddHeader("X-RateLimit-Limit", "2") .AddHeader("X-RateLimit-Remaining", "1") .NotFound(); var sut = fixture.GetInstance; // act var response = sut.GetLatestReleaseUrlAsync(fixture.Owner, fixture.Repo, assetName).Result; // assert var logMessage = fixture.LogDummy.LoggedMessages.Last(); logMessage.MessageTemplate.Should() .Be("Error occured while looking up latest details. Server responded with {0} - {1}"); logMessage.MessageArguments.First().Should().Be("404"); logMessage.MessageArguments.Last().Should().Be(HttpStatusCode.NotFound.ToString()); response.Should().Be(string.Empty); }