Skip to content

Commit cd58704

Browse files
committed
Merge pull request #233 from 7digital/postwithbodyandquery
POST/PUT with a body and query string parameters
2 parents 7b7f900 + 9fef421 commit cd58704

File tree

6 files changed

+18
-56
lines changed

6 files changed

+18
-56
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ build/spec/report.html
1717
*.DotSettings
1818
*.docstates
1919
*.ncrunchsolution
20+
*.ncrunchproject
2021
packages/*/**
2122
/.nuget/nuget.exe
2223
packages/*/**

src/SevenDigital.Api.Wrapper.Integration.Tests/EndpointTests/OAuth/OAuthRequestTokenTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public async void Should_allow_POSTing_to_request_token_endpoint()
2020
{
2121
var api = (FluentApi<OAuthRequestToken>) Api<OAuthRequestToken>.Create;
2222

23-
api.WithMethod(HttpMethod.Post).WithParameter("one", "two");
23+
api.WithMethod(HttpMethod.Post).WithParameter("userid", "two");
2424

2525
var requestToken = await api.Please();
2626

@@ -43,7 +43,7 @@ public async void Can_handle_odd_characters_in_get_signing_process()
4343
{
4444
var oAuthRequestToken = await Api<OAuthRequestToken>
4545
.Create
46-
.WithParameter("foo", "%! blah") //arbitrary parameter, but should test for errors in signature generation
46+
.WithParameter("userid", "%! blah") //arbitrary parameter, but should test for errors in signature generation
4747
.Please();
4848

4949
Assert.That(oAuthRequestToken.Secret, Is.Not.Empty);
@@ -56,7 +56,7 @@ public async void Can_handle_odd_characters_in_post_signing_process()
5656
var api = (FluentApi<OAuthRequestToken>) Api<OAuthRequestToken>.Create;
5757

5858
api.WithMethod(HttpMethod.Post);
59-
api.WithParameter("foo", "%! blah"); //arbitrary parameter, but should test for errors in signature generation
59+
api.WithParameter("userid", "%! blah"); //arbitrary parameter, but should test for errors in signature generation
6060

6161
var oAuthRequestToken = await api.Please();
6262

src/SevenDigital.Api.Wrapper.Unit.Tests/Requests/RequestBuilderMethodTests.cs

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -61,52 +61,23 @@ public void Should_use_secure_uri_when_requested()
6161
[TestCase]
6262
public void Should_include_parameters_in_querystring()
6363
{
64-
if (!TestedHttpMethod.HasParamsInQueryString())
65-
{
66-
Assert.Ignore("This http method does not use params in query string");
67-
}
68-
6964
var requestData = MakeRequestData(TestedHttpMethod, false);
7065
requestData.Parameters.Add("foo", "bar");
7166

7267
var request = _requestBuilder.BuildRequest(requestData);
7368

7469
Assert.That(request.Url, Is.StringContaining("?foo=bar"));
75-
Assert.That(request.Body.Data, Is.Empty);
7670
}
7771

7872
[TestCase]
79-
public void Should_include_parameters_in_body()
73+
public void Should_include_parameters_in_querystring_when_signed()
8074
{
81-
if (!TestedHttpMethod.ShouldHaveRequestBody())
82-
{
83-
Assert.Ignore("This http method does not use the request body");
84-
}
85-
86-
var requestData = MakeRequestData(TestedHttpMethod, false);
87-
requestData.Parameters.Add("foo", "bar");
88-
89-
var request = _requestBuilder.BuildRequest(requestData);
90-
91-
Assert.That(request.Url, Is.Not.StringContaining("foo=bar"));
92-
Assert.That(request.Body.Data, Is.StringContaining("foo=bar"));
93-
}
94-
95-
[TestCase]
96-
public void Should_include_parameters_in_body_when_signed()
97-
{
98-
if (!TestedHttpMethod.ShouldHaveRequestBody())
99-
{
100-
Assert.Ignore("This http method does not use the request body");
101-
}
102-
10375
var requestData = MakeRequestData(TestedHttpMethod, true);
10476
requestData.Parameters.Add("foo", "bar");
10577

10678
var request = _requestBuilder.BuildRequest(requestData);
10779

108-
Assert.That(request.Url, Is.Not.StringContaining("foo=bar"));
109-
Assert.That(request.Body.Data, Is.StringContaining("foo=bar"));
80+
Assert.That(request.Url, Is.StringContaining("?foo=bar")); ;
11081
}
11182

11283
[TestCase]

src/SevenDigital.Api.Wrapper.Unit.Tests/Requests/RequestBuilderTests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,11 @@ public void Should_use_api_uri_provided_by_IApiUri_interface()
8484
}
8585

8686
[Test]
87-
public void Post_data_with_params_defaults_to_key_value_pair_post_body()
87+
public void Post_data_with_params_defaults_to_params()
8888
{
8989
var parameters = new Dictionary<string, string>
9090
{
91-
{"one", "one"}
91+
{"one", "foo"}
9292
};
9393
var requestData = new RequestData
9494
{
@@ -97,16 +97,15 @@ public void Post_data_with_params_defaults_to_key_value_pair_post_body()
9797
};
9898

9999
var request = _requestBuilder.BuildRequest(requestData);
100-
Assert.That(request.Body.Data, Is.EqualTo(parameters.ToQueryString()));
101-
Assert.That(request.Body.ContentType, Is.EqualTo("application/x-www-form-urlencoded"));
100+
Assert.That(request.Url, Is.StringContaining("?one=foo"));
102101
}
103102

104103
[Test]
105-
public void Post_data_with_params_and_requestBody_defaults_to_key_value_pair_post_body()
104+
public void Post_data_with_params_and_requestBody_defaults_to_params_and_retains_request_body()
106105
{
107106
var parameters = new Dictionary<string, string>
108107
{
109-
{"one", "one"}
108+
{"one", "foo"}
110109
};
111110
var requestData = new RequestData
112111
{
@@ -116,8 +115,9 @@ public void Post_data_with_params_and_requestBody_defaults_to_key_value_pair_pos
116115
};
117116

118117
var request = _requestBuilder.BuildRequest(requestData);
119-
Assert.That(request.Body.Data, Is.EqualTo(parameters.ToQueryString()));
120-
Assert.That(request.Body.ContentType, Is.EqualTo("application/x-www-form-urlencoded"));
118+
Assert.That(request.Url, Is.StringContaining("?one=foo"));
119+
Assert.That(request.Body.Data, Is.EqualTo(requestData.Payload.Data));
120+
Assert.That(request.Body.ContentType, Is.EqualTo("text/plain"));
121121
}
122122

123123
[Test]

src/SevenDigital.Api.Wrapper/Http/HttpMethodHelpers.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,9 @@ public static HttpMethod Parse(string methodName)
2222
}
2323
}
2424

25-
public static bool HasParamsInQueryString(this HttpMethod method)
26-
{
27-
return (method == HttpMethod.Get) || (method == HttpMethod.Delete);
28-
}
29-
3025
public static bool ShouldHaveRequestBody(this HttpMethod method)
3126
{
32-
return (method == HttpMethod.Post) || (method == HttpMethod.Put);
27+
return method == HttpMethod.Post || method == HttpMethod.Put;
3328
}
3429
}
3530
}

src/SevenDigital.Api.Wrapper/Requests/RequestBuilder.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public Request BuildRequest(RequestData requestData)
3636
var traceId = requestData.TraceId ?? Guid.NewGuid().ToString();
3737
headers.Add("x-7d-traceid", traceId);
3838

39-
if (requestData.HttpMethod.HasParamsInQueryString() && (apiRequest.Parameters.Count > 0))
39+
if (apiRequest.Parameters.Count > 0)
4040
{
4141
fullUrl += "?" + apiRequest.Parameters.ToQueryString();
4242
}
@@ -47,20 +47,14 @@ public Request BuildRequest(RequestData requestData)
4747
private static RequestPayload CheckForRequestPayload(RequestData requestData, IDictionary<string,string> requestParameters)
4848
{
4949
var shouldHaveRequestBody = requestData.HttpMethod.ShouldHaveRequestBody();
50-
var hasSuppliedParameters = requestParameters.Count > 0;
5150
var hasSuppliedARequestPayload = requestData.Payload != null;
5251

53-
if (shouldHaveRequestBody && hasSuppliedParameters)
54-
{
55-
return new RequestPayload(FormUrlEncoded, requestParameters.ToQueryString());
56-
}
57-
5852
if (shouldHaveRequestBody && hasSuppliedARequestPayload)
5953
{
6054
return requestData.Payload;
6155
}
6256

63-
return new RequestPayload(FormUrlEncoded, "");
57+
return new RequestPayload(FormUrlEncoded, requestParameters.ToQueryString());
6458
}
6559

6660
private string GetAuthorizationHeader(RequestData requestData, string fullUrl, ApiRequest apiRequest, RequestPayload requestBody)
@@ -84,6 +78,7 @@ private string BuildOAuthHeader(RequestData requestData, string fullUrl, IDictio
8478
Method = httpMethod,
8579
ConsumerKey = _oAuthCredentials.ConsumerKey,
8680
ConsumerSecret = _oAuthCredentials.ConsumerSecret,
81+
8782
};
8883

8984
if (!string.IsNullOrEmpty(requestData.OAuthToken))

0 commit comments

Comments
 (0)