Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -321,5 +321,53 @@ public async Task GetRecommendationsResultsShouldReturnAResultProvidedUserInfo()
Assert.GreaterOrEqual(res.Response.Results.Count, 0, "Results exist");
Assert.NotNull(res.ResultId, "Result id exists");
}

[Test]
public async Task GetRecommendationsResultsWithPreFilterExpression()
{
ValuePreFilterExpression filterByBrand = new ValuePreFilterExpression("Brand", "XYZ");
RecommendationsRequest req = new RecommendationsRequest("filtered_items")
{
UserInfo = this.UserInfo,
PreFilterExpression = filterByBrand,
};
ConstructorIO constructorio = new ConstructorIO(this.Config);
RecommendationsResponse res = await constructorio.Recommendations.GetRecommendationsResults(req);

Assert.GreaterOrEqual(res.Response.Results.Count, 0, "Results exist");
Assert.NotNull(res.ResultId, "Result id exists");
Assert.IsNotNull(res.Request["pre_filter_expression"], "PreFilterExpression was passed as parameter");
}

[Test]
public async Task GetRecommendationsResultsWithPreFilterExpressionJson()
{
JObject preFilterExpressionJObject = JObject.Parse(
@"{
'name': 'Brand',
'value': 'XYZ'
}"
);
JsonPrefilterExpression preFilterExpression = new JsonPrefilterExpression(
preFilterExpressionJObject
);
RecommendationsRequest req = new RecommendationsRequest("filtered_items")
{
UserInfo = this.UserInfo,
PreFilterExpression = preFilterExpression,
};

ConstructorIO constructorio = new ConstructorIO(this.Config);
RecommendationsResponse res = await constructorio.Recommendations.GetRecommendationsResults(req);
res.Request.TryGetValue("pre_filter_expression", out object reqPreFilterExpression);

Assert.AreEqual(
reqPreFilterExpression,
JObject.Parse(preFilterExpression.GetExpression()),
"Pre Filter Expression is sent in request"
);
Assert.GreaterOrEqual(res.Response.Results.Count, 0, "Results exist");
Assert.NotNull(res.ResultId, "Result id exists");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,5 +91,26 @@ public void RecommendationsRequestWithInvalidPod()
{
Assert.Throws<ArgumentException>(() => new RecommendationsRequest(null));
}

[Test]
public void GetRequestParametersWithPreFilterExpression()
{
ValuePreFilterExpression filterByGroupId = new ValuePreFilterExpression("group_id", "BrandXY");
ValuePreFilterExpression filterByColor = new ValuePreFilterExpression("Color", "red");
AndPreFilterExpression preFilterExpression = new AndPreFilterExpression(
new List<PreFilterExpression> { filterByGroupId, filterByColor }
);

RecommendationsRequest req = new RecommendationsRequest(this.Pod)
{
UserInfo = this.UserInfo,
PreFilterExpression = preFilterExpression
};

Hashtable requestParameters = req.GetRequestParameters();
Assert.IsNotNull(requestParameters[Constants.PRE_FILTER_EXPRESSION]);
Assert.IsTrue(requestParameters[Constants.PRE_FILTER_EXPRESSION].ToString().Contains("group_id"));
Assert.IsTrue(requestParameters[Constants.PRE_FILTER_EXPRESSION].ToString().Contains("BrandXY"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@ public RecommendationsRequest(string podId)
/// </summary>
public VariationsMap VariationsMap { get; set; }

/// <summary>
/// Gets or sets the filtering expression used to scope recommendation results.
/// </summary>
public PreFilterExpression PreFilterExpression { get; set; }

/// <summary>
/// Get request parameters.
/// </summary>
Expand Down Expand Up @@ -147,6 +152,12 @@ public Hashtable GetRequestParameters()
parameters.Add(Constants.VARIATIONS_MAP, serializedJson);
}

if (this.PreFilterExpression != null)
{
string preFilterJson = this.PreFilterExpression.GetExpression();
parameters.Add(Constants.PRE_FILTER_EXPRESSION, preFilterJson);
}

return parameters;
}

Expand Down
Loading