diff --git a/Octokit.Tests/Http/ApiConnectionTests.cs b/Octokit.Tests/Http/ApiConnectionTests.cs index bd83f49c..3454fb9f 100644 --- a/Octokit.Tests/Http/ApiConnectionTests.cs +++ b/Octokit.Tests/Http/ApiConnectionTests.cs @@ -285,6 +285,57 @@ namespace Octokit.Tests.Http connection.Received().GetAsync(queuedOperationUrl); } + [Fact] + public async Task WhenGetReturnsNotOkOrAcceptedApiExceptionIsThrown() + { + var queuedOperationUrl = new Uri("anything", UriKind.Relative); + + const HttpStatusCode statusCode = HttpStatusCode.PartialContent; + IResponse response = new ApiResponse { BodyAsObject = new object(), StatusCode = statusCode }; + var connection = Substitute.For(); + connection.GetAsync(queuedOperationUrl).Returns(Task.FromResult(response)); + var apiConnection = new ApiConnection(connection); + + await AssertEx.Throws(async () => await apiConnection.GetQueuedOperation(queuedOperationUrl)); + } + + [Fact] + public async Task WhenGetReturnsOkThenBodyAsObjectIsReturned() + { + var queuedOperationUrl = new Uri("anything", UriKind.Relative); + + var result = new object(); + const HttpStatusCode statusCode = HttpStatusCode.OK; + IResponse response = new ApiResponse { BodyAsObject = result, StatusCode = statusCode }; + var connection = Substitute.For(); + connection.GetAsync(queuedOperationUrl).Returns(Task.FromResult(response)); + var apiConnection = new ApiConnection(connection); + + var actualResult = await apiConnection.GetQueuedOperation(queuedOperationUrl); + Assert.Same(actualResult,result); + } + + [Fact] + public async Task GetIsRepeatedUntilHttpStatusCodeOkIsReturned() + { + var queuedOperationUrl = new Uri("anything", UriKind.Relative); + + var result = new object(); + IResponse firstResponse = new ApiResponse { BodyAsObject = result, StatusCode = HttpStatusCode.Accepted }; + IResponse completedResponse = new ApiResponse { BodyAsObject = result, StatusCode = HttpStatusCode.OK }; + var connection = Substitute.For(); + connection.GetAsync(queuedOperationUrl) + .Returns(x => Task.FromResult(firstResponse), + x => Task.FromResult(firstResponse), + x => Task.FromResult(completedResponse)); + + var apiConnection = new ApiConnection(connection); + + await apiConnection.GetQueuedOperation(queuedOperationUrl); + + connection.Received(3).GetAsync(queuedOperationUrl); + } + [Fact] public async Task EnsuresArgumentNotNull() {