From 83b8b3dac1009b2b43b0a4b95688e0d2a718bcf4 Mon Sep 17 00:00:00 2001 From: qbasso Date: Wed, 30 Jan 2019 09:21:20 +0100 Subject: [PATCH] ch4501 added purchase track event --- .../main/java/io/constructor/core/Constants.kt | 1 + .../java/io/constructor/core/ConstructorIo.kt | 14 ++++++++++++++ .../main/java/io/constructor/data/DataManager.kt | 8 ++++++-- .../java/io/constructor/data/remote/ApiPaths.kt | 1 + .../io/constructor/data/remote/ConstructorApi.kt | 3 +++ .../io/constructor/core/ConstructorIoTest.kt | 16 ++++++++++++---- .../java/io/constructor/data/DataManagerTest.kt | 7 +++++++ 7 files changed, 44 insertions(+), 6 deletions(-) diff --git a/library/src/main/java/io/constructor/core/Constants.kt b/library/src/main/java/io/constructor/core/Constants.kt index 6b5d0949..6acba189 100755 --- a/library/src/main/java/io/constructor/core/Constants.kt +++ b/library/src/main/java/io/constructor/core/Constants.kt @@ -22,6 +22,7 @@ class Constants { const val EVENT = "tr" const val API_KEY = "key" const val NUM_RESULTS = "num_results_" + const val CUSTOMER_ID = "customer_ids" const val GROUP_ID = "group[group_id]" const val GROUP_DISPLAY_NAME = "group[display_name]" const val USER_ID = "ui" diff --git a/library/src/main/java/io/constructor/core/ConstructorIo.kt b/library/src/main/java/io/constructor/core/ConstructorIo.kt index 99ee9117..34e7bdce 100755 --- a/library/src/main/java/io/constructor/core/ConstructorIo.kt +++ b/library/src/main/java/io/constructor/core/ConstructorIo.kt @@ -187,4 +187,18 @@ object ConstructorIo { })) } + fun trackPurchase(clientIds: Array, sectionName: String? = null, errorCallback: ConstructorError = null) { + val sessionId = preferenceHelper.getSessionId(sessionIncrementEventHandler) + val sectionNameParam = sectionName ?: preferenceHelper.defaultItemSection + val params = mutableListOf(Constants.QueryConstants.SESSION to sessionId.toString(), + Constants.QueryConstants.AUTOCOMPLETE_SECTION to sectionNameParam) + clientIds.forEach { params.add(Constants.QueryConstants.CUSTOMER_ID to it) } + disposable.add(dataManager.trackPurchase(params.toTypedArray()).subscribeOn(Schedulers.io()) + .subscribe({}, { t -> + t.printStackTrace() + errorCallback?.invoke(t) + e("Input focus event error: ${t.message}") + })) + } + } \ No newline at end of file diff --git a/library/src/main/java/io/constructor/data/DataManager.kt b/library/src/main/java/io/constructor/data/DataManager.kt index 69836bca..ffb575a1 100755 --- a/library/src/main/java/io/constructor/data/DataManager.kt +++ b/library/src/main/java/io/constructor/data/DataManager.kt @@ -45,12 +45,16 @@ constructor(private val constructorApi: ConstructorApi) { return constructorApi.trackSearchResultClickThrough(term, itemId, position, params.toMap()) } - fun trackSearchResultLoaded(term: String, reultCount: Int, params: Array>): Completable { - return constructorApi.trackSearchResultLoaded(term, reultCount, params.toMap()) + fun trackSearchResultLoaded(term: String, resultCount: Int, params: Array>): Completable { + return constructorApi.trackSearchResultLoaded(term, resultCount, params.toMap()) } fun trackInputFocus(term: String?, params: Array>): Completable { return constructorApi.trackInputFocus(term, params.toMap()) } + fun trackPurchase(params: Array>): Completable { + return constructorApi.trackPurchase(params.toMap()) + } + } \ No newline at end of file diff --git a/library/src/main/java/io/constructor/data/remote/ApiPaths.kt b/library/src/main/java/io/constructor/data/remote/ApiPaths.kt index 500fe72a..f4cf1baa 100755 --- a/library/src/main/java/io/constructor/data/remote/ApiPaths.kt +++ b/library/src/main/java/io/constructor/data/remote/ApiPaths.kt @@ -8,5 +8,6 @@ object ApiPaths { const val URL_CONVERT_EVENT = "autocomplete/{term}/conversion" const val URL_CLICK_THROUGH_EVENT = "autocomplete/{term}/click_through" const val URL_BEHAVIOR = "behavior" + const val URL_PURCHASE = "autocomplete/TERM_UNKNOWN/purchase" } \ 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 bf4df469..348e9ffc 100755 --- a/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt +++ b/library/src/main/java/io/constructor/data/remote/ConstructorApi.kt @@ -34,4 +34,7 @@ interface ConstructorApi { @GET(ApiPaths.URL_BEHAVIOR) fun trackInputFocus(@Query("term") term: String?, @QueryMap params: Map): Completable + + @GET(ApiPaths.URL_PURCHASE) + fun trackPurchase(@QueryMap params: Map): Completable } \ No newline at end of file diff --git a/library/src/test/java/io/constructor/core/ConstructorIoTest.kt b/library/src/test/java/io/constructor/core/ConstructorIoTest.kt index b7656db5..cc7dcedf 100755 --- a/library/src/test/java/io/constructor/core/ConstructorIoTest.kt +++ b/library/src/test/java/io/constructor/core/ConstructorIoTest.kt @@ -92,7 +92,7 @@ class ConstructorIoTest { @Test fun verifySessionStartUrl() { - val expected = "https://ac.cnstrc.com/behavior?c=cioand-0.1.0&s=1&action=session_start&key=testKey&_dt=1520000000000" + val expected = "https://ac.cnstrc.com/behavior?c=${BuildConfig.CLIENT_VERSION}&s=1&action=session_start&key=testKey&_dt=1520000000000" val urlBuilder = HttpUrl.Builder().scheme("https") .host("ac.cnstrc.com") .addPathSegment("behavior") @@ -107,7 +107,7 @@ class ConstructorIoTest { @Test fun verifySearchClickThroughEvent() { - val expected = "https://ac.cnstrc.com/autocomplete/term/click_through?c=cioand-0.1.0&s=1&autocomplete_section=Products&key=testKey&_dt=1520000000000" + val expected = "https://ac.cnstrc.com/autocomplete/term/click_through?c=${BuildConfig.CLIENT_VERSION}&s=1&autocomplete_section=Products&key=testKey&_dt=1520000000000" val urlBuilder = HttpUrl.Builder().scheme("https") .host("ac.cnstrc.com") .addPathSegment("autocomplete") @@ -124,7 +124,7 @@ class ConstructorIoTest { @Test fun verifySearchLoadedEventUrl() { - val expected = "https://ac.cnstrc.com/behavior?c=cioand-0.1.0&s=1&action=search-results&key=testKey&_dt=1520000000000" + val expected = "https://ac.cnstrc.com/behavior?c=${BuildConfig.CLIENT_VERSION}&s=1&action=search-results&key=testKey&_dt=1520000000000" val urlBuilder = HttpUrl.Builder().scheme("https") .host("ac.cnstrc.com") .addPathSegment("behavior") @@ -139,7 +139,7 @@ class ConstructorIoTest { @Test fun verifyInputFocusEvent() { - val expected = "https://ac.cnstrc.com/behavior?c=cioand-0.1.0&i=user_id&s=1&action=focus&key=testKey&_dt=1520000000000" + val expected = "https://ac.cnstrc.com/behavior?c=${BuildConfig.CLIENT_VERSION}&i=user_id&s=1&action=focus&key=testKey&_dt=1520000000000" val urlBuilder = HttpUrl.Builder().scheme("https") .host("ac.cnstrc.com") .addPathSegment("behavior") @@ -269,4 +269,12 @@ class ConstructorIoTest { verify(exactly = 1) { data.trackInputFocus(any(), any()) } } + @Test + fun trackPurchase() { + every { pref.defaultItemSection } returns "Products" + every { data.trackPurchase(any()) } returns Completable.complete() + constructorIo.trackPurchase(arrayOf("id1")) + verify(exactly = 1) { data.trackPurchase(any()) } + } + } \ No newline at end of file diff --git a/library/src/test/java/io/constructor/data/DataManagerTest.kt b/library/src/test/java/io/constructor/data/DataManagerTest.kt index 9cf58c93..e787ca27 100755 --- a/library/src/test/java/io/constructor/data/DataManagerTest.kt +++ b/library/src/test/java/io/constructor/data/DataManagerTest.kt @@ -184,4 +184,11 @@ class DataManagerTest { verify(exactly = 1) { constructorApi.trackInputFocus(any(), any()) } } + @Test + fun trackPurchase() { + every { constructorApi.trackPurchase(any()) } returns Completable.complete() + dataManager.trackPurchase(arrayOf()) + verify(exactly = 1) { constructorApi.trackPurchase(any()) } + } + } \ No newline at end of file