From a20ae0875bad3ce02f2098063af3d32506028f58 Mon Sep 17 00:00:00 2001 From: rajiv Date: Tue, 10 Apr 2018 15:37:54 -0400 Subject: [PATCH 1/2] test for filter url-encoding --- .../QueryTests/UrlEncodingTester.cs | 45 +++++++++++++++++++ APIClient.Tests/TestData.xml | 12 +++++ .../VersionOne.SDK.APIClient.Tests.csproj | 1 + 3 files changed, 58 insertions(+) create mode 100644 APIClient.Tests/QueryTests/UrlEncodingTester.cs diff --git a/APIClient.Tests/QueryTests/UrlEncodingTester.cs b/APIClient.Tests/QueryTests/UrlEncodingTester.cs new file mode 100644 index 0000000..754ab54 --- /dev/null +++ b/APIClient.Tests/QueryTests/UrlEncodingTester.cs @@ -0,0 +1,45 @@ +using NUnit.Framework; + +namespace VersionOne.SDK.APIClient.Tests.QueryTests +{ + public class UrlEncodingTester : MetaTesterBase + { + protected override string MetaTestKeys => "UrlEncodingTester"; + + private IAssetType X => AssetType("X"); + private IAttributeDefinition Y => X.GetAttributeDefinition("Y"); + + [Test] public void TokenTerms_are_encoded() + { + var query = new Query(X) { + Filter = new TokenTerm("Y='Fish & Chips'") + }; + var url = new QueryURLBuilder(query).ToString(); + Assert.AreEqual("Data/X?sel=&where=Y='Fish+%26+Chips'", url); + } + + [Test] public void equal_FilterTerms_are_encoded() + { + var filter = new FilterTerm(Y); + filter.Equal("Fish & Chips"); + + var query = new Query(AssetType("X")) { + Filter = filter + }; + var url = new QueryURLBuilder(query).ToString(); + Assert.AreEqual("Data/X?sel=&where=X.Y='Fish+%26+Chips'", url); + } + + [Test] public void exists_FilterTerms_are_encoded() + { + var filter = new FilterTerm(Y); + filter.Exists(); + + var query = new Query(AssetType("X")) { + Filter = filter + }; + var url = new QueryURLBuilder(query).ToString(); + Assert.AreEqual("Data/X?sel=&where=%2BX.Y", url); + } + } +} diff --git a/APIClient.Tests/TestData.xml b/APIClient.Tests/TestData.xml index 1902d06..a49e8e6 100644 --- a/APIClient.Tests/TestData.xml +++ b/APIClient.Tests/TestData.xml @@ -228,6 +228,18 @@ + + + + + + + + + + + + diff --git a/APIClient.Tests/VersionOne.SDK.APIClient.Tests.csproj b/APIClient.Tests/VersionOne.SDK.APIClient.Tests.csproj index 9c5eef5..cba7c39 100644 --- a/APIClient.Tests/VersionOne.SDK.APIClient.Tests.csproj +++ b/APIClient.Tests/VersionOne.SDK.APIClient.Tests.csproj @@ -85,6 +85,7 @@ + From b026ca6c069260791f0b994b49b0997cd4948ad0 Mon Sep 17 00:00:00 2001 From: rajiv Date: Tue, 10 Apr 2018 15:46:06 -0400 Subject: [PATCH 2/2] test for doubling double-quotes --- .../QueryTests/UrlEncodingTester.cs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/APIClient.Tests/QueryTests/UrlEncodingTester.cs b/APIClient.Tests/QueryTests/UrlEncodingTester.cs index 754ab54..0657182 100644 --- a/APIClient.Tests/QueryTests/UrlEncodingTester.cs +++ b/APIClient.Tests/QueryTests/UrlEncodingTester.cs @@ -41,5 +41,29 @@ [Test] public void exists_FilterTerms_are_encoded() var url = new QueryURLBuilder(query).ToString(); Assert.AreEqual("Data/X?sel=&where=%2BX.Y", url); } + + [Test] public void single_quotes_are_doubled() + { + var filter = new FilterTerm(Y); + filter.Equal("quote ' this"); + + var query = new Query(AssetType("X")) { + Filter = filter + }; + var url = new QueryURLBuilder(query).ToString(); + Assert.AreEqual("Data/X?sel=&where=X.Y='quote+%27%27+this'", url); + } + + [Test] public void double_quotes_are_doubled() + { + var filter = new FilterTerm(Y); + filter.Equal("quote \" this"); + + var query = new Query(AssetType("X")) { + Filter = filter + }; + var url = new QueryURLBuilder(query).ToString(); + Assert.AreEqual("Data/X?sel=&where=X.Y='quote+%22%22+this'", url); + } } }