mirror of
https://github.com/zoriya/octokit.net.git
synced 2026-05-31 02:05:39 +00:00
Add status code to ApiResponse
We weren't setting this before.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user