From 254717971e68de3e6c1bd52700fb8688b77ba63e Mon Sep 17 00:00:00 2001 From: Jamie Caprani Date: Tue, 6 Aug 2024 15:43:10 +0100 Subject: [PATCH] Cherry pick to release branch (#20963) --- .../contexts/centralized_metrics/events.cljs | 1 - .../centralized_metrics/tracking.cljs | 56 ++++++++++---- .../centralized_metrics/tracking_test.cljs | 76 +++++++++++++++---- src/status_im/contexts/wallet/home/view.cljs | 13 ++-- .../contexts/wallet/send/events.cljs | 7 +- src/status_im/feature_flags.cljs | 1 + status-go-version.json | 4 +- test/appium/tests/critical/test_wallet.py | 1 + 8 files changed, 117 insertions(+), 42 deletions(-) diff --git a/src/status_im/contexts/centralized_metrics/events.cljs b/src/status_im/contexts/centralized_metrics/events.cljs index 83f1ffa1b6..9a04ff76b7 100644 --- a/src/status_im/contexts/centralized_metrics/events.cljs +++ b/src/status_im/contexts/centralized_metrics/events.cljs @@ -53,4 +53,3 @@ #(rf/dispatch [:profile.login/login-with-biometric-if-available (get-in db [:profile/login :key-uid])])) :shell? true}]]]}))) - diff --git a/src/status_im/contexts/centralized_metrics/tracking.cljs b/src/status_im/contexts/centralized_metrics/tracking.cljs index df1de0f9b1..e7826780a5 100644 --- a/src/status_im/contexts/centralized_metrics/tracking.cljs +++ b/src/status_im/contexts/centralized_metrics/tracking.cljs @@ -3,37 +3,61 @@ [legacy.status-im.utils.build :as build] [react-native.platform :as platform])) -(defn user-journey-event - [action] +(defn key-value-event + [event-name val-key value] {:metric - {:eventName "user-journey" + {:eventName event-name :platform platform/os :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 navigate-to-create-profile-event "navigate-to-create-profile") -(def ^:const communities-tab-clicked "communities-tab-clicked") -(def ^:const wallet-tab-clicked "wallet-tab-clicked") -(def ^:const chats-tab-clicked "chats-tab-clicked") + +(def ^:const view-ids-to-track + #{;; Tabs + :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 [view-id] - (case view-id - :communities-stack (user-journey-event communities-tab-clicked) - :chats-stack (user-journey-event chats-tab-clicked) - :wallet-stack (user-journey-event wallet-tab-clicked) - nil)) + (when (contains? view-ids-to-track view-id) + (navigation-event (name view-id)))) (defn tracked-event [[event-name second-parameter]] (case event-name - :onboarding/navigate-to-create-profile - (user-journey-event navigate-to-create-profile-event) - :profile/get-profiles-overview-success (user-journey-event app-started-event) + :centralized-metrics/toggle-centralized-metrics + (key-value-event "events.metrics-enabled" :enabled second-parameter) + :set-view-id (track-view-id-event second-parameter) diff --git a/src/status_im/contexts/centralized_metrics/tracking_test.cljs b/src/status_im/contexts/centralized_metrics/tracking_test.cljs index bf38e42bfb..0eafedcb7d 100644 --- a/src/status_im/contexts/centralized_metrics/tracking_test.cljs +++ b/src/status_im/contexts/centralized_metrics/tracking_test.cljs @@ -5,31 +5,75 @@ [react-native.platform :as platform] [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 - (testing "creates correct metric event" - (let [action "some-action" - expected {:metric {:eventName "user-journey" - :platform platform/os - :appVersion build/app-short-version - :eventValue {:action action}}}] + (testing "creates correct user journey event" + (let [action "test-action" + expected {:metric + {:eventName "user-journey" + :platform platform-os + :appVersion app-version + :eventValue {:action 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 - (testing "returns correct event for view-id" - (is (= (tracking/user-journey-event tracking/communities-tab-clicked) + (testing "returns correct navigation event for view-id" + (is (= {:metric + {:eventName "navigation" + :platform platform-os + :appVersion app-version + :eventValue {:viewId "communities-stack"}}} (tracking/track-view-id-event :communities-stack))) - (is (= (tracking/user-journey-event tracking/chats-tab-clicked) - (tracking/track-view-id-event :chats-stack))) - (is (= (tracking/user-journey-event tracking/wallet-tab-clicked) - (tracking/track-view-id-event :wallet-stack))) + (is (= {:metric + {:eventName "navigation" + :platform platform-os + :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))))) (deftest tracked-event-test (testing "returns correct event for given inputs" - (is (= (tracking/user-journey-event tracking/navigate-to-create-profile-event) - (tracking/tracked-event [:onboarding/navigate-to-create-profile]))) - (is (= (tracking/user-journey-event tracking/app-started-event) + (is (= {:metric + {:eventName "user-journey" + :platform platform-os + :appVersion app-version + :eventValue {:action tracking/app-started-event}}} (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]))) (is (nil? (tracking/tracked-event [:unknown-event]))))) diff --git a/src/status_im/contexts/wallet/home/view.cljs b/src/status_im/contexts/wallet/home/view.cljs index b28cd19653..4fdb0b0794 100644 --- a/src/status_im/contexts/wallet/home/view.cljs +++ b/src/status_im/contexts/wallet/home/view.cljs @@ -21,12 +21,13 @@ :label (i18n/label :t/add-account) :sub-label (i18n/label :t/add-account-description) :on-press #(rf/dispatch [:navigate-to :screen/wallet.create-account])} - {:icon :i/reveal - :accessibility-label :add-a-contact - :label (i18n/label :t/add-address-to-watch) - :sub-label (i18n/label :t/add-address-to-watch-description) - :on-press #(rf/dispatch [:navigate-to :screen/wallet.add-address-to-watch]) - :add-divider? true}]]]) + (when (ff/enabled? ::ff/wallet.add-watched-address) + {:icon :i/reveal + :accessibility-label :add-a-contact + :label (i18n/label :t/add-address-to-watch) + :sub-label (i18n/label :t/add-address-to-watch-description) + :on-press #(rf/dispatch [:navigate-to :screen/wallet.add-address-to-watch]) + :add-divider? true})]]]) (defn- new-account-card-data [] diff --git a/src/status_im/contexts/wallet/send/events.cljs b/src/status_im/contexts/wallet/send/events.cljs index 91dda0608c..480ebc29ae 100644 --- a/src/status_im/contexts/wallet/send/events.cljs +++ b/src/status_im/contexts/wallet/send/events.cljs @@ -205,7 +205,7 @@ {:db (cond-> db :always (update-in [:wallet :ui :send] #(-> % - (dissoc :collectible) + (dissoc :collectible :tx-type) (assoc :token-not-supported-in-receiver-networks? unsupported-token?))) token-symbol (assoc-in [:wallet :ui :send :token-symbol] token-symbol) @@ -217,6 +217,11 @@ entry-point (assoc-in [:wallet :ui :send :entry-point] entry-point)) :fx [[:dispatch [:wallet/clean-suggested-routes]] [:dispatch + ;; ^:flush-dom allows us to make sure the re-frame DB state is always synced + ;; before the navigation occurs, so the new screen is always rendered with + ;; the DB state set by this event. By adding the metadata we are omitting + ;; a 1-frame blink when the screen is mounted. + ^:flush-dom [:wallet/wizard-navigate-forward {:current-screen stack-id :start-flow? start-flow? diff --git a/src/status_im/feature_flags.cljs b/src/status_im/feature_flags.cljs index 821c935675..d7e72d1cf0 100644 --- a/src/status_im/feature_flags.cljs +++ b/src/status_im/feature_flags.cljs @@ -22,6 +22,7 @@ :FLAG_WALLET_SETTINGS_IMPORT_ALL_KEYPAIRS) ::shell.jump-to (enabled-in-env? :ENABLE_JUMP_TO) + ::wallet.add-watched-address (enabled-in-env? :FLAG_ADD_WATCHED_ADDRESS) ::wallet.advanced-sending (enabled-in-env? :FLAG_ADVANCED_SENDING) ::wallet.assets-modal-hide (enabled-in-env? :FLAG_ASSETS_MODAL_HIDE) ::wallet.assets-modal-manage-tokens (enabled-in-env? :FLAG_ASSETS_MODAL_MANAGE_TOKENS) diff --git a/status-go-version.json b/status-go-version.json index 7fdabcbef7..9fba31fcd0 100644 --- a/status-go-version.json +++ b/status-go-version.json @@ -4,6 +4,6 @@ "owner": "status-im", "repo": "status-go", "version": "release/0.182.x", - "commit-sha1": "7e87fd0d059539abc0f9525b4347e5926783b762", - "src-sha256": "0i9jij2vkh055m522x1ivv80b5q0qbq3rbh9m6xhah31jx5kwnwh" + "commit-sha1": "8ff95326c49b06b4bc0bbf01a4dea1dab96945a5", + "src-sha256": "1nwa21n6r831b28qcl7n4fx5v0qmrihiazzirsxca3x0xw3x4caj" } diff --git a/test/appium/tests/critical/test_wallet.py b/test/appium/tests/critical/test_wallet.py index d6e65da56f..c3d930f62c 100644 --- a/test/appium/tests/critical/test_wallet.py +++ b/test/appium/tests/critical/test_wallet.py @@ -240,6 +240,7 @@ class TestWalletOneDevice(MultipleSharedDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(727232) + @marks.skip("The feature is disabled in https://github.com/status-im/status-mobile/pull/20955") @marks.xfail(reason="Missing networks in account address, https://github.com/status-im/status-mobile/issues/20166") def test_wallet_add_remove_watch_only_account(self): self.wallet_view.just_fyi("Adding new watch only account")