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
11 changes: 6 additions & 5 deletions library/src/main/java/io/constructor/core/ConstructorIo.kt
Original file line number Diff line number Diff line change
Expand Up @@ -1888,9 +1888,10 @@ object ConstructorIo {
* @param term: The term to use to refine results (strategy specific)
* @param variationsMap specify which attributes within variations should be returned
* @param preFilterExpression faceting expression to scope results
* @param hiddenFields show fields that are hidden by default
*/
fun getRecommendationResults(podId: String, facets: List<Pair<String, List<String>>>? = null, numResults: Int? = null, sectionName: String? = null, itemId: String? = null, term: String? = null, variationsMap: VariationsMap? = null, preFilterExpression: String? = null): Observable<ConstructorData<RecommendationsResponse>> {
val encodedParams: ArrayList<Pair<String, String>> = getEncodedParams(numResults = numResults, sectionName = sectionName, itemId = itemId, term = term, facets = facets, variationsMap = variationsMap, preFilterExpression = preFilterExpression)
fun getRecommendationResults(podId: String, facets: List<Pair<String, List<String>>>? = null, numResults: Int? = null, sectionName: String? = null, itemId: String? = null, term: String? = null, variationsMap: VariationsMap? = null, preFilterExpression: String? = null, hiddenFields: List<String>? = null): Observable<ConstructorData<RecommendationsResponse>> {
val encodedParams: ArrayList<Pair<String, String>> = getEncodedParams(numResults = numResults, sectionName = sectionName, itemId = itemId, term = term, facets = facets, variationsMap = variationsMap, preFilterExpression = preFilterExpression, hiddenFields = hiddenFields)

return dataManager.getRecommendationResults(podId, encodedParams = encodedParams.toTypedArray())
}
Expand Down Expand Up @@ -1920,8 +1921,8 @@ object ConstructorIo {
* @param variationsMap specify which attributes within variations should be returned
* @param preFilterExpression faceting expression to scope results
*/
suspend fun getRecommendationResultsCRT(podId: String, facets: List<Pair<String, List<String>>>? = null, numResults: Int? = null, sectionName: String? = null, itemId: String? = null, term: String? = null, variationsMap: VariationsMap? = null, preFilterExpression: String? = null): RecommendationsResponse {
val encodedParams: ArrayList<Pair<String, String>> = getEncodedParams(numResults = numResults, sectionName = sectionName, itemId = itemId, term = term, facets = facets, variationsMap = variationsMap, preFilterExpression = preFilterExpression)
suspend fun getRecommendationResultsCRT(podId: String, facets: List<Pair<String, List<String>>>? = null, numResults: Int? = null, sectionName: String? = null, itemId: String? = null, term: String? = null, variationsMap: VariationsMap? = null, preFilterExpression: String? = null, hiddenFields: List<String>? = null): RecommendationsResponse {
val encodedParams: ArrayList<Pair<String, String>> = getEncodedParams(numResults = numResults, sectionName = sectionName, itemId = itemId, term = term, facets = facets, variationsMap = variationsMap, preFilterExpression = preFilterExpression, hiddenFields = hiddenFields)

return dataManager.getRecommendationResultsCRT(podId, encodedParams = encodedParams.toTypedArray())
}
Expand Down Expand Up @@ -1956,7 +1957,7 @@ object ConstructorIo {
* @param preFilterExpression faceting expression to scope results
*/
fun getRecommendationResults(request: RecommendationsRequest): Observable<ConstructorData<RecommendationsResponse>> {
val encodedParams: ArrayList<Pair<String, String>> = getEncodedParams(facets = request.filters?.toList(), itemIds = request.itemIds, term = request.term, numResults = request.numResults, sectionName = request.section, variationsMap = request.variationsMap, preFilterExpression = request.preFilterExpression)
val encodedParams: ArrayList<Pair<String, String>> = getEncodedParams(facets = request.filters?.toList(), itemIds = request.itemIds, term = request.term, numResults = request.numResults, sectionName = request.section, variationsMap = request.variationsMap, preFilterExpression = request.preFilterExpression, hiddenFields = request.hiddenFields)

return dataManager.getRecommendationResults(request.podId, encodedParams = encodedParams.toTypedArray())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class RecommendationsRequest (
val term: String? = null,
val numResults: Int? = null,
val section: String? = null,
val hiddenFields: List<String>? = null,
val variationsMap: VariationsMap? = null,
val preFilterExpression: String? = null,
) {
Expand All @@ -22,6 +23,7 @@ class RecommendationsRequest (
builder.term,
builder.numResults,
builder.section,
builder.hiddenFields,
builder.variationsMap,
builder.preFilterExpression,
)
Expand All @@ -38,6 +40,7 @@ class RecommendationsRequest (
var itemIds: List<String>? = null
var term: String? = null
var section: String? = null
var hiddenFields: List<String>? = null
var variationsMap: VariationsMap? = null
var preFilterExpression: String? = null

Expand All @@ -46,6 +49,7 @@ class RecommendationsRequest (
fun setTerm(term: String): Builder = apply { this.term = term }
fun setNumResults(numResults: Int): Builder = apply { this.numResults = numResults }
fun setSection(section: String): Builder = apply { this.section = section }
fun setHiddenFields(hiddenFields: List<String>): Builder = apply { this.hiddenFields = hiddenFields }
fun setVariationsMap(variationsMap: VariationsMap): Builder = apply { this.variationsMap = variationsMap }
fun setPreFilterExpression(preFilterExpression: String): Builder = apply { this.preFilterExpression = preFilterExpression }
fun build(): RecommendationsRequest = RecommendationsRequest(this)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,4 +253,49 @@ class ConstructorIoRecommendationsTest {
}
}
}

@Test
fun getRecommendationResultsWithHiddenFieldsUsingBuilder() {
val mockResponse = MockResponse().setResponseCode(200).setBody(TestDataLoader.loadAsString("recommendation_response.json"))
mockServer.enqueue(mockResponse)
val hiddenFields = listOf("hiddenField1", "hiddenField2")
val recommendationsRequest = RecommendationsRequest.Builder("titanic")
.setHiddenFields(hiddenFields)
.build()

val observer = constructorIo.getRecommendationResults(recommendationsRequest).test()

observer.assertComplete().assertValue {
var recommendationResponse = it.get()
recommendationResponse?.response?.results?.isNotEmpty()!!
}
observer.assertNoErrors()

val request = mockServer.takeRequest()
assertThat(request.requestUrl!!.encodedPath).isEqualTo("/recommendations/v1/pods/titanic")
with(request.requestUrl!!) {
val queryParams = mapOf(
"fmt_options[hidden_fields]" to hiddenFields,
"key" to "golden-key",
"i" to "guido-the-guid",
"ui" to "player-one",
"s" to "79",
"c" to "cioand-2.31.1",
"_dt" to "1"
)
assertThat(queryParameterNames).containsExactlyInAnyOrderElementsOf(queryParams.keys)

queryParams.forEach { (key, value) ->
if (key == "fmt_options[hidden_fields]") {
assertThat(queryParameterValues(key)).containsExactlyInAnyOrderElementsOf(
hiddenFields
)
} else if (key == "_dt") {
assertThat(queryParameter(key)).containsOnlyDigits()
} else {
assertThat(queryParameter(key)).isEqualTo(value)
}
}
}
}
}