Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev 1249 #48

Merged
merged 2 commits into from
Jan 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 18 additions & 5 deletions Dwolla.Client.Tests/Rest/ResponseBuilderShould.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public async void SetErrorOnNullContent()
public async void SetErrorOnInvalidJson()
{
const string raw = "{";
var response = CreateResponse(raw);
var response = CreateErrorResponse(raw);

var actual = await _builder.Build<TestResponse>(response);

Expand All @@ -49,9 +49,9 @@ public async void SetErrorOnInvalidJson()
[Fact]
public async void DeserializeErrorResponse()
{
var expected = new ErrorResponse {Code = "MyCode", Message = "MyMessage"};
var expected = new ErrorResponse { Code = "MyCode", Message = "MyMessage" };
var raw = JsonConvert.SerializeObject(expected);
var response = CreateResponse(raw);
var response = CreateErrorResponse(raw);

var actual = await _builder.Build<TestResponse>(response);

Expand All @@ -66,7 +66,7 @@ public async void DeserializeErrorResponse()
[Fact]
public async void DeserializeResponse()
{
var expected = new TestResponse {TestProp = "testing"};
var expected = new TestResponse { TestProp = "testing" };
var raw = JsonConvert.SerializeObject(expected);
var response = CreateResponse(raw);

Expand All @@ -81,7 +81,20 @@ public async void DeserializeResponse()

private static HttpResponseMessage CreateResponse(string content)
{
var r = new HttpResponseMessage {Content = content == null ? null : new StringContent(content, Encoding.UTF8)};
var r = new HttpResponseMessage
{
Content = content == null
? null : new StringContent(content, Encoding.UTF8)
};
r.StatusCode = System.Net.HttpStatusCode.OK;
r.Headers.Add("x-request-id", RequestId);
return r;
}

private static HttpResponseMessage CreateErrorResponse(string content)
{
var r = new HttpResponseMessage { Content = new StringContent(content, Encoding.UTF8) };
r.StatusCode = System.Net.HttpStatusCode.BadRequest;
r.Headers.Add("x-request-id", RequestId);
return r;
}
Expand Down
6 changes: 6 additions & 0 deletions Dwolla.Client/Models/Responses/Customer.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using Newtonsoft.Json;

namespace Dwolla.Client.Models.Responses
{
Expand All @@ -20,6 +21,11 @@ public class Customer : BaseResponse
public string BusinessName { get; set; }
public string DoingBusinessAs { get; set; }
public string Website { get; set; }
public string BusinessType { get; set; }
public string BusinessClassification { get; set; }
public Controller Controller { get; set; }
public string CorrelationId { get; set; }
[JsonProperty(PropertyName = "_embedded")]
public ErrorEmbed Embedded { get; set; }
}
}
5 changes: 2 additions & 3 deletions Dwolla.Client/Rest/ResponseBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ public interface IResponseBuilder

public class ResponseBuilder : IResponseBuilder
{
private static readonly Regex ErrorRegex = new Regex("^{.*\"code\":.*\"message\":.*}$", RegexOptions.IgnoreCase);

public async Task<RestResponse<T>> Build<T>(HttpResponseMessage response)
{
Expand All @@ -26,7 +25,7 @@ public async Task<RestResponse<T>> Build<T>(HttpResponseMessage response)

try
{
return ErrorRegex.IsMatch(rawContent)
return (int)response.StatusCode >= 400
? Error<T>(response, JsonConvert.DeserializeObject<ErrorResponse>(rawContent), rawContent)
: new RestResponse<T>(response, JsonConvert.DeserializeObject<T>(rawContent), rawContent);
}
Expand All @@ -38,7 +37,7 @@ public async Task<RestResponse<T>> Build<T>(HttpResponseMessage response)
}

public RestResponse<T> Error<T>(HttpResponseMessage response, string code, string message, string rawContent) =>
Error<T>(response, new ErrorResponse {Code = code, Message = message}, rawContent);
Error<T>(response, new ErrorResponse { Code = code, Message = message }, rawContent);

private static RestResponse<T> Error<T>(HttpResponseMessage response, ErrorResponse error, string rawContent) =>
new RestResponse<T>(response, default(T), rawContent, error);
Expand Down