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
53 changes: 39 additions & 14 deletions library/src/main/java/io/constructor/core/ConstructorIo.kt

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class BrowseItemsRequest (
val groupsSortOrder: String? = null,
val variationsMap: VariationsMap? = null,
val preFilterExpression: String? = null,
val fmtOptions: Map<String, Any>? = null,
) {
private constructor(builder: Builder) : this(
builder.ids,
Expand All @@ -34,6 +35,7 @@ class BrowseItemsRequest (
builder.groupsSortOrder,
builder.variationsMap,
builder.preFilterExpression,
builder.fmtOptions,
)

companion object {
Expand All @@ -55,6 +57,7 @@ class BrowseItemsRequest (
var groupsSortOrder: String? = null
var variationsMap: VariationsMap? = null
var preFilterExpression: String? = null
var fmtOptions: Map<String, Any>? = null

fun setFilters(facets: Map<String, List<String>>): Builder = apply { this.filters = facets }
fun setPage(page: Int): Builder = apply { this.page = page }
Expand All @@ -68,6 +71,7 @@ class BrowseItemsRequest (
fun setGroupsSortOrder(groupsSortOrder: String): Builder = apply { this.groupsSortOrder = groupsSortOrder }
fun setVariationsMap(variationsMap: VariationsMap): Builder = apply { this.variationsMap = variationsMap }
fun setPreFilterExpression(preFilterExpression: String): Builder = apply { this.preFilterExpression = preFilterExpression }
fun setFmtOptions(fmtOptions: Map<String, Any>): Builder = apply { this.fmtOptions = fmtOptions }
fun build(): BrowseItemsRequest = BrowseItemsRequest(this)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class BrowseRequest (
val groupsSortOrder: String? = null,
val variationsMap: VariationsMap? = null,
val preFilterExpression: String? = null,
val fmtOptions: Map<String, Any>? = null,
) {
private constructor(builder: Builder) : this(
builder.filterName,
Expand All @@ -36,6 +37,7 @@ class BrowseRequest (
builder.groupsSortOrder,
builder.variationsMap,
builder.preFilterExpression,
builder.fmtOptions,
)

companion object {
Expand All @@ -58,6 +60,7 @@ class BrowseRequest (
var groupsSortOrder: String? = null
var variationsMap: VariationsMap? = null
var preFilterExpression: String? = null
var fmtOptions: Map<String, Any>? = null

fun setFilters(facets: Map<String, List<String>>): Builder = apply { this.filters = facets }
fun setPage(page: Int): Builder = apply { this.page = page }
Expand All @@ -71,6 +74,7 @@ class BrowseRequest (
fun setGroupsSortOrder(groupsSortOrder: String): Builder = apply { this.groupsSortOrder = groupsSortOrder }
fun setVariationsMap(variationsMap: VariationsMap): Builder = apply { this.variationsMap = variationsMap }
fun setPreFilterExpression(preFilterExpression: String): Builder = apply { this.preFilterExpression = preFilterExpression }
fun setFmtOptions(fmtOptions: Map<String, Any>): Builder = apply { this.fmtOptions = fmtOptions }
fun build(): BrowseRequest = BrowseRequest(this)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class SearchRequest (
val groupsSortOrder: String? = null,
val variationsMap: VariationsMap? = null,
val preFilterExpression: String? = null,
val fmtOptions: Map<String, Any>? = null,
) {
private constructor(builder: Builder) : this(
builder.term,
Expand All @@ -33,7 +34,8 @@ class SearchRequest (
builder.groupsSortBy,
builder.groupsSortOrder,
builder.variationsMap,
builder.preFilterExpression
builder.preFilterExpression,
builder.fmtOptions,
)

companion object {
Expand All @@ -55,6 +57,7 @@ class SearchRequest (
var groupsSortOrder: String? = null
var variationsMap: VariationsMap? = null
var preFilterExpression: String? = null
var fmtOptions: Map<String, Any>? = null


fun setFilters(facets: Map<String, List<String>>): Builder = apply { this.filters = facets }
Expand All @@ -69,6 +72,7 @@ class SearchRequest (
fun setGroupsSortOrder(groupsSortOrder: String): Builder = apply { this.groupsSortOrder = groupsSortOrder }
fun setVariationsMap(variationsMap: VariationsMap): Builder = apply { this.variationsMap = variationsMap }
fun setPreFilterExpression(preFilterExpression: String): Builder = apply { this.preFilterExpression = preFilterExpression }
fun setFmtOptions(fmtOptions: Map<String, Any>): Builder = apply { this.fmtOptions = fmtOptions }
fun build(): SearchRequest = SearchRequest(this)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1224,6 +1224,23 @@ class ConstructorIoIntegrationTest {
Thread.sleep(timeBetweenTests)
}

@Test
fun getSearchResultsWithFmtOptionsAgainstRealResponse() {
val observer = constructorIo.getSearchResults(
term = "item1",
fmtOptions = mapOf("groups_sort_order" to "ascending", "groups_sort_by" to "value", "groups_start" to "group_id:Brands", "fields" to listOf("test", "test2"))
).test()
observer.assertComplete()
observer.assertNoErrors()

val searchResponse = observer.values()[0].get()
assertTrue(searchResponse?.resultId !== null)
assertTrue(searchResponse?.response?.groups!!.isNotEmpty())
assertEquals(searchResponse?.response?.groups?.get(0)?.displayName, "Brands")

Thread.sleep(timeBetweenTests)
}

@Test
fun getSearchResultsWithGroupsSortValueDescendingAgainstRealResponse() {
val observer = constructorIo.getSearchResults(
Expand Down Expand Up @@ -1621,6 +1638,24 @@ class ConstructorIoIntegrationTest {
Thread.sleep(timeBetweenTests)
}

@Test
fun getBrowseResultsWithFmtOptionsAgainstRealResponse() {
val observer = constructorIo.getBrowseResults(
filterName = "Brand",
filterValue = "XYZ",
fmtOptions = mapOf("groups_sort_order" to "ascending", "groups_sort_by" to "value", "groups_start" to "group_id:Brands", "fields" to listOf("test", "test2"))
).test()
observer.assertComplete()
observer.assertNoErrors()

val browseResponse = observer.values()[0].get()
assertTrue(browseResponse?.resultId !== null)
assertTrue(browseResponse?.response?.groups!!.isNotEmpty())
assertEquals(browseResponse?.response?.groups?.get(0)?.displayName, "Brands")

Thread.sleep(timeBetweenTests)
}

@Test
fun getBrowseResultsWithGroupsSortValueAscendingAgainstRealResponse() {
val observer = constructorIo.getBrowseResults(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,21 @@ class ConstructorIoBrowseItemsTest {
assert(request.path!!.startsWith(path))
}

@Test
fun getBrowseResultWithFmtOptions() {
val mockResponse = MockResponse().setResponseCode(200)
.setBody(TestDataLoader.loadAsString("browse_response.json"))
mockServer.enqueue(mockResponse)
val fmtOptions = mapOf("groups_start" to 5,"show_hidden_facets" to false, "groups_sort_order" to "ascending", "fields" to listOf(false, "test2"))
val browseItemsRequest = BrowseItemsRequest.Builder(ids)
.setFmtOptions(fmtOptions)
.build()
val observer = constructorIo.getBrowseItemsResults(browseItemsRequest).test()
val request = mockServer.takeRequest()
val path = "/browse/items?fmt_options%5Bgroups_start%5D=5&fmt_options%5Bshow_hidden_facets%5D=false&fmt_options%5Bgroups_sort_order%5D=ascending&fmt_options%5Bfields%5D=false&fmt_options%5Bfields%5D=test2&ids=10001&ids=dai_pid_2003597&key=silver-key&i=guapo-the-guid&ui=player-two&s=92&c=cioand-2.32.0&_dt="
assert(request.path!!.startsWith(path))
}

@Test
fun getBrowseItemsResultsWithVariationsMapsUsingBuilder() {
val mockResponse = MockResponse().setResponseCode(200)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,23 @@ class ConstructorIoBrowseTest {
assert(request.path!!.startsWith(path))
}

@Test
fun getBrowseResultWithFmtOptions() {
val mockResponse = MockResponse().setResponseCode(200)
.setBody(TestDataLoader.loadAsString("browse_response.json"))
mockServer.enqueue(mockResponse)
val fmtOptions = mapOf("groups_start" to 5,"show_hidden_facets" to false, "groups_sort_order" to "ascending", "fields" to listOf(false, "test2"))
val observer = constructorIo.getBrowseResults(
filterName = "group_id",
filterValue = "Beverages",
fmtOptions = fmtOptions
).test()
val request = mockServer.takeRequest()
val path =
"/browse/group_id/Beverages?fmt_options%5Bgroups_start%5D=5&fmt_options%5Bshow_hidden_facets%5D=false&fmt_options%5Bgroups_sort_order%5D=ascending&fmt_options%5Bfields%5D=false&fmt_options%5Bfields%5D=test2&key=silver-key&i=guapo-the-guid&ui=player-two&s=92&c=cioand-2.32.0&_dt="
assert(request.path!!.startsWith(path))
}

@Test
fun getBrowseResultWithPreFilterExpression() {
val mockResponse = MockResponse().setResponseCode(200)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,22 @@ class ConstructorIoSearchTest {
assert(request.path!!.startsWith(path))
}

@Test
fun getSearchResultsWithFmtOptions() {
val mockResponse = MockResponse().setResponseCode(200)
.setBody(TestDataLoader.loadAsString("search_response.json"))
mockServer.enqueue(mockResponse)
val fmtOptions = mapOf("groups_start" to 5,"show_hidden_facets" to false, "groups_sort_order" to "ascending", "fields" to listOf(false, "test2"))
val observer = constructorIo.getSearchResults(
term = "bbq",
fmtOptions = fmtOptions,
).test()
val request = mockServer.takeRequest()
val path =
"/search/bbq?fmt_options%5Bgroups_start%5D=5&fmt_options%5Bshow_hidden_facets%5D=false&fmt_options%5Bgroups_sort_order%5D=ascending&fmt_options%5Bfields%5D=false&fmt_options%5Bfields%5D=test2&key=silver-key&i=guapo-the-guid&ui=player-two&s=92&c=cioand-2.32.0&_dt="
assert(request.path!!.startsWith(path))
}

@Test
fun getSearchResultsWithFiltersUsingBuilder() {
val mockResponse = MockResponse().setResponseCode(200)
Expand Down