diff --git a/src/Constructorio_NET.Tests/client/modules/RecommendationsTests.cs b/src/Constructorio_NET.Tests/client/modules/RecommendationsTests.cs index 09b30e3d..1d233ee0 100644 --- a/src/Constructorio_NET.Tests/client/modules/RecommendationsTests.cs +++ b/src/Constructorio_NET.Tests/client/modules/RecommendationsTests.cs @@ -339,6 +339,38 @@ public async Task GetRecommendationsResultsWithPreFilterExpression() Assert.IsNotNull(res.Request["pre_filter_expression"], "PreFilterExpression was passed as parameter"); } + [Test] + public async Task GetRecommendationsResultsShouldReturnResultWithHiddenFields() + { + string requestedHiddenField = "testField"; + RecommendationsRequest req = new RecommendationsRequest("item_page_1") + { + UserInfo = this.UserInfo, + ItemIds = new List { "power_drill" }, + FmtOptions = new FmtOptions { HiddenFields = new List { requestedHiddenField } } + }; + ConstructorIO constructorio = new ConstructorIO(this.Config); + RecommendationsResponse res = await constructorio.Recommendations.GetRecommendationsResults(req); + + Assert.NotNull(res.ResultId, "Result id exists"); + + // If we received at least one result, verify that the requested hidden field + // is present in the metadata of the first result. + if (res.Response.Results.Count > 0) + { + var metadata = res.Response.Results[0].Data?.Metadata; + Assert.IsNotNull(metadata, "Result metadata exists"); + Assert.IsTrue( + metadata.ContainsKey(requestedHiddenField), + "Requested hidden field is present in result metadata" + ); + Assert.IsNotNull( + metadata[requestedHiddenField], + "Requested hidden field has a non-null value in result metadata" + ); + } + } + [Test] public async Task GetRecommendationsResultsWithPreFilterExpressionJson() { diff --git a/src/Constructorio_NET.Tests/client/modules/SearchTests.cs b/src/Constructorio_NET.Tests/client/modules/SearchTests.cs index 7dfc70d1..d0c553df 100644 --- a/src/Constructorio_NET.Tests/client/modules/SearchTests.cs +++ b/src/Constructorio_NET.Tests/client/modules/SearchTests.cs @@ -73,9 +73,11 @@ public async Task GetSearchResultsShouldReturnResultWithVaritionsSlice() SearchRequest req = new SearchRequest("item1") { UserInfo = this.UserInfo }; ConstructorIO constructorio = new ConstructorIO(this.Config); SearchResponse res = await constructorio.Search.GetSearchResults(req); - string sliceAttribute = res.Response.Results[0].VariationSlice["Color"][0]; - Assert.AreEqual("Blue", sliceAttribute); + Assert.IsNotNull(res.Response.Results[0].VariationSlice, "VariationSlice should exist"); + Assert.IsTrue(res.Response.Results[0].VariationSlice.ContainsKey("Color"), "VariationSlice should contain Color key"); + Assert.Greater(res.Response.Results[0].VariationSlice["Color"].Count, 0, "Color slice should have at least one value"); + Assert.IsNotEmpty(res.Response.Results[0].VariationSlice["Color"][0], "Color slice value should not be empty"); } [Test] diff --git a/src/Constructorio_NET.Tests/models/Recommendations/RecommendationsRequestTest.cs b/src/Constructorio_NET.Tests/models/Recommendations/RecommendationsRequestTest.cs index af55362d..f7e532e2 100644 --- a/src/Constructorio_NET.Tests/models/Recommendations/RecommendationsRequestTest.cs +++ b/src/Constructorio_NET.Tests/models/Recommendations/RecommendationsRequestTest.cs @@ -86,6 +86,23 @@ public void GetRequestParametersWithVariationIds() Assert.AreEqual(this.VariationIds, requestParameters["variation_id"]); } + [Test] + public void GetRequestParametersWithFmtOptions() + { + RecommendationsRequest req = new RecommendationsRequest(this.Pod) + { + UserInfo = this.UserInfo, + FmtOptions = new FmtOptions + { + HiddenFields = new List { "inventory" }, + }, + }; + + Hashtable requestParameters = req.GetRequestParameters(); + List hiddenFields = (List)requestParameters[$"{Constants.FMT_OPTIONS}[{Constants.HIDDEN_FIELDS}]"]; + Assert.AreEqual(new List { "inventory" }, hiddenFields); + } + [Test] public void RecommendationsRequestWithInvalidPod() { diff --git a/src/constructor.io/models/Recommendations/RecommendationsRequest.cs b/src/constructor.io/models/Recommendations/RecommendationsRequest.cs index 71eef298..04a9eace 100644 --- a/src/constructor.io/models/Recommendations/RecommendationsRequest.cs +++ b/src/constructor.io/models/Recommendations/RecommendationsRequest.cs @@ -80,6 +80,11 @@ public RecommendationsRequest(string podId) /// public PreFilterExpression PreFilterExpression { get; set; } + /// + /// Gets or sets format options to control result formatting. + /// + public FmtOptions FmtOptions { get; set; } + /// /// Get request parameters. /// @@ -158,6 +163,14 @@ public Hashtable GetRequestParameters() parameters.Add(Constants.PRE_FILTER_EXPRESSION, preFilterJson); } + if (this.FmtOptions != null) + { + foreach (DictionaryEntry entry in this.FmtOptions.GetQueryParameters()) + { + parameters.Add(entry.Key, entry.Value); + } + } + return parameters; }