Skip to content

Commit 4037602

Browse files
aminamin
authored andcommitted
add warning message to result when the beiginning of the requestUri has a Slash
1 parent 603d2d6 commit 4037602

File tree

4 files changed

+83
-13
lines changed

4 files changed

+83
-13
lines changed

src/HttpClientToCurl/Builder.cs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,32 @@ internal static StringBuilder AddAbsoluteUrl(this StringBuilder stringBuilder, s
2929
if (!string.IsNullOrWhiteSpace(baseUrl))
3030
{
3131
string inputBaseUrl = baseUrl.Trim();
32-
if (inputBaseUrl.EndsWith("/"))
33-
inputBaseUrl = inputBaseUrl.Remove(inputBaseUrl.Length - 1);
34-
35-
StringBuilder inputUri = new StringBuilder();
36-
37-
if (!string.IsNullOrWhiteSpace(requestUri?.Trim()) && !requestUri.StartsWith("/"))
38-
inputUri = inputUri.Append('/');
39-
40-
inputUri.Append(requestUri?.Trim());
4132

33+
string inputRequestUri = requestUri?.Trim();
34+
if (!string.IsNullOrWhiteSpace(inputRequestUri))
35+
{
36+
if (inputRequestUri.StartsWith('/'))
37+
{
38+
inputRequestUri = inputRequestUri.Remove(0, 1);
39+
var warningMessage = AddWarningMessageForAdditionalSlash();
40+
41+
stringBuilder
42+
.Insert(0, warningMessage)
43+
.Insert(warningMessage.Length, Environment.NewLine);
44+
}
45+
}
46+
else
47+
inputBaseUrl = inputBaseUrl.Remove(inputBaseUrl.Length - 1);
48+
4249
return stringBuilder
43-
.Append($"{inputBaseUrl}{inputUri}")
50+
.Append($"{inputBaseUrl}{inputRequestUri}")
4451
.Append(' ');
4552
}
4653

4754
throw new InvalidDataException("baseUrl argument is null or empty!");
55+
56+
string AddWarningMessageForAdditionalSlash()
57+
=> "# Warning: you must remove the Slash at the first of the requestUri.";
4858
}
4959

5060
internal static StringBuilder AddHeaders(this StringBuilder stringBuilder, HttpClient httpClient, HttpRequestMessage httpRequestMessage, bool needAddDefaultHeaders = true)

src/HttpClientToCurlGeneratorTest/FunctionalTest/FailedScenariosTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ namespace HttpClientToCurlGeneratorTest.FunctionalTest;
22

33
public class FailedScenariosTests
44
{
5-
5+
// Nothing now
66
}

src/HttpClientToCurlGeneratorTest/FunctionalTest/SuccessScenariosTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public void GenerateCurl_When_Set_RequestUri_Inside_HttpRequestMessage_For_PostM
4444
// Arrange
4545
string requestBody = @"{""name"":""sara"",""requestId"":10001001,""amount"":20000}";
4646

47-
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "/api/test");
47+
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "api/test");
4848
httpRequestMessage.Content = new StringContent(requestBody, Encoding.UTF8, MediaTypeNames.Application.Json);
4949
httpRequestMessage.Headers.Add("Authorization", "Bearer 4797c126-3f8a-454a-aff1-96c0220dae61");
5050

src/HttpClientToCurlGeneratorTest/UnitTest/MediaTypes/Json/SuccessCurlGeneratorTests.cs

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,37 @@ public void GenerateCurl_Without_Content_For_PostMethod()
195195
@"curl -X POST http://localhost:1213/api/test -H 'Authorization: Bearer 56bfa7a0-0541-4d71-9efc-8b28219ac31a' -d ''"));
196196
}
197197

198+
[Theory]
199+
public void GenerateCurl_Along_With_Warning_When_Exist_Slash_At_The_Beginning_Of_The_RequestUri_For_PostMethod()
200+
{
201+
// Arrange
202+
string requestBody = @"{""name"":""sara"",""requestId"":10001001,""amount"":20000}";
203+
204+
var requestUri = "/api/test";
205+
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, requestUri);
206+
httpRequestMessage.Content = new StringContent(requestBody, Encoding.UTF8, MediaTypeNames.Application.Json);
207+
httpRequestMessage.Headers.Add("Authorization", "Bearer 4797c126-3f8a-454a-aff1-96c0220dae61");
208+
209+
using var httpClient = new HttpClient();
210+
httpClient.BaseAddress = new Uri("http://localhost:1213");
211+
212+
// Act
213+
string script = Generator.GenerateCurl(
214+
httpClient,
215+
httpRequestMessage,
216+
requestUri,
217+
true);
218+
219+
// Assert
220+
Assert.That(script, Is.Not.Null);
221+
Assert.That(script, Is.Not.Empty);
222+
Assert.That(script, Does.StartWith("# Warning"));
223+
Assert.That(script?.Trim(),
224+
Is.EqualTo(
225+
@"# Warning: you must remove the Slash at the first of the requestUri.
226+
curl -X POST http://localhost:1213/api/test -H 'Authorization: Bearer 4797c126-3f8a-454a-aff1-96c0220dae61' -H 'Content-Type: application/json; charset=utf-8' -d '{""name"":""sara"",""requestId"":10001001,""amount"":20000}'"));
227+
}
228+
198229
#endregion
199230

200231
#region :: GenerateCurl For Get Method ::
@@ -254,7 +285,36 @@ public void GenerateCurl_With_QueryString_For_GetMethod()
254285
Assert.That(script, Is.Not.Empty);
255286
Assert.That(script, Does.StartWith("curl"));
256287
Assert.That(script?.Trim(),
257-
Is.EqualTo(@"curl http://localhost:1213/api/test?id=12 -H 'Authorization: Bearer 703438f3-16ad-4ba5-b923-8f72cd0f2db9' -H 'Content-Type: application/json; charset=utf-8'"));
288+
Is.EqualTo(
289+
@"curl http://localhost:1213/api/test?id=12 -H 'Authorization: Bearer 703438f3-16ad-4ba5-b923-8f72cd0f2db9' -H 'Content-Type: application/json; charset=utf-8'"));
290+
}
291+
292+
[Theory]
293+
public void GenerateCurl_Along_With_Warning_When_Exist_Slash_At_The_Beginning_Of_The_RequestUri_For_GetMethod()
294+
{
295+
// Arrange
296+
var requestUri = "/api/test";
297+
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, requestUri);
298+
httpRequestMessage.Content = new StringContent(string.Empty, Encoding.UTF8, MediaTypeNames.Application.Json);
299+
httpRequestMessage.Headers.Add("Authorization", "Bearer 703438f3-16ad-4ba5-b923-8f72cd0f2db9");
300+
301+
using var httpClient = new HttpClient();
302+
httpClient.BaseAddress = new Uri("http://localhost:1213");
303+
304+
// Act
305+
string script = Generator.GenerateCurl(
306+
httpClient,
307+
httpRequestMessage,
308+
requestUri,
309+
true);
310+
311+
// Assert
312+
Assert.That(script, Is.Not.Null);
313+
Assert.That(script, Is.Not.Empty);
314+
Assert.That(script, Does.StartWith("# Warning"));
315+
Assert.That(script?.Trim(),
316+
Is.EqualTo(@"# Warning: you must remove the Slash at the first of the requestUri.
317+
curl http://localhost:1213/api/test -H 'Authorization: Bearer 703438f3-16ad-4ba5-b923-8f72cd0f2db9' -H 'Content-Type: application/json; charset=utf-8'"));
258318
}
259319

260320
#endregion

0 commit comments

Comments
 (0)