diff --git a/library/src/main/java/io/constructor/core/ConstructorIo.kt b/library/src/main/java/io/constructor/core/ConstructorIo.kt index 5386552c..43a3ccbb 100755 --- a/library/src/main/java/io/constructor/core/ConstructorIo.kt +++ b/library/src/main/java/io/constructor/core/ConstructorIo.kt @@ -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>>? = null, numResults: Int? = null, sectionName: String? = null, itemId: String? = null, term: String? = null, variationsMap: VariationsMap? = null, preFilterExpression: String? = null): Observable> { - val encodedParams: ArrayList> = getEncodedParams(numResults = numResults, sectionName = sectionName, itemId = itemId, term = term, facets = facets, variationsMap = variationsMap, preFilterExpression = preFilterExpression) + fun getRecommendationResults(podId: String, facets: List>>? = null, numResults: Int? = null, sectionName: String? = null, itemId: String? = null, term: String? = null, variationsMap: VariationsMap? = null, preFilterExpression: String? = null, hiddenFields: List? = null): Observable> { + val encodedParams: ArrayList> = getEncodedParams(numResults = numResults, sectionName = sectionName, itemId = itemId, term = term, facets = facets, variationsMap = variationsMap, preFilterExpression = preFilterExpression, hiddenFields = hiddenFields) return dataManager.getRecommendationResults(podId, encodedParams = encodedParams.toTypedArray()) } @@ -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>>? = null, numResults: Int? = null, sectionName: String? = null, itemId: String? = null, term: String? = null, variationsMap: VariationsMap? = null, preFilterExpression: String? = null): RecommendationsResponse { - val encodedParams: ArrayList> = getEncodedParams(numResults = numResults, sectionName = sectionName, itemId = itemId, term = term, facets = facets, variationsMap = variationsMap, preFilterExpression = preFilterExpression) + suspend fun getRecommendationResultsCRT(podId: String, facets: List>>? = null, numResults: Int? = null, sectionName: String? = null, itemId: String? = null, term: String? = null, variationsMap: VariationsMap? = null, preFilterExpression: String? = null, hiddenFields: List? = null): RecommendationsResponse { + val encodedParams: ArrayList> = getEncodedParams(numResults = numResults, sectionName = sectionName, itemId = itemId, term = term, facets = facets, variationsMap = variationsMap, preFilterExpression = preFilterExpression, hiddenFields = hiddenFields) return dataManager.getRecommendationResultsCRT(podId, encodedParams = encodedParams.toTypedArray()) } @@ -1956,7 +1957,7 @@ object ConstructorIo { * @param preFilterExpression faceting expression to scope results */ fun getRecommendationResults(request: RecommendationsRequest): Observable> { - val encodedParams: ArrayList> = 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> = 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()) } diff --git a/library/src/main/java/io/constructor/data/builder/RecommendationsRequest.kt b/library/src/main/java/io/constructor/data/builder/RecommendationsRequest.kt index 69b73824..81dfa738 100644 --- a/library/src/main/java/io/constructor/data/builder/RecommendationsRequest.kt +++ b/library/src/main/java/io/constructor/data/builder/RecommendationsRequest.kt @@ -12,6 +12,7 @@ class RecommendationsRequest ( val term: String? = null, val numResults: Int? = null, val section: String? = null, + val hiddenFields: List? = null, val variationsMap: VariationsMap? = null, val preFilterExpression: String? = null, ) { @@ -22,6 +23,7 @@ class RecommendationsRequest ( builder.term, builder.numResults, builder.section, + builder.hiddenFields, builder.variationsMap, builder.preFilterExpression, ) @@ -38,6 +40,7 @@ class RecommendationsRequest ( var itemIds: List? = null var term: String? = null var section: String? = null + var hiddenFields: List? = null var variationsMap: VariationsMap? = null var preFilterExpression: String? = null @@ -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): 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) diff --git a/library/src/test/java/io/constructor/core/ConstructorIoRecommendationsTest.kt b/library/src/test/java/io/constructor/core/ConstructorIoRecommendationsTest.kt index 8ca7c2dd..609e5be5 100644 --- a/library/src/test/java/io/constructor/core/ConstructorIoRecommendationsTest.kt +++ b/library/src/test/java/io/constructor/core/ConstructorIoRecommendationsTest.kt @@ -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) + } + } + } + } }