Unit tests for QueuedOpertaion

This commit is contained in:
Amy Palamountain
2014-02-02 18:59:11 +13:00
parent 706ab469ab
commit 809ebd182c
+51
View File
@@ -285,6 +285,57 @@ namespace Octokit.Tests.Http
connection.Received().GetAsync<object>(queuedOperationUrl);
}
[Fact]
public async Task WhenGetReturnsNotOkOrAcceptedApiExceptionIsThrown()
{
var queuedOperationUrl = new Uri("anything", UriKind.Relative);
const HttpStatusCode statusCode = HttpStatusCode.PartialContent;
IResponse<object> response = new ApiResponse<object> { BodyAsObject = new object(), StatusCode = statusCode };
var connection = Substitute.For<IConnection>();
connection.GetAsync<object>(queuedOperationUrl).Returns(Task.FromResult(response));
var apiConnection = new ApiConnection(connection);
await AssertEx.Throws<ApiException>(async () => await apiConnection.GetQueuedOperation<object>(queuedOperationUrl));
}
[Fact]
public async Task WhenGetReturnsOkThenBodyAsObjectIsReturned()
{
var queuedOperationUrl = new Uri("anything", UriKind.Relative);
var result = new object();
const HttpStatusCode statusCode = HttpStatusCode.OK;
IResponse<object> response = new ApiResponse<object> { BodyAsObject = result, StatusCode = statusCode };
var connection = Substitute.For<IConnection>();
connection.GetAsync<object>(queuedOperationUrl).Returns(Task.FromResult(response));
var apiConnection = new ApiConnection(connection);
var actualResult = await apiConnection.GetQueuedOperation<object>(queuedOperationUrl);
Assert.Same(actualResult,result);
}
[Fact]
public async Task GetIsRepeatedUntilHttpStatusCodeOkIsReturned()
{
var queuedOperationUrl = new Uri("anything", UriKind.Relative);
var result = new object();
IResponse<object> firstResponse = new ApiResponse<object> { BodyAsObject = result, StatusCode = HttpStatusCode.Accepted };
IResponse<object> completedResponse = new ApiResponse<object> { BodyAsObject = result, StatusCode = HttpStatusCode.OK };
var connection = Substitute.For<IConnection>();
connection.GetAsync<object>(queuedOperationUrl)
.Returns(x => Task.FromResult(firstResponse),
x => Task.FromResult(firstResponse),
x => Task.FromResult(completedResponse));
var apiConnection = new ApiConnection(connection);
await apiConnection.GetQueuedOperation<object>(queuedOperationUrl);
connection.Received(3).GetAsync<object>(queuedOperationUrl);
}
[Fact]
public async Task EnsuresArgumentNotNull()
{