Add status code to ApiResponse

We weren't setting this before.
This commit is contained in:
Haacked
2013-09-27 16:36:34 -07:00
parent 2a79109780
commit 0a5acdb0cb
5 changed files with 53 additions and 17 deletions
+21 -4
View File
@@ -5,6 +5,7 @@ using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Octokit.Http;
using Octokit.Tests.Helpers;
using Xunit;
namespace Octokit.Tests.Http
@@ -62,7 +63,7 @@ namespace Octokit.Tests.Http
};
var tester = new HttpClientAdapterTester();
var response = await tester.BuildResponseTester<string>(responseMessage);
var response = await tester.BuildResponseTester<object>(responseMessage);
var firstHeader = response.Headers.First();
Assert.Equal("peanut", firstHeader.Key);
@@ -70,6 +71,25 @@ namespace Octokit.Tests.Http
var lastHeader = response.Headers.Last();
Assert.Equal("ele", lastHeader.Key);
Assert.Equal("phant", lastHeader.Value);
Assert.Equal("{}", response.Body);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
[Fact]
public async Task ThrowsExceptionWhenForbidden()
{
var responseMessage = new HttpResponseMessage {
StatusCode = HttpStatusCode.Forbidden,
Headers =
{
{"peanut", "butter"},
}
};
var tester = new HttpClientAdapterTester();
var exception = await AssertEx.Throws<AuthenticationException>(async () =>
await tester.BuildResponseTester<string>(responseMessage));
Assert.Equal(HttpStatusCode.Forbidden, exception.StatusCode);
}
}
@@ -84,10 +104,7 @@ namespace Octokit.Tests.Http
{
return await BuildResponse<T>(responseMessage);
}
}
}
public class TheSendMethod
+8
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Net;
namespace Octokit.Http
{
@@ -10,10 +11,17 @@ namespace Octokit.Http
Headers = new Dictionary<string, string>();
}
object IResponse.BodyAsObject
{
get { return BodyAsObject; }
set { BodyAsObject = (T)value; }
}
public string Body { get; set; }
public T BodyAsObject { get; set; }
public Dictionary<string, string> Headers { get; private set; }
public Uri ResponseUri { get; set; }
public ApiInfo ApiInfo { get; set; }
public HttpStatusCode StatusCode { get; set; }
}
}
+8 -5
View File
@@ -25,13 +25,16 @@ namespace Octokit.Http
protected async virtual Task<IResponse<T>> BuildResponse<T>(HttpResponseMessage responseMessage)
{
Ensure.ArgumentNotNull(responseMessage, "responseMessage");
string responseBody = await responseMessage
.EnsureSuccess()
.Content
.ReadAsStringAsync();
var response = new ApiResponse<T>
{
Body = await responseMessage
.EnsureSuccess()
.Content
.ReadAsStringAsync()
Body = responseBody,
StatusCode = responseMessage.StatusCode,
};
foreach (var h in responseMessage.Headers)
+9 -2
View File
@@ -1,14 +1,21 @@
using System;
using System.Collections.Generic;
using System.Net;
namespace Octokit.Http
{
public interface IResponse<T>
public interface IResponse<T> : IResponse
{
new T BodyAsObject { get; set; }
}
public interface IResponse
{
object BodyAsObject { get; set; }
string Body { get; set; }
T BodyAsObject { get; set; }
Dictionary<string, string> Headers { get; }
Uri ResponseUri { get; set; }
ApiInfo ApiInfo { get; set; }
HttpStatusCode StatusCode { get; set; }
}
}
+7 -6
View File
@@ -3,12 +3,12 @@
namespace Octokit.Http
{
/// <summary>
/// Responsible for serializing the request and response as JSON and
/// adding the proper JSON response header.
/// Responsible for serializing the request and response as JSON and
/// adding the proper JSON response header.
/// </summary>
public class JsonHttpPipeline
{
readonly IJsonSerializer serializer;
readonly IJsonSerializer _serializer;
public JsonHttpPipeline() : this(new SimpleJsonSerializer())
{
@@ -18,7 +18,7 @@ namespace Octokit.Http
{
Ensure.ArgumentNotNull(serializer, "serializer");
this.serializer = serializer;
_serializer = serializer;
}
public void SerializeRequest(IRequest request)
@@ -30,13 +30,14 @@ namespace Octokit.Http
if (request.Method == HttpMethod.Get || request.Body == null) return;
if (request.Body is string) return;
request.Body = serializer.Serialize(request.Body); }
request.Body = _serializer.Serialize(request.Body);
}
public void DeserializeResponse<T>(IResponse<T> response)
{
Ensure.ArgumentNotNull(response, "response");
var json = serializer.Deserialize<T>(response.Body);
var json = _serializer.Deserialize<T>(response.Body);
response.BodyAsObject = json;
}
}