From 987e2839a82bf1defbb2824a25c1eeb5d0482ef6 Mon Sep 17 00:00:00 2001 From: SCHUMACHER Brice Date: Thu, 14 Aug 2025 11:17:03 +0200 Subject: [PATCH 1/4] fix : (RequestBuilder.Uri.cs) Encode only query values instead of whole query string --- CHANGELOG.md | 8 ++++- .../RequestBuilderURIUnitTests.cs | 33 ++++++++++++++----- NotoriousClient/Builder/RequestBuilder.Uri.cs | 10 +++--- NotoriousClient/NotoriousClient.csproj | 2 +- 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2752e91..a9c5a17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,4 +12,10 @@ ### 🛠 Technical -- Minor bug fixes on tools (CI, csproj, etc...) \ No newline at end of file +- Minor bug fixes on tools (CI, csproj, etc...) + +## 202 + +### 🐛 Bug Fixes + +- Fixed a bug where the entire query string was encoded instead of only the query parameter keys and values. \ No newline at end of file diff --git a/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs b/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs index 5738c05..9039e1b 100644 --- a/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs +++ b/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs @@ -6,8 +6,8 @@ namespace NotoriousClient.Tests.Unit public class RequestBuilderURIUnitTests { #region URI - [GWTFact(given: "a url, an endpoint, and an HTTP Verb", - when: "i build a request", + [GWTFact(given: "a url, an endpoint, and an HTTP Verb", + when: "i build a request", then: "request has right url, endpoint and verb")] public void RequestBuilder_Should_HaveRightUrlEndpointAndVerb() { @@ -15,11 +15,11 @@ public void RequestBuilder_Should_HaveRightUrlEndpointAndVerb() Endpoint endpoint = new Endpoint("/pandas", Method.Get); RequestBuilder requestBuilder = new RequestBuilder(url, endpoint); - HttpRequestMessage request = requestBuilder.Build(); + HttpRequestMessage request = requestBuilder.Build(); Assert.Equal(HttpMethod.Get, request.Method); Assert.NotNull(request.RequestUri); - Assert.Equal("https://toto.com/pandas", request.RequestUri!.ToString()); + Assert.Equal("https://toto.com/pandas", request.RequestUri.AbsoluteUri); } [GWTFact(given: "a url with and end slash, an endpoint with a start slash, and an HTTP Verb", @@ -35,7 +35,7 @@ public void RequestBuilder_Should_HandleUrlSlashProperly() Assert.Equal(HttpMethod.Get, request.Method); Assert.NotNull(request.RequestUri); - Assert.Equal("https://toto.com/pandas", request.RequestUri!.ToString()); + Assert.Equal("https://toto.com/pandas", request.RequestUri.AbsoluteUri); } [GWTFact(given: "a url, an endpoint, and an HTTP Verb", @@ -51,7 +51,7 @@ public void RequestBuilder_Should_AddUrlSlashProperly() Assert.Equal(HttpMethod.Get, request.Method); Assert.NotNull(request.RequestUri); - Assert.Equal("https://toto.com/pandas", request.RequestUri!.ToString()); + Assert.Equal("https://toto.com/pandas", request.RequestUri.AbsoluteUri); } #endregion @@ -70,7 +70,7 @@ public void RequestBuilder_Should_HaveOneQueryParams() Assert.Equal(HttpMethod.Get, request.Method); Assert.NotNull(request.RequestUri); - Assert.Equal("https://toto.com/pandas?toto%3dtoto", request.RequestUri!.ToString()); + Assert.Equal("https://toto.com/pandas?toto=toto", request.RequestUri.AbsoluteUri); } [GWTFact(given: "a request with two query parameters", @@ -88,7 +88,24 @@ public void RequestBuilder_Should_HaveTwoQueryParams() Assert.Equal(HttpMethod.Get, request.Method); Assert.NotNull(request.RequestUri); - Assert.Equal("https://toto.com/pandas?toto%3dtoto%26toto2%3dtoto2", request.RequestUri!.ToString()); + Assert.Equal("https://toto.com/pandas?toto=toto&toto2=toto2", request.RequestUri.AbsoluteUri); + } + + [GWTFact(given: "a request with one query parameters that have an accent", + when: "i build a request", + then: "request has encoded query values")] + public void RequestBuilder_Should_ShouldEncodeQueryValues() + { + string url = "https://toto.com"; + Endpoint endpoint = new Endpoint("/pandas", Method.Get); + + IRequestBuilder requestBuilder = new RequestBuilder(url, endpoint) + .AddQueryParameter("tto", "tto"); + HttpRequestMessage request = requestBuilder.Build(); + + Assert.Equal(HttpMethod.Get, request.Method); + Assert.NotNull(request.RequestUri); + Assert.Equal("https://toto.com/pandas?t%C3%A9to=t%C3%A9to", request.RequestUri.AbsoluteUri); } #endregion diff --git a/NotoriousClient/Builder/RequestBuilder.Uri.cs b/NotoriousClient/Builder/RequestBuilder.Uri.cs index 95e8520..8556226 100644 --- a/NotoriousClient/Builder/RequestBuilder.Uri.cs +++ b/NotoriousClient/Builder/RequestBuilder.Uri.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Specialized; -using System.Web; +using System.Web; namespace NotoriousClient.Builder { @@ -82,14 +80,14 @@ private string HandleUriQueryParams(string uri, Dictionary query { if (queryParams.Count > 0) { - string queryParamsString = string.Join("&", queryParams.Select(kvp => string.Format("{0}={1}", kvp.Key, kvp.Value))); - return string.Format(uri + "?{0}", HttpUtility.UrlEncode(queryParamsString)); + string queryParamsString = string.Join("&", queryParams.Select(kvp => string.Format("{0}={1}", HttpUtility.UrlEncode(kvp.Key), HttpUtility.UrlEncode(kvp.Value)))); + return string.Format(uri + "?{0}", queryParamsString); } else { return uri; } - + } private string HandleUriEndPointParams(string uri, Dictionary endPointParams) diff --git a/NotoriousClient/NotoriousClient.csproj b/NotoriousClient/NotoriousClient.csproj index 7ef9fad..1e1c83a 100644 --- a/NotoriousClient/NotoriousClient.csproj +++ b/NotoriousClient/NotoriousClient.csproj @@ -5,7 +5,7 @@ NotoriousClient enable enable - 2.0.1 + 2.0.2 README.md Brice SCHUMACHER https://github.com/Notorious-Coding/Notorious-Client/ From 79473d6e30d64e56332235cb1e3e5e2852bbc5e8 Mon Sep 17 00:00:00 2001 From: SCHUMACHER Brice Date: Thu, 14 Aug 2025 11:32:44 +0200 Subject: [PATCH 2/4] fix : (RequestBuilderURIUnitTests) Encoding du fichier cs --- NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs b/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs index 9039e1b..567f166 100644 --- a/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs +++ b/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs @@ -124,7 +124,7 @@ public void RequestBuilder_Should_HandleEndpointParams() Assert.Equal(HttpMethod.Get, request.Method); Assert.NotNull(request.RequestUri); - Assert.Equal("https://toto.com/pandas/1", request.RequestUri!.ToString()); + Assert.Equal("https://toto.com/pandas/1", request.RequestUri.AbsoluteUri); } [GWTFact(given: "a request with one endpoint parameters and an endpoint without replacement token", From 030bc0608aebe6cf153ac7ade37d32346bd881f6 Mon Sep 17 00:00:00 2001 From: SCHUMACHER Brice Date: Thu, 14 Aug 2025 11:37:42 +0200 Subject: [PATCH 3/4] =?UTF-8?q?fix=20:=20(RequestBuilder.Uri.cs)=20HttpReq?= =?UTF-8?q?uestMessage=20s'occupe=20lui=20meme=20de=20l'encoding,=20plus?= =?UTF-8?q?=20besoin=20de=20le=20g=C3=A9rer=20a=20la=20main?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NotoriousClient/Builder/RequestBuilder.Uri.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/NotoriousClient/Builder/RequestBuilder.Uri.cs b/NotoriousClient/Builder/RequestBuilder.Uri.cs index 8556226..e96e4d2 100644 --- a/NotoriousClient/Builder/RequestBuilder.Uri.cs +++ b/NotoriousClient/Builder/RequestBuilder.Uri.cs @@ -1,6 +1,4 @@ -using System.Web; - -namespace NotoriousClient.Builder +namespace NotoriousClient.Builder { public partial class RequestBuilder : IRequestBuilder { @@ -80,14 +78,13 @@ private string HandleUriQueryParams(string uri, Dictionary query { if (queryParams.Count > 0) { - string queryParamsString = string.Join("&", queryParams.Select(kvp => string.Format("{0}={1}", HttpUtility.UrlEncode(kvp.Key), HttpUtility.UrlEncode(kvp.Value)))); + string queryParamsString = string.Join("&", queryParams.Select(kvp => string.Format("{0}={1}", kvp.Key, kvp.Value))); return string.Format(uri + "?{0}", queryParamsString); } else { return uri; } - } private string HandleUriEndPointParams(string uri, Dictionary endPointParams) From 76ae9fbf1a3254850611cae735ba74c16069174b Mon Sep 17 00:00:00 2001 From: SCHUMACHER Brice Date: Thu, 14 Aug 2025 11:46:25 +0200 Subject: [PATCH 4/4] fix : (RequestBuilderURIUnitTests) Delete encoding unit tests because httprequestmessage handle it alone --- .../RequestBuilderURIUnitTests.cs | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs b/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs index 567f166..39bd9eb 100644 --- a/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs +++ b/NotoriousClient.Tests.Unit/RequestBuilderURIUnitTests.cs @@ -1,4 +1,4 @@ -using NotoriousClient.Builder; +using NotoriousClient.Builder; using NotoriousClient.Tests.Unit.Attributes; namespace NotoriousClient.Tests.Unit @@ -90,23 +90,6 @@ public void RequestBuilder_Should_HaveTwoQueryParams() Assert.NotNull(request.RequestUri); Assert.Equal("https://toto.com/pandas?toto=toto&toto2=toto2", request.RequestUri.AbsoluteUri); } - - [GWTFact(given: "a request with one query parameters that have an accent", - when: "i build a request", - then: "request has encoded query values")] - public void RequestBuilder_Should_ShouldEncodeQueryValues() - { - string url = "https://toto.com"; - Endpoint endpoint = new Endpoint("/pandas", Method.Get); - - IRequestBuilder requestBuilder = new RequestBuilder(url, endpoint) - .AddQueryParameter("tto", "tto"); - HttpRequestMessage request = requestBuilder.Build(); - - Assert.Equal(HttpMethod.Get, request.Method); - Assert.NotNull(request.RequestUri); - Assert.Equal("https://toto.com/pandas?t%C3%A9to=t%C3%A9to", request.RequestUri.AbsoluteUri); - } #endregion #region EndpointParams