From bcb7b103f119ca21371b50d9f373392521626bbb Mon Sep 17 00:00:00 2001 From: cgee1 Date: Wed, 2 Dec 2020 14:20:05 -0800 Subject: [PATCH 01/10] Change method to POST --- .../java/io/constructor/data/remote/ConstructorApi.kt | 4 ++-- .../java/io/constructor/core/ConstructorIoTrackingTest.kt | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt b/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt index ba8b2e1a..cdba8e27 100755 --- a/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt +++ b/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt @@ -61,7 +61,7 @@ interface ConstructorApi { @GET fun getBrowseResults(@Url browseUrl: String): Single> - @GET(ApiPaths.URL_BROWSE_RESULT_CLICK_EVENT) + @POST(ApiPaths.URL_BROWSE_RESULT_CLICK_EVENT) fun trackBrowseResultClick(@Query("filter_name") filterName: String, @Query("filter_value") filterValue: String, @Query("customer_id") customerId: String, @@ -69,7 +69,7 @@ interface ConstructorApi { @QueryMap params: Map, @QueryMap(encoded = true) encodedData: Map): Completable - @GET(ApiPaths.URL_BROWSE_RESULT_LOAD_EVENT) + @POST(ApiPaths.URL_BROWSE_RESULT_LOAD_EVENT) fun trackBrowseResultsLoaded(@Query("filter_name") filterName: String, @Query("filter_value") filterValue: String, @Query("num_results") resultCount: Int, diff --git a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt index e279047a..7f8cc16e 100755 --- a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt +++ b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt @@ -15,6 +15,7 @@ import org.junit.Rule import org.junit.Test import java.net.SocketTimeoutException import java.util.concurrent.TimeUnit +import kotlin.test.assertEquals class ConstructorIoTest { @@ -366,6 +367,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_load?filter_name=group_id&filter_value=Movies&num_results=10&action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + assertEquals("POST", request.method) } @Test @@ -377,6 +379,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_load?filter_name=group_id&filter_value=Movies&num_results=10&action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + assertEquals("POST", request.method) } @Test @@ -389,6 +392,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_load?filter_name=group_id&filter_value=Movies&num_results=10&action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + assertEquals("POST", request.method) } @Test @@ -400,6 +404,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?filter_name=group_id&filter_value=Movies&customer_id=TIT-REP-1997&result_position_on_page=4&autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + assertEquals("POST", request.method) } @Test @@ -411,6 +416,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?filter_name=group_id&filter_value=Movies&customer_id=TIT-REP-1997&result_position_on_page=4&autocomplete_section=Products&result_id=3467632&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + assertEquals("POST", request.method) } @Test @@ -422,6 +428,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?filter_name=group_id&filter_value=Movies&customer_id=TIT-REP-1997&result_position_on_page=4&autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + assertEquals("POST", request.method) } @Test @@ -434,6 +441,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?filter_name=group_id&filter_value=Movies&customer_id=TIT-REP-1997&result_position_on_page=4&autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + assertEquals("POST", request.method) } } From aee667b446021016e520a669867f42d2d80170eb Mon Sep 17 00:00:00 2001 From: cgee1 Date: Thu, 3 Dec 2020 10:06:30 -0800 Subject: [PATCH 02/10] browse timeout tests do not timeout and still need to be fixed --- .../java/io/constructor/data/DataManager.kt | 7 ++++-- .../data/model/browse/BrowseRequestBody.kt | 13 +++++++++++ .../constructor/data/remote/ConstructorApi.kt | 10 +++----- .../core/ConstructorIoTrackingTest.kt | 23 +++++++++++++------ 4 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 library/src/main/java/io/constructor/data/model/browse/BrowseRequestBody.kt diff --git a/library/src/main/java/io/constructor/data/DataManager.kt b/library/src/main/java/io/constructor/data/DataManager.kt index 1c3c2672..66d467a1 100755 --- a/library/src/main/java/io/constructor/data/DataManager.kt +++ b/library/src/main/java/io/constructor/data/DataManager.kt @@ -4,6 +4,7 @@ import com.squareup.moshi.Moshi import io.constructor.data.model.autocomplete.AutocompleteResponse import io.constructor.data.model.search.SearchResponse import io.constructor.data.model.browse.BrowseResponse +import io.constructor.data.model.browse.BrowseRequestBody import io.constructor.data.remote.ApiPaths import io.constructor.data.remote.ConstructorApi import io.reactivex.Completable @@ -116,11 +117,13 @@ constructor(private val constructorApi: ConstructorApi, private val moshi: Moshi } fun trackBrowseResultClick(filterName: String, filterValue: String, customerId: String, resultPositionOnPage: Int, params: Array> = arrayOf(), encodedParams: Array> = arrayOf()): Completable { - return constructorApi.trackBrowseResultClick(filterName, filterValue, customerId, resultPositionOnPage, params.toMap(), encodedParams.toMap()) + val browseRequestBody = BrowseRequestBody(filterName, filterValue, null, customerId, resultPositionOnPage) + return constructorApi.trackBrowseResultClick(browseRequestBody, params.toMap(), encodedParams.toMap()) } fun trackBrowseResultsLoaded(filterName: String, filterValue: String, resultCount: Int, params: Array>): Completable { - return constructorApi.trackBrowseResultsLoaded(filterName, filterValue, resultCount, params.toMap()) + val browseRequestBody = BrowseRequestBody(filterName, filterValue, resultCount, null, null) + return constructorApi.trackBrowseResultsLoaded(browseRequestBody, params.toMap()) } } \ No newline at end of file diff --git a/library/src/main/java/io/constructor/data/model/browse/BrowseRequestBody.kt b/library/src/main/java/io/constructor/data/model/browse/BrowseRequestBody.kt new file mode 100644 index 00000000..5c67a8d2 --- /dev/null +++ b/library/src/main/java/io/constructor/data/model/browse/BrowseRequestBody.kt @@ -0,0 +1,13 @@ +package io.constructor.data.model.browse + +import com.squareup.moshi.Json +import io.constructor.data.model.common.*; +import java.io.Serializable + +data class BrowseRequestBody( + @Json(name = "filter_name") val filterName: String?, + @Json(name = "filter_value") val filterValue: String?, + @Json(name = "result_count") val resultCount: Int?, + @Json(name = "customer_id") val customerId: String?, + @Json(name = "result_position_on_page") val resultPositionOnPage: Int? +) : Serializable \ No newline at end of file diff --git a/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt b/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt index cdba8e27..09a68a01 100755 --- a/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt +++ b/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt @@ -2,6 +2,7 @@ package io.constructor.data.remote import io.constructor.core.Constants import io.constructor.data.model.autocomplete.AutocompleteResponse +import io.constructor.data.model.browse.BrowseRequestBody import io.reactivex.Completable import io.reactivex.Single import okhttp3.ResponseBody @@ -62,17 +63,12 @@ interface ConstructorApi { fun getBrowseResults(@Url browseUrl: String): Single> @POST(ApiPaths.URL_BROWSE_RESULT_CLICK_EVENT) - fun trackBrowseResultClick(@Query("filter_name") filterName: String, - @Query("filter_value") filterValue: String, - @Query("customer_id") customerId: String, - @Query("result_position_on_page") resultPositionOnPage: Int, + fun trackBrowseResultClick(@Body browseRequestBody: BrowseRequestBody, @QueryMap params: Map, @QueryMap(encoded = true) encodedData: Map): Completable @POST(ApiPaths.URL_BROWSE_RESULT_LOAD_EVENT) - fun trackBrowseResultsLoaded(@Query("filter_name") filterName: String, - @Query("filter_value") filterValue: String, - @Query("num_results") resultCount: Int, + fun trackBrowseResultsLoaded(@Body browseRequestBody: BrowseRequestBody, @QueryMap params: Map): Completable } \ No newline at end of file diff --git a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt index 7f8cc16e..5a0d12ee 100755 --- a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt +++ b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt @@ -16,6 +16,7 @@ import org.junit.Test import java.net.SocketTimeoutException import java.util.concurrent.TimeUnit import kotlin.test.assertEquals +import kotlin.test.assertNotNull class ConstructorIoTest { @@ -356,6 +357,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/autocomplete/TERM_UNKNOWN/purchase?customer_ids=TIT-REP-1997&customer_ids=QE2-REP-1969&revenue=12.99&order_id=ORD-1312343&autocomplete_section=Recommendations&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + print(request.body) } @Test @@ -365,7 +367,8 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultsLoadedInternal("group_id", "Movies", 10).test() observer.assertComplete() val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_load?filter_name=group_id&filter_value=Movies&num_results=10&action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + assertEquals(68, request.bodySize) assert(request.path.startsWith(path)) assertEquals("POST", request.method) } @@ -377,7 +380,8 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultsLoadedInternal("group_id", "Movies", 10).test() observer.assertError { true } val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_load?filter_name=group_id&filter_value=Movies&num_results=10&action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + assertEquals(68, request.bodySize) assert(request.path.startsWith(path)) assertEquals("POST", request.method) } @@ -390,7 +394,8 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultsLoadedInternal("group_id", "Movies", 10).test() observer.assertError(SocketTimeoutException::class.java) val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_load?filter_name=group_id&filter_value=Movies&num_results=10&action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + assertEquals(68, request.bodySize) assert(request.path.startsWith(path)) assertEquals("POST", request.method) } @@ -402,8 +407,9 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultClickInternal("group_id", "Movies","TIT-REP-1997", 4).test() observer.assertComplete() val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_click?filter_name=group_id&filter_value=Movies&customer_id=TIT-REP-1997&result_position_on_page=4&autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + assertEquals(107, request.bodySize) assertEquals("POST", request.method) } @@ -414,8 +420,9 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultClickInternal("group_id", "Movies","TIT-REP-1997", 4, "Products", "3467632").test() observer.assertComplete() val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_click?filter_name=group_id&filter_value=Movies&customer_id=TIT-REP-1997&result_position_on_page=4&autocomplete_section=Products&result_id=3467632&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&result_id=3467632&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + assertEquals(107, request.bodySize) assertEquals("POST", request.method) } @@ -426,8 +433,9 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultClickInternal("group_id", "Movies","TIT-REP-1997", 4).test() observer.assertError { true } val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_click?filter_name=group_id&filter_value=Movies&customer_id=TIT-REP-1997&result_position_on_page=4&autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + assertEquals(107, request.bodySize) assertEquals("POST", request.method) } @@ -439,8 +447,9 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultClickInternal("group_id", "Movies","TIT-REP-1997", 4).test() observer.assertError(SocketTimeoutException::class.java) val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_click?filter_name=group_id&filter_value=Movies&customer_id=TIT-REP-1997&result_position_on_page=4&autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) + assertEquals(107, request.bodySize) assertEquals("POST", request.method) } From 641e4e19bb703d5b60193da99086e460940a10ed Mon Sep 17 00:00:00 2001 From: cgee1 Date: Thu, 3 Dec 2020 14:12:09 -0800 Subject: [PATCH 03/10] Update tests --- .../constructor/core/ConstructorIoTrackingTest.kt | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt index 5a0d12ee..baa98d5c 100755 --- a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt +++ b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt @@ -393,11 +393,8 @@ class ConstructorIoTest { mockServer.enqueue(mockResponse) val observer = ConstructorIo.trackBrowseResultsLoadedInternal("group_id", "Movies", 10).test() observer.assertError(SocketTimeoutException::class.java) - val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; - assertEquals(68, request.bodySize) - assert(request.path.startsWith(path)) - assertEquals("POST", request.method) + val request = mockServer.takeRequest(10, TimeUnit.SECONDS) + assertEquals(null, request) } @Test @@ -446,11 +443,8 @@ class ConstructorIoTest { mockServer.enqueue(mockResponse) val observer = ConstructorIo.trackBrowseResultClickInternal("group_id", "Movies","TIT-REP-1997", 4).test() observer.assertError(SocketTimeoutException::class.java) - val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; - assert(request.path.startsWith(path)) - assertEquals(107, request.bodySize) - assertEquals("POST", request.method) + val request = mockServer.takeRequest(10, TimeUnit.SECONDS) + assertEquals(null, request) } } From e88452984753530ba15f63fb8208725106450b49 Mon Sep 17 00:00:00 2001 From: cgee1 Date: Thu, 3 Dec 2020 14:26:57 -0800 Subject: [PATCH 04/10] Lint --- .../io/constructor/data/model/browse/BrowseRequestBody.kt | 4 ++-- .../java/io/constructor/core/ConstructorIoTrackingTest.kt | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/library/src/main/java/io/constructor/data/model/browse/BrowseRequestBody.kt b/library/src/main/java/io/constructor/data/model/browse/BrowseRequestBody.kt index 5c67a8d2..e993b933 100644 --- a/library/src/main/java/io/constructor/data/model/browse/BrowseRequestBody.kt +++ b/library/src/main/java/io/constructor/data/model/browse/BrowseRequestBody.kt @@ -5,8 +5,8 @@ import io.constructor.data.model.common.*; import java.io.Serializable data class BrowseRequestBody( - @Json(name = "filter_name") val filterName: String?, - @Json(name = "filter_value") val filterValue: String?, + @Json(name = "filter_name") val filterName: String, + @Json(name = "filter_value") val filterValue: String, @Json(name = "result_count") val resultCount: Int?, @Json(name = "customer_id") val customerId: String?, @Json(name = "result_position_on_page") val resultPositionOnPage: Int? diff --git a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt index baa98d5c..db35f8d4 100755 --- a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt +++ b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt @@ -16,7 +16,6 @@ import org.junit.Test import java.net.SocketTimeoutException import java.util.concurrent.TimeUnit import kotlin.test.assertEquals -import kotlin.test.assertNotNull class ConstructorIoTest { @@ -357,7 +356,6 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/autocomplete/TERM_UNKNOWN/purchase?customer_ids=TIT-REP-1997&customer_ids=QE2-REP-1969&revenue=12.99&order_id=ORD-1312343&autocomplete_section=Recommendations&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; assert(request.path.startsWith(path)) - print(request.body) } @Test @@ -368,8 +366,8 @@ class ConstructorIoTest { observer.assertComplete() val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; - assertEquals(68, request.bodySize) assert(request.path.startsWith(path)) + assertEquals(68, request.bodySize) assertEquals("POST", request.method) } @@ -381,8 +379,8 @@ class ConstructorIoTest { observer.assertError { true } val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; - assertEquals(68, request.bodySize) assert(request.path.startsWith(path)) + assertEquals(68, request.bodySize) assertEquals("POST", request.method) } From c6b0dfeb29f6f59c9893de044d05f06df07a3de7 Mon Sep 17 00:00:00 2001 From: cgee1 Date: Thu, 3 Dec 2020 14:51:09 -0800 Subject: [PATCH 05/10] Update tests --- .../io/constructor/core/ConstructorIoTrackingTest.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt index 0ecf4d77..60fe047a 100755 --- a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt +++ b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt @@ -366,7 +366,7 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultsLoadedInternal("group_id", "Movies", 10).test() observer.assertComplete() val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt=" assert(request.path.startsWith(path)) assertEquals(68, request.bodySize) assertEquals("POST", request.method) @@ -379,7 +379,7 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultsLoadedInternal("group_id", "Movies", 10).test() observer.assertError { true } val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt=" assert(request.path.startsWith(path)) assertEquals(68, request.bodySize) assertEquals("POST", request.method) @@ -403,7 +403,7 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultClickInternal("group_id", "Movies","TIT-REP-1997", 4).test() observer.assertComplete() val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; assert(request.path.startsWith(path)) assertEquals(107, request.bodySize) assertEquals("POST", request.method) @@ -416,7 +416,7 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultClickInternal("group_id", "Movies","TIT-REP-1997", 4, "Products", "3467632").test() observer.assertComplete() val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&result_id=3467632&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&result_id=3467632&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; assert(request.path.startsWith(path)) assertEquals(107, request.bodySize) assertEquals("POST", request.method) @@ -429,7 +429,7 @@ class ConstructorIoTest { val observer = ConstructorIo.trackBrowseResultClickInternal("group_id", "Movies","TIT-REP-1997", 4).test() observer.assertError { true } val request = mockServer.takeRequest() - val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.0&_dt="; + val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; assert(request.path.startsWith(path)) assertEquals(107, request.bodySize) assertEquals("POST", request.method) From 11ad7fa5ef3f9d11bace95e79d9a7a321d76ddc7 Mon Sep 17 00:00:00 2001 From: cgee1 Date: Thu, 10 Dec 2020 13:49:10 -0800 Subject: [PATCH 06/10] PR comment revisions --- .../src/main/java/io/constructor/data/DataManager.kt | 7 ++++--- ...RequestBody.kt => BrowseResultClickRequestBody.kt} | 3 +-- .../data/model/browse/BrowseResultLoadRequestBody.kt | 11 +++++++++++ .../java/io/constructor/data/remote/ConstructorApi.kt | 7 ++++--- 4 files changed, 20 insertions(+), 8 deletions(-) rename library/src/main/java/io/constructor/data/model/browse/{BrowseRequestBody.kt => BrowseResultClickRequestBody.kt} (82%) create mode 100644 library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt diff --git a/library/src/main/java/io/constructor/data/DataManager.kt b/library/src/main/java/io/constructor/data/DataManager.kt index 89156620..71180c6d 100755 --- a/library/src/main/java/io/constructor/data/DataManager.kt +++ b/library/src/main/java/io/constructor/data/DataManager.kt @@ -4,7 +4,8 @@ import com.squareup.moshi.Moshi import io.constructor.data.model.autocomplete.AutocompleteResponse import io.constructor.data.model.search.SearchResponse import io.constructor.data.model.browse.BrowseResponse -import io.constructor.data.model.browse.BrowseRequestBody +import io.constructor.data.model.browse.BrowseResultClickRequestBody +import io.constructor.data.model.browse.BrowseResultLoadRequestBody import io.constructor.data.remote.ApiPaths import io.constructor.data.remote.ConstructorApi import io.reactivex.Completable @@ -117,12 +118,12 @@ constructor(private val constructorApi: ConstructorApi, private val moshi: Moshi } fun trackBrowseResultClick(filterName: String, filterValue: String, customerId: String, resultPositionOnPage: Int, params: Array> = arrayOf(), encodedParams: Array> = arrayOf()): Completable { - val browseRequestBody = BrowseRequestBody(filterName, filterValue, null, customerId, resultPositionOnPage) + val browseRequestBody = BrowseResultClickRequestBody(filterName, filterValue, customerId, resultPositionOnPage) return constructorApi.trackBrowseResultClick(browseRequestBody, params.toMap(), encodedParams.toMap()) } fun trackBrowseResultsLoaded(filterName: String, filterValue: String, resultCount: Int, params: Array>): Completable { - val browseRequestBody = BrowseRequestBody(filterName, filterValue, resultCount, null, null) + val browseRequestBody = BrowseResultLoadRequestBody(filterName, filterValue, resultCount) return constructorApi.trackBrowseResultsLoaded(browseRequestBody, params.toMap()) } diff --git a/library/src/main/java/io/constructor/data/model/browse/BrowseRequestBody.kt b/library/src/main/java/io/constructor/data/model/browse/BrowseResultClickRequestBody.kt similarity index 82% rename from library/src/main/java/io/constructor/data/model/browse/BrowseRequestBody.kt rename to library/src/main/java/io/constructor/data/model/browse/BrowseResultClickRequestBody.kt index e993b933..1d4f3514 100644 --- a/library/src/main/java/io/constructor/data/model/browse/BrowseRequestBody.kt +++ b/library/src/main/java/io/constructor/data/model/browse/BrowseResultClickRequestBody.kt @@ -4,10 +4,9 @@ import com.squareup.moshi.Json import io.constructor.data.model.common.*; import java.io.Serializable -data class BrowseRequestBody( +data class BrowseResultClickRequestBody( @Json(name = "filter_name") val filterName: String, @Json(name = "filter_value") val filterValue: String, - @Json(name = "result_count") val resultCount: Int?, @Json(name = "customer_id") val customerId: String?, @Json(name = "result_position_on_page") val resultPositionOnPage: Int? ) : Serializable \ No newline at end of file diff --git a/library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt b/library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt new file mode 100644 index 00000000..33678dd7 --- /dev/null +++ b/library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt @@ -0,0 +1,11 @@ +package io.constructor.data.model.browse + +import com.squareup.moshi.Json +import io.constructor.data.model.common.*; +import java.io.Serializable + +data class BrowseResultLoadRequestBody( + @Json(name = "filter_name") val filterName: String, + @Json(name = "filter_value") val filterValue: String, + @Json(name = "result_count") val resultCount: Int? +) : Serializable \ No newline at end of file diff --git a/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt b/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt index 09a68a01..0150459c 100755 --- a/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt +++ b/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt @@ -2,7 +2,8 @@ package io.constructor.data.remote import io.constructor.core.Constants import io.constructor.data.model.autocomplete.AutocompleteResponse -import io.constructor.data.model.browse.BrowseRequestBody +import io.constructor.data.model.browse.BrowseResultClickRequestBody +import io.constructor.data.model.browse.BrowseResultLoadRequestBody import io.reactivex.Completable import io.reactivex.Single import okhttp3.ResponseBody @@ -63,12 +64,12 @@ interface ConstructorApi { fun getBrowseResults(@Url browseUrl: String): Single> @POST(ApiPaths.URL_BROWSE_RESULT_CLICK_EVENT) - fun trackBrowseResultClick(@Body browseRequestBody: BrowseRequestBody, + fun trackBrowseResultClick(@Body browseResultClickRequestBody: BrowseResultClickRequestBody, @QueryMap params: Map, @QueryMap(encoded = true) encodedData: Map): Completable @POST(ApiPaths.URL_BROWSE_RESULT_LOAD_EVENT) - fun trackBrowseResultsLoaded(@Body browseRequestBody: BrowseRequestBody, + fun trackBrowseResultsLoaded(@Body browseRequestBody: BrowseResultLoadRequestBody, @QueryMap params: Map): Completable } \ No newline at end of file From c7f1626c1a6c4fad2001472f7c49ed181aec9928 Mon Sep 17 00:00:00 2001 From: cgee1 Date: Mon, 14 Dec 2020 15:29:40 -0800 Subject: [PATCH 07/10] Add params to request body --- .../java/io/constructor/core/Constants.kt | 4 ++ .../java/io/constructor/core/ConstructorIo.kt | 41 ++++++++++++++-- .../java/io/constructor/data/DataManager.kt | 47 ++++++++++++++++--- .../browse/BrowseResultClickRequestBody.kt | 17 +++++-- .../browse/BrowseResultLoadRequestBody.kt | 15 ++++-- .../constructor/data/remote/ConstructorApi.kt | 2 +- .../core/ConstructorIoTrackingTest.kt | 10 ++-- 7 files changed, 112 insertions(+), 24 deletions(-) diff --git a/library/src/main/java/io/constructor/core/Constants.kt b/library/src/main/java/io/constructor/core/Constants.kt index 3ce0e588..77b4ea54 100755 --- a/library/src/main/java/io/constructor/core/Constants.kt +++ b/library/src/main/java/io/constructor/core/Constants.kt @@ -35,6 +35,10 @@ class Constants { const val FILTER_GROUP_ID = "filters[group_id]" const val FILTER_FACET = "filters[%s]" const val RESULT_ID = "result_id" + const val FILTER_NAME = "filter_name" + const val FILTER_VALUE = "filter_value" + const val RESULT_POSITION_ON_PAGE = "result_position_on_page" + const val RESULT_COUNT = "result_count" } object QueryValues { diff --git a/library/src/main/java/io/constructor/core/ConstructorIo.kt b/library/src/main/java/io/constructor/core/ConstructorIo.kt index 47289e0a..fa0b2690 100755 --- a/library/src/main/java/io/constructor/core/ConstructorIo.kt +++ b/library/src/main/java/io/constructor/core/ConstructorIo.kt @@ -2,6 +2,7 @@ package io.constructor.core import android.annotation.SuppressLint import android.content.Context +import io.constructor.BuildConfig import io.constructor.data.ConstructorData import io.constructor.data.DataManager import io.constructor.data.local.PreferencesHelper @@ -352,11 +353,26 @@ object ConstructorIo { t -> e("Browse Results Loaded error: ${t.message}") })) } - internal fun trackBrowseResultsLoadedInternal(filterName: String, filterValue: String, resultCount: Int): Completable { + internal fun trackBrowseResultsLoadedInternal(filterName: String?, filterValue: String?, resultCount: Int?): Completable { preferenceHelper.getSessionId(sessionIncrementHandler) - return dataManager.trackBrowseResultsLoaded(filterName, filterValue, resultCount, arrayOf( - Constants.QueryConstants.ACTION to Constants.QueryValues.EVENT_BROWSE_RESULTS - )) + return dataManager.trackBrowseResultsLoaded( + arrayOf( + Constants.QueryConstants.FILTER_NAME to filterName, + Constants.QueryConstants.FILTER_VALUE to filterValue, + Constants.QueryConstants.CLIENT to BuildConfig.CLIENT_VERSION, + Constants.QueryConstants.IDENTITY to preferenceHelper.id, + Constants.QueryConstants.USER_ID to configMemoryHolder.userId, + Constants.QueryConstants.API_KEY to preferenceHelper.apiKey + ), + arrayOf( + Constants.QueryConstants.SESSION to preferenceHelper.getSessionId(), + Constants.QueryConstants.RESULT_COUNT to resultCount + ), + configMemoryHolder.segments, + arrayOf( + Constants.QueryConstants.ACTION to Constants.QueryValues.EVENT_BROWSE_RESULTS + ) + ) } /** @@ -378,7 +394,22 @@ object ConstructorIo { val encodedParams: ArrayList> = arrayListOf() resultID?.let { encodedParams.add(Constants.QueryConstants.RESULT_ID.urlEncode() to it.urlEncode()) } val sName = sectionName ?: preferenceHelper.defaultItemSection - return dataManager.trackBrowseResultClick(filterName, filterValue, customerId, resultPositionOnPage, arrayOf( + return dataManager.trackBrowseResultClick( + arrayOf( + Constants.QueryConstants.FILTER_NAME to filterName, + Constants.QueryConstants.FILTER_VALUE to filterValue, + Constants.QueryConstants.CUSTOMER_ID to customerId, + Constants.QueryConstants.CLIENT to BuildConfig.CLIENT_VERSION, + Constants.QueryConstants.IDENTITY to preferenceHelper.id, + Constants.QueryConstants.USER_ID to configMemoryHolder.userId, + Constants.QueryConstants.API_KEY to preferenceHelper.apiKey + ), + arrayOf( + Constants.QueryConstants.SESSION to preferenceHelper.getSessionId(), + Constants.QueryConstants.RESULT_POSITION_ON_PAGE to resultPositionOnPage + ), + configMemoryHolder.segments, + arrayOf( Constants.QueryConstants.AUTOCOMPLETE_SECTION to sName ), encodedParams.toTypedArray()) diff --git a/library/src/main/java/io/constructor/data/DataManager.kt b/library/src/main/java/io/constructor/data/DataManager.kt index 71180c6d..f857b5c8 100755 --- a/library/src/main/java/io/constructor/data/DataManager.kt +++ b/library/src/main/java/io/constructor/data/DataManager.kt @@ -117,14 +117,49 @@ constructor(private val constructorApi: ConstructorApi, private val moshi: Moshi }.toObservable() } - fun trackBrowseResultClick(filterName: String, filterValue: String, customerId: String, resultPositionOnPage: Int, params: Array> = arrayOf(), encodedParams: Array> = arrayOf()): Completable { - val browseRequestBody = BrowseResultClickRequestBody(filterName, filterValue, customerId, resultPositionOnPage) - return constructorApi.trackBrowseResultClick(browseRequestBody, params.toMap(), encodedParams.toMap()) + fun trackBrowseResultsLoaded(requestBodyStringParams: Array>, requestBodyIntParams: Array>, segments: List, params: Array>): Completable { + val requestBodyStringParamsMap = requestBodyStringParams.toMap() + val requestBodyIntParamsMap = requestBodyIntParams.toMap() + val urlParamsMap = params.toMap() + + val browseRequestBody = BrowseResultLoadRequestBody( + requestBodyStringParamsMap["filter_name"], + requestBodyStringParamsMap["filter_value"], + requestBodyIntParamsMap["result_count"], + requestBodyStringParamsMap["c"], + requestBodyStringParamsMap["i"], + requestBodyIntParamsMap["s"], + requestBodyStringParamsMap["ui"], + segments, + requestBodyStringParamsMap["key"], + true, + urlParamsMap["autocomplete_section"], + System.currentTimeMillis().toInt() + ) + return constructorApi.trackBrowseResultsLoaded(browseRequestBody, urlParamsMap) } - fun trackBrowseResultsLoaded(filterName: String, filterValue: String, resultCount: Int, params: Array>): Completable { - val browseRequestBody = BrowseResultLoadRequestBody(filterName, filterValue, resultCount) - return constructorApi.trackBrowseResultsLoaded(browseRequestBody, params.toMap()) + fun trackBrowseResultClick(requestBodyStringParams: Array>, requestBodyIntParams: Array>, segments: List, params: Array> = arrayOf(), encodedParams: Array> = arrayOf()): Completable { + val requestBodyStringParamsMap = requestBodyStringParams.toMap() + val requestBodyIntParamsMap = requestBodyIntParams.toMap() + val urlParamsMap = params.toMap() + + val browseRequestBody = BrowseResultClickRequestBody( + requestBodyStringParamsMap["filter_name"], + requestBodyStringParamsMap["filter_value"], + requestBodyStringParamsMap["customer_id"], + requestBodyIntParamsMap["result_position_on_page"], + requestBodyStringParamsMap["c"], + requestBodyStringParamsMap["i"], + requestBodyIntParamsMap["s"], + requestBodyStringParamsMap["ui"], + segments, + requestBodyStringParamsMap["key"], + true, + urlParamsMap["autocomplete_section"], + System.currentTimeMillis().toInt() + ) + return constructorApi.trackBrowseResultClick(browseRequestBody, urlParamsMap, encodedParams.toMap()) } } \ No newline at end of file diff --git a/library/src/main/java/io/constructor/data/model/browse/BrowseResultClickRequestBody.kt b/library/src/main/java/io/constructor/data/model/browse/BrowseResultClickRequestBody.kt index 1d4f3514..cf4f268b 100644 --- a/library/src/main/java/io/constructor/data/model/browse/BrowseResultClickRequestBody.kt +++ b/library/src/main/java/io/constructor/data/model/browse/BrowseResultClickRequestBody.kt @@ -5,8 +5,17 @@ import io.constructor.data.model.common.*; import java.io.Serializable data class BrowseResultClickRequestBody( - @Json(name = "filter_name") val filterName: String, - @Json(name = "filter_value") val filterValue: String, - @Json(name = "customer_id") val customerId: String?, - @Json(name = "result_position_on_page") val resultPositionOnPage: Int? + @Json(name = "filter_name") val filterName: String?, + @Json(name = "filter_value") val filterValue: String?, + @Json(name = "item_id") val item_id: String?, + @Json(name = "result_position_on_page") val resultPositionOnPage: Int?, + @Json(name = "c") val c: String?, + @Json(name = "i") val i: String?, + @Json(name = "s") val s: Int?, + @Json(name = "ui") val ui: String?, + @Json(name = "us") val us: List, + @Json(name = "key") val key: String?, + @Json(name= "beacon") val beacon: Boolean?, + @Json(name= "autocomplete_section") val autocomplete_section: String?, + @Json(name= "_dt") val _dt: Int? ) : Serializable \ No newline at end of file diff --git a/library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt b/library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt index 33678dd7..362be7ec 100644 --- a/library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt +++ b/library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt @@ -5,7 +5,16 @@ import io.constructor.data.model.common.*; import java.io.Serializable data class BrowseResultLoadRequestBody( - @Json(name = "filter_name") val filterName: String, - @Json(name = "filter_value") val filterValue: String, - @Json(name = "result_count") val resultCount: Int? + @Json(name = "filter_name") val filterName: String?, + @Json(name = "filter_value") val filterValue: String?, + @Json(name = "result_count") val resultCount: Int?, + @Json(name = "c") val c: String?, + @Json(name = "i") val i: String?, + @Json(name = "s") val s: Int?, + @Json(name = "ui") val ui: String?, + @Json(name = "us") val us: List, + @Json(name = "key") val key: String?, + @Json(name= "beacon") val beacon: Boolean?, + @Json(name= "autocomplete_section") val autocomplete_section: String?, + @Json(name= "_dt") val _dt: Int? ) : Serializable \ No newline at end of file diff --git a/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt b/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt index 0150459c..f218df48 100755 --- a/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt +++ b/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt @@ -65,7 +65,7 @@ interface ConstructorApi { @POST(ApiPaths.URL_BROWSE_RESULT_CLICK_EVENT) fun trackBrowseResultClick(@Body browseResultClickRequestBody: BrowseResultClickRequestBody, - @QueryMap params: Map, + @QueryMap params: Map, @QueryMap(encoded = true) encodedData: Map): Completable @POST(ApiPaths.URL_BROWSE_RESULT_LOAD_EVENT) diff --git a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt index 60fe047a..9aae0a7e 100755 --- a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt +++ b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt @@ -368,7 +368,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt=" assert(request.path.startsWith(path)) - assertEquals(68, request.bodySize) + assertEquals(193, request.bodySize) assertEquals("POST", request.method) } @@ -381,7 +381,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt=" assert(request.path.startsWith(path)) - assertEquals(68, request.bodySize) + assertEquals(193, request.bodySize) assertEquals("POST", request.method) } @@ -405,7 +405,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; assert(request.path.startsWith(path)) - assertEquals(107, request.bodySize) + assertEquals(237, request.bodySize) assertEquals("POST", request.method) } @@ -418,7 +418,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&result_id=3467632&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; assert(request.path.startsWith(path)) - assertEquals(107, request.bodySize) + assertEquals(237, request.bodySize) assertEquals("POST", request.method) } @@ -431,7 +431,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; assert(request.path.startsWith(path)) - assertEquals(107, request.bodySize) + assertEquals(237, request.bodySize) assertEquals("POST", request.method) } From 29f1c85f042e7b8ba66f9659be11e58b8be5ea4f Mon Sep 17 00:00:00 2001 From: cgee1 Date: Mon, 14 Dec 2020 16:03:45 -0800 Subject: [PATCH 08/10] Lint --- library/src/main/java/io/constructor/core/ConstructorIo.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/io/constructor/core/ConstructorIo.kt b/library/src/main/java/io/constructor/core/ConstructorIo.kt index fa0b2690..3117875a 100755 --- a/library/src/main/java/io/constructor/core/ConstructorIo.kt +++ b/library/src/main/java/io/constructor/core/ConstructorIo.kt @@ -410,8 +410,8 @@ object ConstructorIo { ), configMemoryHolder.segments, arrayOf( - Constants.QueryConstants.AUTOCOMPLETE_SECTION to sName - ), encodedParams.toTypedArray()) + Constants.QueryConstants.AUTOCOMPLETE_SECTION to sName + ), encodedParams.toTypedArray()) } From ed494a4294755d0e0917156b40ecec15faa664ba Mon Sep 17 00:00:00 2001 From: cgee1 Date: Wed, 16 Dec 2020 14:15:11 -0800 Subject: [PATCH 09/10] Create browsebody in constructorio.kt --- .../java/io/constructor/core/ConstructorIo.kt | 65 +++++++++++-------- .../java/io/constructor/data/DataManager.kt | 45 ++----------- .../core/ConstructorIoTrackingTest.kt | 12 ++-- 3 files changed, 48 insertions(+), 74 deletions(-) diff --git a/library/src/main/java/io/constructor/core/ConstructorIo.kt b/library/src/main/java/io/constructor/core/ConstructorIo.kt index 3117875a..6a0e6c2f 100755 --- a/library/src/main/java/io/constructor/core/ConstructorIo.kt +++ b/library/src/main/java/io/constructor/core/ConstructorIo.kt @@ -11,6 +11,8 @@ import io.constructor.data.model.autocomplete.AutocompleteResponse import io.constructor.data.model.common.ResultGroup import io.constructor.data.model.search.SearchResponse import io.constructor.data.model.browse.BrowseResponse +import io.constructor.data.model.browse.BrowseResultClickRequestBody +import io.constructor.data.model.browse.BrowseResultLoadRequestBody import io.constructor.injection.component.AppComponent import io.constructor.injection.component.DaggerAppComponent import io.constructor.injection.module.AppModule @@ -355,20 +357,23 @@ object ConstructorIo { } internal fun trackBrowseResultsLoadedInternal(filterName: String?, filterValue: String?, resultCount: Int?): Completable { preferenceHelper.getSessionId(sessionIncrementHandler) - return dataManager.trackBrowseResultsLoaded( - arrayOf( - Constants.QueryConstants.FILTER_NAME to filterName, - Constants.QueryConstants.FILTER_VALUE to filterValue, - Constants.QueryConstants.CLIENT to BuildConfig.CLIENT_VERSION, - Constants.QueryConstants.IDENTITY to preferenceHelper.id, - Constants.QueryConstants.USER_ID to configMemoryHolder.userId, - Constants.QueryConstants.API_KEY to preferenceHelper.apiKey - ), - arrayOf( - Constants.QueryConstants.SESSION to preferenceHelper.getSessionId(), - Constants.QueryConstants.RESULT_COUNT to resultCount - ), + val browseResultLoadRequestBody = BrowseResultLoadRequestBody( + filterName, + filterValue, + resultCount, + BuildConfig.CLIENT_VERSION, + preferenceHelper.id, + preferenceHelper.getSessionId(), + configMemoryHolder.userId, configMemoryHolder.segments, + preferenceHelper.apiKey, + true, + preferenceHelper.defaultItemSection, + System.currentTimeMillis().toInt() + ) + + return dataManager.trackBrowseResultsLoaded( + browseResultLoadRequestBody, arrayOf( Constants.QueryConstants.ACTION to Constants.QueryValues.EVENT_BROWSE_RESULTS ) @@ -394,24 +399,28 @@ object ConstructorIo { val encodedParams: ArrayList> = arrayListOf() resultID?.let { encodedParams.add(Constants.QueryConstants.RESULT_ID.urlEncode() to it.urlEncode()) } val sName = sectionName ?: preferenceHelper.defaultItemSection - return dataManager.trackBrowseResultClick( - arrayOf( - Constants.QueryConstants.FILTER_NAME to filterName, - Constants.QueryConstants.FILTER_VALUE to filterValue, - Constants.QueryConstants.CUSTOMER_ID to customerId, - Constants.QueryConstants.CLIENT to BuildConfig.CLIENT_VERSION, - Constants.QueryConstants.IDENTITY to preferenceHelper.id, - Constants.QueryConstants.USER_ID to configMemoryHolder.userId, - Constants.QueryConstants.API_KEY to preferenceHelper.apiKey - ), - arrayOf( - Constants.QueryConstants.SESSION to preferenceHelper.getSessionId(), - Constants.QueryConstants.RESULT_POSITION_ON_PAGE to resultPositionOnPage - ), + val browseResultClickRequestBody = BrowseResultClickRequestBody( + filterName, + filterValue, + customerId, + resultPositionOnPage, + BuildConfig.CLIENT_VERSION, + preferenceHelper.id, + preferenceHelper.getSessionId(), + configMemoryHolder.userId, configMemoryHolder.segments, + preferenceHelper.apiKey, + true, + sName, + System.currentTimeMillis().toInt() + ) + + return dataManager.trackBrowseResultClick( + browseResultClickRequestBody, arrayOf( Constants.QueryConstants.AUTOCOMPLETE_SECTION to sName - ), encodedParams.toTypedArray()) + ), encodedParams.toTypedArray() + ) } diff --git a/library/src/main/java/io/constructor/data/DataManager.kt b/library/src/main/java/io/constructor/data/DataManager.kt index f857b5c8..9b4c3fd9 100755 --- a/library/src/main/java/io/constructor/data/DataManager.kt +++ b/library/src/main/java/io/constructor/data/DataManager.kt @@ -117,49 +117,12 @@ constructor(private val constructorApi: ConstructorApi, private val moshi: Moshi }.toObservable() } - fun trackBrowseResultsLoaded(requestBodyStringParams: Array>, requestBodyIntParams: Array>, segments: List, params: Array>): Completable { - val requestBodyStringParamsMap = requestBodyStringParams.toMap() - val requestBodyIntParamsMap = requestBodyIntParams.toMap() - val urlParamsMap = params.toMap() - - val browseRequestBody = BrowseResultLoadRequestBody( - requestBodyStringParamsMap["filter_name"], - requestBodyStringParamsMap["filter_value"], - requestBodyIntParamsMap["result_count"], - requestBodyStringParamsMap["c"], - requestBodyStringParamsMap["i"], - requestBodyIntParamsMap["s"], - requestBodyStringParamsMap["ui"], - segments, - requestBodyStringParamsMap["key"], - true, - urlParamsMap["autocomplete_section"], - System.currentTimeMillis().toInt() - ) - return constructorApi.trackBrowseResultsLoaded(browseRequestBody, urlParamsMap) + fun trackBrowseResultsLoaded(browseResultLoadRequestBody: BrowseResultLoadRequestBody, params: Array>): Completable { + return constructorApi.trackBrowseResultsLoaded(browseResultLoadRequestBody, params.toMap()) } - fun trackBrowseResultClick(requestBodyStringParams: Array>, requestBodyIntParams: Array>, segments: List, params: Array> = arrayOf(), encodedParams: Array> = arrayOf()): Completable { - val requestBodyStringParamsMap = requestBodyStringParams.toMap() - val requestBodyIntParamsMap = requestBodyIntParams.toMap() - val urlParamsMap = params.toMap() - - val browseRequestBody = BrowseResultClickRequestBody( - requestBodyStringParamsMap["filter_name"], - requestBodyStringParamsMap["filter_value"], - requestBodyStringParamsMap["customer_id"], - requestBodyIntParamsMap["result_position_on_page"], - requestBodyStringParamsMap["c"], - requestBodyStringParamsMap["i"], - requestBodyIntParamsMap["s"], - requestBodyStringParamsMap["ui"], - segments, - requestBodyStringParamsMap["key"], - true, - urlParamsMap["autocomplete_section"], - System.currentTimeMillis().toInt() - ) - return constructorApi.trackBrowseResultClick(browseRequestBody, urlParamsMap, encodedParams.toMap()) + fun trackBrowseResultClick(browseResultClickRequestBody: BrowseResultClickRequestBody, params: Array> = arrayOf(), encodedParams: Array> = arrayOf()): Completable { + return constructorApi.trackBrowseResultClick(browseResultClickRequestBody, params.toMap(), encodedParams.toMap()) } } \ No newline at end of file diff --git a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt index 9aae0a7e..977a687a 100755 --- a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt +++ b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt @@ -368,7 +368,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt=" assert(request.path.startsWith(path)) - assertEquals(193, request.bodySize) + assertEquals(227, request.bodySize) assertEquals("POST", request.method) } @@ -381,7 +381,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt=" assert(request.path.startsWith(path)) - assertEquals(193, request.bodySize) + assertEquals(227, request.bodySize) assertEquals("POST", request.method) } @@ -405,7 +405,9 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; assert(request.path.startsWith(path)) - assertEquals(237, request.bodySize) + print(request.body.readUtf8()) + + assertEquals(262, request.bodySize) assertEquals("POST", request.method) } @@ -418,7 +420,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&result_id=3467632&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; assert(request.path.startsWith(path)) - assertEquals(237, request.bodySize) + assertEquals(262, request.bodySize) assertEquals("POST", request.method) } @@ -431,7 +433,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; assert(request.path.startsWith(path)) - assertEquals(237, request.bodySize) + assertEquals(262, request.bodySize) assertEquals("POST", request.method) } From 78d392a824cffdaedd9c49a1cdd7432307ade2ac Mon Sep 17 00:00:00 2001 From: Zubin Tiku Date: Wed, 23 Dec 2020 17:30:04 -0500 Subject: [PATCH 10/10] Tweaks --- .../java/io/constructor/core/ConstructorIo.kt | 16 ++++++++-------- .../browse/BrowseResultClickRequestBody.kt | 18 +++++++++--------- .../browse/BrowseResultLoadRequestBody.kt | 16 ++++++++-------- .../core/ConstructorIoTrackingTest.kt | 15 ++++++++------- 4 files changed, 33 insertions(+), 32 deletions(-) diff --git a/library/src/main/java/io/constructor/core/ConstructorIo.kt b/library/src/main/java/io/constructor/core/ConstructorIo.kt index 6a0e6c2f..c2199f42 100755 --- a/library/src/main/java/io/constructor/core/ConstructorIo.kt +++ b/library/src/main/java/io/constructor/core/ConstructorIo.kt @@ -355,7 +355,7 @@ object ConstructorIo { t -> e("Browse Results Loaded error: ${t.message}") })) } - internal fun trackBrowseResultsLoadedInternal(filterName: String?, filterValue: String?, resultCount: Int?): Completable { + internal fun trackBrowseResultsLoadedInternal(filterName: String, filterValue: String, resultCount: Int): Completable { preferenceHelper.getSessionId(sessionIncrementHandler) val browseResultLoadRequestBody = BrowseResultLoadRequestBody( filterName, @@ -364,12 +364,12 @@ object ConstructorIo { BuildConfig.CLIENT_VERSION, preferenceHelper.id, preferenceHelper.getSessionId(), + preferenceHelper.apiKey, configMemoryHolder.userId, configMemoryHolder.segments, - preferenceHelper.apiKey, true, preferenceHelper.defaultItemSection, - System.currentTimeMillis().toInt() + System.currentTimeMillis().toString() ) return dataManager.trackBrowseResultsLoaded( @@ -398,7 +398,7 @@ object ConstructorIo { preferenceHelper.getSessionId(sessionIncrementHandler) val encodedParams: ArrayList> = arrayListOf() resultID?.let { encodedParams.add(Constants.QueryConstants.RESULT_ID.urlEncode() to it.urlEncode()) } - val sName = sectionName ?: preferenceHelper.defaultItemSection + val section = sectionName ?: preferenceHelper.defaultItemSection val browseResultClickRequestBody = BrowseResultClickRequestBody( filterName, filterValue, @@ -407,18 +407,18 @@ object ConstructorIo { BuildConfig.CLIENT_VERSION, preferenceHelper.id, preferenceHelper.getSessionId(), + preferenceHelper.apiKey, configMemoryHolder.userId, configMemoryHolder.segments, - preferenceHelper.apiKey, true, - sName, - System.currentTimeMillis().toInt() + section, + System.currentTimeMillis().toString() ) return dataManager.trackBrowseResultClick( browseResultClickRequestBody, arrayOf( - Constants.QueryConstants.AUTOCOMPLETE_SECTION to sName + Constants.QueryConstants.AUTOCOMPLETE_SECTION to section ), encodedParams.toTypedArray() ) diff --git a/library/src/main/java/io/constructor/data/model/browse/BrowseResultClickRequestBody.kt b/library/src/main/java/io/constructor/data/model/browse/BrowseResultClickRequestBody.kt index cf4f268b..9e3347c8 100644 --- a/library/src/main/java/io/constructor/data/model/browse/BrowseResultClickRequestBody.kt +++ b/library/src/main/java/io/constructor/data/model/browse/BrowseResultClickRequestBody.kt @@ -5,17 +5,17 @@ import io.constructor.data.model.common.*; import java.io.Serializable data class BrowseResultClickRequestBody( - @Json(name = "filter_name") val filterName: String?, - @Json(name = "filter_value") val filterValue: String?, - @Json(name = "item_id") val item_id: String?, - @Json(name = "result_position_on_page") val resultPositionOnPage: Int?, - @Json(name = "c") val c: String?, - @Json(name = "i") val i: String?, - @Json(name = "s") val s: Int?, + @Json(name = "filter_name") val filterName: String, + @Json(name = "filter_value") val filterValue: String, + @Json(name = "item_id") val item_id: String, + @Json(name = "result_position_on_page") val resultPositionOnPage: Int, + @Json(name = "c") val c: String, + @Json(name = "i") val i: String, + @Json(name = "s") val s: Int, + @Json(name = "key") val key: String, @Json(name = "ui") val ui: String?, @Json(name = "us") val us: List, - @Json(name = "key") val key: String?, @Json(name= "beacon") val beacon: Boolean?, @Json(name= "autocomplete_section") val autocomplete_section: String?, - @Json(name= "_dt") val _dt: Int? + @Json(name= "_dt") val _dt: String? ) : Serializable \ No newline at end of file diff --git a/library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt b/library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt index 362be7ec..af95dcd0 100644 --- a/library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt +++ b/library/src/main/java/io/constructor/data/model/browse/BrowseResultLoadRequestBody.kt @@ -5,16 +5,16 @@ import io.constructor.data.model.common.*; import java.io.Serializable data class BrowseResultLoadRequestBody( - @Json(name = "filter_name") val filterName: String?, - @Json(name = "filter_value") val filterValue: String?, - @Json(name = "result_count") val resultCount: Int?, - @Json(name = "c") val c: String?, - @Json(name = "i") val i: String?, - @Json(name = "s") val s: Int?, + @Json(name = "filter_name") val filterName: String, + @Json(name = "filter_value") val filterValue: String, + @Json(name = "result_count") val resultCount: Int, + @Json(name = "c") val c: String, + @Json(name = "i") val i: String, + @Json(name = "s") val s: Int, + @Json(name = "key") val key: String, @Json(name = "ui") val ui: String?, @Json(name = "us") val us: List, - @Json(name = "key") val key: String?, @Json(name= "beacon") val beacon: Boolean?, @Json(name= "autocomplete_section") val autocomplete_section: String?, - @Json(name= "_dt") val _dt: Int? + @Json(name= "_dt") val _dt: String? ) : Serializable \ No newline at end of file diff --git a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt index 977a687a..794178d9 100755 --- a/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt +++ b/library/src/test/java/io/constructor/core/ConstructorIoTrackingTest.kt @@ -16,6 +16,7 @@ import org.junit.Test import java.net.SocketTimeoutException import java.util.concurrent.TimeUnit import kotlin.test.assertEquals +import kotlin.test.assertTrue class ConstructorIoTest { @@ -367,8 +368,9 @@ class ConstructorIoTest { observer.assertComplete() val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt=" + print(request.body.readUtf8()) assert(request.path.startsWith(path)) - assertEquals(227, request.bodySize) + assertTrue(request.bodySize > 220) assertEquals("POST", request.method) } @@ -381,7 +383,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_load?action=browse-results&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt=" assert(request.path.startsWith(path)) - assertEquals(227, request.bodySize) + assertTrue(request.bodySize > 220) assertEquals("POST", request.method) } @@ -404,10 +406,9 @@ class ConstructorIoTest { observer.assertComplete() val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; - assert(request.path.startsWith(path)) print(request.body.readUtf8()) - - assertEquals(262, request.bodySize) + assert(request.path.startsWith(path)) + assertTrue(request.bodySize > 250) assertEquals("POST", request.method) } @@ -420,7 +421,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&result_id=3467632&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; assert(request.path.startsWith(path)) - assertEquals(262, request.bodySize) + assertTrue(request.bodySize > 250) assertEquals("POST", request.method) } @@ -433,7 +434,7 @@ class ConstructorIoTest { val request = mockServer.takeRequest() val path = "/v2/behavioral_action/browse_result_click?autocomplete_section=Products&key=copper-key&i=wacko-the-guid&ui=player-three&s=67&c=cioand-2.3.1&_dt="; assert(request.path.startsWith(path)) - assertEquals(262, request.bodySize) + assertTrue(request.bodySize > 250) assertEquals("POST", request.method) }