📈 Capture onboarding funnel (#20926)
* 📈 Capture onboarding funnel * ⏩ Faster lookup * ✅ Capture how many people enabled metrics - It technically captures disabled too - But we'll never know if someone disabled - Because that info won't be transmitted * ✏️ Fix tests * 🧯 Fix lint
This commit is contained in:
parent
ae6205c874
commit
8215498ddb
|
@ -53,4 +53,3 @@
|
||||||
#(rf/dispatch [:profile.login/login-with-biometric-if-available
|
#(rf/dispatch [:profile.login/login-with-biometric-if-available
|
||||||
(get-in db [:profile/login :key-uid])]))
|
(get-in db [:profile/login :key-uid])]))
|
||||||
:shell? true}]]]})))
|
:shell? true}]]]})))
|
||||||
|
|
||||||
|
|
|
@ -3,37 +3,61 @@
|
||||||
[legacy.status-im.utils.build :as build]
|
[legacy.status-im.utils.build :as build]
|
||||||
[react-native.platform :as platform]))
|
[react-native.platform :as platform]))
|
||||||
|
|
||||||
(defn user-journey-event
|
(defn key-value-event
|
||||||
[action]
|
[event-name val-key value]
|
||||||
{:metric
|
{:metric
|
||||||
{:eventName "user-journey"
|
{:eventName event-name
|
||||||
:platform platform/os
|
:platform platform/os
|
||||||
:appVersion build/app-short-version
|
:appVersion build/app-short-version
|
||||||
:eventValue {:action action}}})
|
:eventValue {val-key value}}})
|
||||||
|
|
||||||
|
(defn user-journey-event
|
||||||
|
[action]
|
||||||
|
(key-value-event "user-journey" :action action))
|
||||||
|
|
||||||
|
(defn navigation-event
|
||||||
|
[view-id]
|
||||||
|
(key-value-event "navigation" :viewId view-id))
|
||||||
|
|
||||||
(def ^:const app-started-event "app-started")
|
(def ^:const app-started-event "app-started")
|
||||||
(def ^:const navigate-to-create-profile-event "navigate-to-create-profile")
|
|
||||||
(def ^:const communities-tab-clicked "communities-tab-clicked")
|
(def ^:const view-ids-to-track
|
||||||
(def ^:const wallet-tab-clicked "wallet-tab-clicked")
|
#{;; Tabs
|
||||||
(def ^:const chats-tab-clicked "chats-tab-clicked")
|
:communities-stack
|
||||||
|
:chats-stack
|
||||||
|
:wallet-stack
|
||||||
|
|
||||||
|
;; Onboarding
|
||||||
|
:screen/onboarding.intro
|
||||||
|
:screen/onboarding.new-to-status
|
||||||
|
:screen/onboarding.sync-or-recover-profile
|
||||||
|
:screen/onboarding.enter-seed-phrase
|
||||||
|
:screen/onboarding.create-profile
|
||||||
|
:screen/onboarding.create-profile-password
|
||||||
|
:screen/onboarding.enable-biometrics
|
||||||
|
:screen/onboarding.generating-keys
|
||||||
|
:screen/onboarding.enable-notifications
|
||||||
|
:screen/onboarding.sign-in-intro
|
||||||
|
:screen/onboarding.sign-in
|
||||||
|
:screen/onboarding.syncing-progress
|
||||||
|
:screen/onboarding.syncing-progress-intro
|
||||||
|
:screen/onboarding.syncing-results
|
||||||
|
:screen/onboarding.welcome})
|
||||||
|
|
||||||
(defn track-view-id-event
|
(defn track-view-id-event
|
||||||
[view-id]
|
[view-id]
|
||||||
(case view-id
|
(when (contains? view-ids-to-track view-id)
|
||||||
:communities-stack (user-journey-event communities-tab-clicked)
|
(navigation-event (name view-id))))
|
||||||
:chats-stack (user-journey-event chats-tab-clicked)
|
|
||||||
:wallet-stack (user-journey-event wallet-tab-clicked)
|
|
||||||
nil))
|
|
||||||
|
|
||||||
(defn tracked-event
|
(defn tracked-event
|
||||||
[[event-name second-parameter]]
|
[[event-name second-parameter]]
|
||||||
(case event-name
|
(case event-name
|
||||||
:onboarding/navigate-to-create-profile
|
|
||||||
(user-journey-event navigate-to-create-profile-event)
|
|
||||||
|
|
||||||
:profile/get-profiles-overview-success
|
:profile/get-profiles-overview-success
|
||||||
(user-journey-event app-started-event)
|
(user-journey-event app-started-event)
|
||||||
|
|
||||||
|
:centralized-metrics/toggle-centralized-metrics
|
||||||
|
(key-value-event "events.metrics-enabled" :enabled second-parameter)
|
||||||
|
|
||||||
:set-view-id
|
:set-view-id
|
||||||
(track-view-id-event second-parameter)
|
(track-view-id-event second-parameter)
|
||||||
|
|
||||||
|
|
|
@ -5,31 +5,75 @@
|
||||||
[react-native.platform :as platform]
|
[react-native.platform :as platform]
|
||||||
[status-im.contexts.centralized-metrics.tracking :as tracking]))
|
[status-im.contexts.centralized-metrics.tracking :as tracking]))
|
||||||
|
|
||||||
|
(def platform-os platform/os)
|
||||||
|
(def app-version build/app-short-version)
|
||||||
|
|
||||||
|
(deftest key-value-event-test
|
||||||
|
(testing "creates correct key-value event"
|
||||||
|
(let [event-name "test-event"
|
||||||
|
val-key :test-key
|
||||||
|
value "test-value"
|
||||||
|
expected {:metric
|
||||||
|
{:eventName event-name
|
||||||
|
:platform platform-os
|
||||||
|
:appVersion app-version
|
||||||
|
:eventValue {val-key value}}}]
|
||||||
|
(is (= expected (tracking/key-value-event event-name val-key value))))))
|
||||||
|
|
||||||
(deftest user-journey-event-test
|
(deftest user-journey-event-test
|
||||||
(testing "creates correct metric event"
|
(testing "creates correct user journey event"
|
||||||
(let [action "some-action"
|
(let [action "test-action"
|
||||||
expected {:metric {:eventName "user-journey"
|
expected {:metric
|
||||||
:platform platform/os
|
{:eventName "user-journey"
|
||||||
:appVersion build/app-short-version
|
:platform platform-os
|
||||||
:eventValue {:action action}}}]
|
:appVersion app-version
|
||||||
|
:eventValue {:action action}}}]
|
||||||
(is (= expected (tracking/user-journey-event action))))))
|
(is (= expected (tracking/user-journey-event action))))))
|
||||||
|
|
||||||
|
(deftest navigation-event-test
|
||||||
|
(testing "creates correct navigation event"
|
||||||
|
(let [view-id :test-view-id
|
||||||
|
expected {:metric
|
||||||
|
{:eventName "navigation"
|
||||||
|
:platform platform-os
|
||||||
|
:appVersion app-version
|
||||||
|
:eventValue {:viewId view-id}}}]
|
||||||
|
(is (= expected (tracking/navigation-event view-id))))))
|
||||||
|
|
||||||
(deftest track-view-id-event-test
|
(deftest track-view-id-event-test
|
||||||
(testing "returns correct event for view-id"
|
(testing "returns correct navigation event for view-id"
|
||||||
(is (= (tracking/user-journey-event tracking/communities-tab-clicked)
|
(is (= {:metric
|
||||||
|
{:eventName "navigation"
|
||||||
|
:platform platform-os
|
||||||
|
:appVersion app-version
|
||||||
|
:eventValue {:viewId "communities-stack"}}}
|
||||||
(tracking/track-view-id-event :communities-stack)))
|
(tracking/track-view-id-event :communities-stack)))
|
||||||
(is (= (tracking/user-journey-event tracking/chats-tab-clicked)
|
(is (= {:metric
|
||||||
(tracking/track-view-id-event :chats-stack)))
|
{:eventName "navigation"
|
||||||
(is (= (tracking/user-journey-event tracking/wallet-tab-clicked)
|
:platform platform-os
|
||||||
(tracking/track-view-id-event :wallet-stack)))
|
:appVersion app-version
|
||||||
|
:eventValue {:viewId "onboarding.create-profile"}}}
|
||||||
|
(tracking/track-view-id-event :screen/onboarding.create-profile)))
|
||||||
(is (nil? (tracking/track-view-id-event :unknown-stack)))))
|
(is (nil? (tracking/track-view-id-event :unknown-stack)))))
|
||||||
|
|
||||||
(deftest tracked-event-test
|
(deftest tracked-event-test
|
||||||
(testing "returns correct event for given inputs"
|
(testing "returns correct event for given inputs"
|
||||||
(is (= (tracking/user-journey-event tracking/navigate-to-create-profile-event)
|
(is (= {:metric
|
||||||
(tracking/tracked-event [:onboarding/navigate-to-create-profile])))
|
{:eventName "user-journey"
|
||||||
(is (= (tracking/user-journey-event tracking/app-started-event)
|
:platform platform-os
|
||||||
|
:appVersion app-version
|
||||||
|
:eventValue {:action tracking/app-started-event}}}
|
||||||
(tracking/tracked-event [:profile/get-profiles-overview-success])))
|
(tracking/tracked-event [:profile/get-profiles-overview-success])))
|
||||||
(is (= (tracking/track-view-id-event :wallet-stack)
|
(is (= {:metric
|
||||||
|
{:eventName "events.metrics-enabled"
|
||||||
|
:platform platform-os
|
||||||
|
:appVersion app-version
|
||||||
|
:eventValue {:enabled true}}}
|
||||||
|
(tracking/tracked-event [:centralized-metrics/toggle-centralized-metrics true])))
|
||||||
|
(is (= {:metric
|
||||||
|
{:eventName "navigation"
|
||||||
|
:platform platform-os
|
||||||
|
:appVersion app-version
|
||||||
|
:eventValue {:viewId "wallet-stack"}}}
|
||||||
(tracking/tracked-event [:set-view-id :wallet-stack])))
|
(tracking/tracked-event [:set-view-id :wallet-stack])))
|
||||||
(is (nil? (tracking/tracked-event [:unknown-event])))))
|
(is (nil? (tracking/tracked-event [:unknown-event])))))
|
||||||
|
|
Loading…
Reference in New Issue