Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create Navigation mechanism for wizard type flows #19059 #19123

Merged
merged 38 commits into from
Mar 22, 2024

Conversation

mmilad75
Copy link
Contributor

@mmilad75 mmilad75 commented Mar 6, 2024

fixes #19059
fixes #19225

In the wallet designs there are multiple flows which have optional steps depending on the entry point to the flow.
These steps being optional are depending on whether or not the value has been collected or not.

In order to achieve a wizard navigation, a based event called navigation/wizard-forward is created. This event receives three params current-screen, start-flow?, and flow-config.

current-screen is the name of the current screen that is dispatching the event.
start-flow? is a boolean and determines if the navigation flow starts from the current screen that is dispatching navigation/wizard-forward.
flow-config is a vector of maps containing two keys screen-id and skip-step?.

  • screen-id is the name of the screen which the screen is being registered with.
  • skip-step? is a function returning a boolean. This determines if the current screen should be skipped or not.

There is also another event called navigation/wizard-backward which navigates back through the screens passed to the navigation/wizard-forward in flow-config.

In order to test the functionality, the QA team should go through sending an asset from different screens such as wallet account home, or long pressing an asset and then sending it.

Here is the flow to follow

  • On a given wallet account, after selecting Send button, the following screens should be displayed in order:
  1. Send To
  2. Select Asset
  3. Input Amount
  4. Transaction Confirmation
  5. Transaction Progress
  • On a given wallet account, after long pressing an asset, and then selecting Send in the modal, the following screens should be displayed in order:
  1. Send To
  2. Input Amount
  3. Transaction Confirmation
  4. Transaction Progress

Keep in mind that the navigating back should also be in exact order.

@status-github-bot status-github-bot bot added this to REVIEW in Pipeline for QA Mar 6, 2024
@status-im-auto
Copy link
Member

status-im-auto commented Mar 6, 2024

Jenkins Builds

Click to see older builds (68)
Commit #️⃣ Finished (UTC) Duration Platform Result
3bad726 #1 2024-03-06 17:15:12 ~1 min tests 📄log
✔️ a9047a7 #2 2024-03-06 17:23:52 ~6 min tests 📄log
✔️ a9047a7 #2 2024-03-06 17:24:56 ~7 min android-e2e 🤖apk 📲
✔️ a9047a7 #2 2024-03-06 17:24:58 ~7 min android 🤖apk 📲
✔️ a9047a7 #2 2024-03-06 17:25:18 ~7 min ios 📱ipa 📲
b3a554b #3 2024-03-13 13:39:17 ~1 min tests 📄log
✔️ b3a554b #3 2024-03-13 13:45:10 ~7 min android-e2e 🤖apk 📲
✔️ b3a554b #3 2024-03-13 13:45:17 ~7 min android 🤖apk 📲
✔️ b3a554b #3 2024-03-13 13:45:23 ~7 min ios 📱ipa 📲
✔️ c39a9a2 #4 2024-03-13 13:52:25 ~5 min tests 📄log
✔️ c39a9a2 #4 2024-03-13 13:53:50 ~7 min android-e2e 🤖apk 📲
✔️ c39a9a2 #4 2024-03-13 13:53:55 ~7 min android 🤖apk 📲
✔️ c39a9a2 #4 2024-03-13 13:54:29 ~7 min ios 📱ipa 📲
✔️ c932aa6 #6 2024-03-13 14:14:59 ~5 min tests 📄log
✔️ c932aa6 #6 2024-03-13 14:16:05 ~7 min android-e2e 🤖apk 📲
✔️ c932aa6 #6 2024-03-13 14:16:10 ~7 min android 🤖apk 📲
✔️ c932aa6 #6 2024-03-13 14:17:09 ~8 min ios 📱ipa 📲
✔️ 47a94ff #7 2024-03-13 15:01:46 ~6 min tests 📄log
✔️ 47a94ff #7 2024-03-13 15:02:36 ~7 min android-e2e 🤖apk 📲
✔️ 47a94ff #7 2024-03-13 15:03:00 ~7 min android 🤖apk 📲
✔️ 47a94ff #7 2024-03-13 15:03:32 ~8 min ios 📱ipa 📲
✔️ d140ed5 #8 2024-03-13 15:47:49 ~5 min tests 📄log
✔️ d140ed5 #8 2024-03-13 15:48:48 ~6 min android-e2e 🤖apk 📲
✔️ d140ed5 #8 2024-03-13 15:49:12 ~7 min android 🤖apk 📲
✔️ d140ed5 #8 2024-03-13 15:49:45 ~7 min ios 📱ipa 📲
✔️ 7982610 #9 2024-03-15 14:47:08 ~6 min tests 📄log
✔️ 7982610 #9 2024-03-15 14:49:11 ~8 min android-e2e 🤖apk 📲
✔️ 7982610 #9 2024-03-15 14:49:11 ~8 min android 🤖apk 📲
✔️ 7982610 #9 2024-03-15 14:49:13 ~8 min ios 📱ipa 📲
e3c364e #10 2024-03-18 18:58:57 ~1 min tests 📄log
✔️ e3c364e #10 2024-03-18 19:04:20 ~7 min android-e2e 🤖apk 📲
✔️ e3c364e #10 2024-03-18 19:04:24 ~7 min android 🤖apk 📲
✔️ e3c364e #10 2024-03-18 19:06:09 ~8 min ios 📱ipa 📲
✔️ 1ad2683 #11 2024-03-18 19:15:34 ~5 min tests 📄log
✔️ 1ad2683 #11 2024-03-18 19:16:52 ~7 min android-e2e 🤖apk 📲
✔️ 1ad2683 #11 2024-03-18 19:16:59 ~7 min android 🤖apk 📲
✔️ 1ad2683 #11 2024-03-18 19:18:03 ~8 min ios 📱ipa 📲
✔️ bcf6464 #12 2024-03-19 11:43:15 ~7 min android-e2e 🤖apk 📲
✔️ bcf6464 #12 2024-03-19 11:43:17 ~7 min android 🤖apk 📲
✔️ bcf6464 #12 2024-03-19 11:44:41 ~8 min ios 📱ipa 📲
✔️ f07b826 #13 2024-03-19 13:39:47 ~6 min tests 📄log
✔️ f07b826 #13 2024-03-19 13:41:04 ~8 min android-e2e 🤖apk 📲
✔️ f07b826 #13 2024-03-19 13:41:06 ~8 min android 🤖apk 📲
✔️ f07b826 #13 2024-03-19 13:47:06 ~14 min ios 📱ipa 📲
✔️ 57c7e88 #14 2024-03-20 11:13:56 ~5 min tests 📄log
✔️ 57c7e88 #14 2024-03-20 11:15:24 ~7 min android-e2e 🤖apk 📲
✔️ 57c7e88 #14 2024-03-20 11:15:25 ~7 min android 🤖apk 📲
✔️ 57c7e88 #14 2024-03-20 11:26:57 ~18 min ios 📱ipa 📲
✔️ 88f9b5a #16 2024-03-20 14:36:02 ~5 min tests 📄log
✔️ 88f9b5a #16 2024-03-20 14:37:11 ~7 min android 🤖apk 📲
✔️ 88f9b5a #16 2024-03-20 14:37:20 ~7 min android-e2e 🤖apk 📲
✔️ 88f9b5a #16 2024-03-20 14:38:59 ~8 min ios 📱ipa 📲
✔️ 306536a #17 2024-03-20 21:16:59 ~5 min tests 📄log
✔️ 306536a #17 2024-03-20 21:18:25 ~7 min android-e2e 🤖apk 📲
✔️ 306536a #17 2024-03-20 21:18:32 ~7 min android 🤖apk 📲
✔️ 306536a #17 2024-03-20 21:23:39 ~12 min ios 📱ipa 📲
✔️ da1ed99 #18 2024-03-21 17:19:03 ~6 min tests 📄log
✔️ da1ed99 #18 2024-03-21 17:19:13 ~7 min android-e2e 🤖apk 📲
✔️ da1ed99 #18 2024-03-21 17:19:16 ~7 min android 🤖apk 📲
✔️ da1ed99 #18 2024-03-21 17:23:56 ~11 min ios 📱ipa 📲
✔️ df17834 #19 2024-03-21 17:49:08 ~5 min tests 📄log
✔️ df17834 #19 2024-03-21 17:49:37 ~6 min android 🤖apk 📲
✔️ df17834 #19 2024-03-21 17:49:37 ~6 min android-e2e 🤖apk 📲
✔️ df17834 #19 2024-03-21 17:55:04 ~11 min ios 📱ipa 📲
✔️ 5387132 #20 2024-03-22 12:42:32 ~6 min tests 📄log
✔️ 5387132 #20 2024-03-22 12:43:28 ~7 min android-e2e 🤖apk 📲
✔️ 5387132 #20 2024-03-22 12:43:41 ~7 min android 🤖apk 📲
✔️ 5387132 #20 2024-03-22 12:45:20 ~9 min ios 📱ipa 📲
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ b156389 #22 2024-03-22 13:38:13 ~6 min android-e2e 🤖apk 📲
✔️ b156389 #22 2024-03-22 13:39:32 ~7 min android 🤖apk 📲
✔️ b156389 #22 2024-03-22 13:42:34 ~10 min ios 📱ipa 📲
✔️ 7233215 #23 2024-03-22 17:23:36 ~5 min tests 📄log
✔️ 7233215 #23 2024-03-22 17:25:00 ~7 min android-e2e 🤖apk 📲
✔️ 7233215 #23 2024-03-22 17:25:04 ~7 min android 🤖apk 📲
✔️ 7233215 #23 2024-03-22 17:29:23 ~11 min ios 📱ipa 📲

@mmilad75 mmilad75 self-assigned this Mar 6, 2024
@@ -485,3 +485,15 @@
:type :negative
:text (i18n/label :t/provider-is-down {:chains chain-names})
:duration 10000}]]])})))

(def send-asset-flow-config
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

imo this should not be in the events file.

I think a better location for this is:
src/status_im/contexts/wallet/send/flow-config.cljs

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about a namespace to store different flow configs?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure, one or the other. my only thing is that the flow-config should live close to where their data model is used given that the skip-step? functionality is coupled to that.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice 👍

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@@ -294,3 +289,35 @@
{:event :wallet/send-transaction
:error error
:params request-params}))}]})))

(rf/reg-event-fx
:navigation/wizard-send-flow
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

imo this event name should be qualified with :wallet/ as it is related to the wallet.
I think the naming is unclear to what action is happening here too.
I think :wallet/navigate-to-next-step or something would be fine.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure this is necessary at all 🤔

If we replace the :navigate-to-within-stack and :open-modal calls with :navigation/wizard calls (or whatever we rename that event to) this should not be necessary IMO

:flow-config wallet-events/send-asset-flow-config}])))

(rf/reg-event-fx
:navigation/wizard-back-send-flow
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we not have a generic wizard event for this?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

especially this part

(if (= (count stack) 1)
       (rf/dispatch [:navigate-back])
       (rf/dispatch [:navigate-back-within-stack current-screen])

which is not wallet specific

{:screen-id :wallet-send-input-amount
:skip-step? (fn [db] (some? (get-in db [:wallet :ui :send :amount])))
:event :wallet/send-select-amount}
{:screen-id :wallet-transaction-confirmation}])
Copy link
Member

@briansztamfater briansztamfater Mar 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe transaction-progress is missing from the flow

on-change-tab #(rf/dispatch [:wallet/select-address-tab %])
input-value (reagent/atom "")
input-focused? (reagent/atom false)]
(fn []
(let [selected-tab (or (rf/sub [:wallet/send-tab]) (:id (first tabs-data)))
token (rf/sub [:wallet/wallet-send-token])
;; token (rf/sub [:wallet/wallet-send-token])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do we comment this btw?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was not used in the code. I forgot to remove the line

(fn [{:keys [db]}]
(let [stack (:modal-view-ids db)
current-screen (last stack)]
(case current-screen
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a bit strange to me, for the navigate forward we are passing the event? but for the navigate back we are putting them all in the navigate backwards.

maybe it's cleaner to just write new re-frame events for each and fire them from the given page?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we are over-engineering here?

I'd say wizarding logic should only take care of navigation, not side effects of navigating.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I agree 👌

Comment on lines 68 to 71
[:navigate-to-within-stack
(if token?
[:wallet-send-input-amount stack-id]
[:wallet-select-asset stack-id])]]]})))
Copy link
Member

@briansztamfater briansztamfater Mar 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should just replace these events dispatch with :navigation/wizard calls (which will then lead to a navigate event) instead of removing them. Wizard events should just resolve navigation. WDYT @J-Son89 @mmilad75?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah I think that might be easier to do this way, as then we don't have to pass the event to the wizard to call,right?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

perhaps you could provide a code snippet example of how you see that looking @briansztamfater ?

Copy link
Member

@briansztamfater briansztamfater Mar 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I believe that something like this should work. In that way, we only modify navigation logic, and :navigation/wizard would decide to which screen to navigate next.

(rf/reg-event-fx
 :wallet/select-send-address
 (fn [{:keys [db]} [{:keys [address token? recipient]}]]
   (let [[prefix to-address] (utils/split-prefix-and-address address)
         test-net?           (get-in db [:profile/profile :test-networks-enabled?])
         goerli-enabled?     (get-in db [:profile/profile :is-goerli-enabled?])
	@@ -64,24 +65,19 @@
              (assoc-in [:wallet :ui :send :to-address] to-address)
              (assoc-in [:wallet :ui :send :address-prefix] prefix)
              (assoc-in [:wallet :ui :send :selected-networks] selected-networks))
      :fx [[:dispatch
            [:navigation/wizard
               {:current-screen :wallet-select-address
                :flow-config       send-flow-config}]]]})))

Copy link
Member

@briansztamfater briansztamfater Mar 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For :wallet/send-select-token, would be

(rf/reg-event-fx :wallet/send-select-token
 (fn [{:keys [db]} [{:keys [token]}]]
   {:db (-> db
            (update-in [:wallet :ui :send] dissoc :collectible)
            (assoc-in [:wallet :ui :send :token] token))
    :fx [[:dispatch [:wallet/clean-suggested-routes]]
         [:dispatch [:navigation/wizard {:current-screen :wallet-select-asset
                                         :flow-config    send-flow-config}]]]}))

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, we still need to call the previous event which is :wallet/select-send-address in the screen (and the same for other screens). Both cases seem ok to me @J-Son89 @briansztamfater

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mmilad75 Sounds good to me, IMO that will make the approach simpler and the code easier to understand

(not (when (not (nil? skip-step)) (skip-step db))))))
flow-config)))

(rf/reg-event-fx
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

imo it would be nice to have three separate events here.

:navigation/wizard-start
:navigation/wizard-next-step
:navigation/wizard-previous-step

as it's quite obvious from the event of what is happening then.

the lifecycle events of each step can be then easily passed as params if needs be:
e.g on-start, on-next, on-previous, there can also be an on-finish if we need that, but for now it seems not needed 🤔

Comment on lines 208 to 209
(when (some? event)
(rf/dispatch [event params]))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you elaborate on why we need this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On each screen, when the submit button is pressed, we're dispatching an event. Now, the event is saved in the config file, and the params are in the screen passed to the navigator. Here, I check, if there is an event, then dispatch it.

Comment on lines 132 to 136
(rf/dispatch [:wallet/clean-scanned-address])
(rf/dispatch [:wallet/clean-local-suggestions])
(rf/dispatch [:wallet/clean-selected-token])
(rf/dispatch [:wallet/clean-selected-collectible])
(rf/dispatch [:wallet/clean-send-address])
(rf/dispatch [:wallet/select-address-tab nil])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO, this logic should remain the same (I am not saying this could not be improved, but at least not be modified in this PR which should only modify navigation stuff).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The logic is still the same, I just moved them to the navigator 🤔

current-screen (last stack)]
(case current-screen
:wallet-select-address (do
(rf/dispatch [:wallet/clean-scanned-address])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @mmilad75, this should never be done with re-frame. Events are pure functions. dispatch is a side-effect. Please, use :fx and core Clojure functions to build the map of effects.

flow-config)))

(rf/reg-event-fx
:navigation/wizard
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe a longer comment here could help. How does one use this event properly? What's a flow and how does one configure it?

(when (some? event)
(rf/dispatch [event params]))
(if is-first?
(rf/dispatch [:open-modal (:screen-id next-screen)])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As I mentioned in another comment, re-frame event handlers should return a map with :db and/or :fx (the map of effects) describing what needs to be done, but not really do (mutate) anything. The execution should be left to re-frame.

src/status_im/navigation/events.cljs Outdated Show resolved Hide resolved

(rf/reg-event-fx
:navigation/wizard
(fn [{:keys [db]} [{:keys [current-screen flow-config params is-first?]}]]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is-first? -> first?

(rf/reg-event-fx
:navigation/wizard
(fn [{:keys [db]} [{:keys [current-screen flow-config params is-first?]}]]
(let [next-screen (navigate-wizard-next-screen db flow-config current-screen)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The name navigate-wizard-next-screen gives me the impression it will actually navigate, but the function only computes the next screen. I would rename that to something like wizard-find-next-screen or find-wizard-next-screen (some people prefer to have the noun before the verb because it helps categorize functions).

(fn [_ [{:keys [current-screen params is-first?]}]]
(when is-first?
(rf/dispatch [:wallet/clean-send-data]))
(rf/dispatch [:navigation/wizard
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as another comment I made: event handlers should compute and have no side-effects.

@ilmotta
Copy link
Contributor

ilmotta commented Mar 7, 2024

@mmilad75 I'm missing an explanation both in the PR description, as well as in code about how the wizard mechanism should be used and some decisions that were made to devise it.

While reviewing it, I didn't fully understood how should I approach the problem and what to review specifically. For instance, do we want to create a more general wizard like implementation to be used outside the wallet? There are many ways we could go about it. I see the solution is currently only used for the wallet context, so maybe the solution should first grow there, and only once proven and stabilized moved to the general navigation namespace.

Was this idea developed in conjunction with other wallet team members? I ask that because I might be missing the context, but anyway the PR and could give more details.

@@ -8,11 +8,11 @@
(defn- view-internal
[]
[input-amount/view
{:current-screen-id :screen/wallet.send-input-amount
{:current-screen-id :wallet-send-input-amount
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please revert this 👍

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice Catch 👍

@@ -188,3 +188,30 @@
(let [view-id (if (= view-id :shell-stack) (shell.utils/calculate-view-id) view-id)]
{:db (assoc db :view-id view-id)
:set-view-id-fx view-id}))

(defn wizard-find-next-screen
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we mark this as private?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@@ -157,7 +155,6 @@
:on-press #(rf/dispatch
[:wallet/select-send-address
{:address @input-value
:token? (some? token)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice! 🚀

Copy link
Member

@J-Son89 J-Son89 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

great work @mmilad75, navigation looks much cleaner and easier to extend now :D

(let [stack (:modal-view-ids db)
current-screen (last stack)]
{:fx [[:dispatch
(if (= (count stack) 1)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wonder if we can check if current screen is the first in the flow without using modal-view-ids. After merging #19163 I think we can use :view-id and compare it with the first screen in the flow that is passed in :navigation/wizard-forward when start-flow? is true (we may need a new key like :wizard/initial-screen to store it). If that works we could think of removing :modal-view-ids cc @smohamedjavid @Parveshdhull

Copy link
Member

@Parveshdhull Parveshdhull Mar 14, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @briansztamfater for pinging me

image

We should get rid of :navigate-back-within-stack and just use :navigate-back. And navigate-back should handle this logic of popping the screen based on where we are in navigation. (within a stack or pushing in root)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And if we directly want to pop to a specific screen, we can just use. :navigate-back-to

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, in short we don't need :navigation/wizard-backward, this should be handled by navigation itself. (what to pop, pushed screen or root itself).

navigate-within-stack is new functionality we introduced for on-boarding. Its still a little immature, and we need to improve it. We should modify navigation code itself according to this feature.

Copy link
Member

@Parveshdhull Parveshdhull Mar 14, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So before merging this PR

  1. We merge @briansztamfater's PR - fix: view-id not updating when navigating inside modals #19163
  2. Then remove modal-view-ids
  3. Then remove :navigate-back-within-stack and add this feature to :navigate-back itself.
  4. Then if we agree on wizard navigation, then refactor this PR according to new/simple state of navigation.

(Because if we keep implementing new functionality on already complex code, it will harder to simplify it later)

wdyt @briansztamfater @J-Son89 ?

Copy link
Member

@Parveshdhull Parveshdhull Mar 14, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @J-Son89,
I think Brian's PR is ready to merge, as soon as e2e tests are complete.
I will create issues for task 2 & 3, will complete by Monday.

(feel free to pick these tasks if anyone interested)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: #19254

Copy link
Member

@briansztamfater briansztamfater Mar 14, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Parveshdhull I agree with the approach of getting rid of :navigate-back-within-stack and handle both cases in :navigate-back. Currently :navigate-back always dismisses the current modal, so we should refactor that logic if we want it to support navigating back within modals in that event. Maybe we should remove this line and if we want to dismiss a modal, explicitly dispatch :dismiss-modal event, or keep that call only if :view-id it is the first screen in the stack. If the last option is not possible, maybe we would still need :navigation/wizard-backward which should decide wether to dispatch :navigate-back or :dismiss-modal. If we can handle that within :navigate-back in a generic way, we could definitely remove :navigation/wizard-backward.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Completed 2&3, so this PR can be unblocked - #19274

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Copy link
Member

@briansztamfater briansztamfater left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work @mmilad75!

Comment on lines 184 to 190
:navigation/wizard-forward
(fn [{:keys [db]} [{:keys [current-screen flow-config start-flow?]}]]
(let [next-screen (wizard-find-next-screen db flow-config current-screen)]
{:fx [[:dispatch
(if start-flow?
[:open-modal (:screen-id next-screen)]
[:navigate-to-within-stack [(:screen-id next-screen) current-screen]])]]})))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should it be part of navigation or some other namespace wizard/utils etc. It directly don't look navigation but a specific logic 🤔. @J-Son89 ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure it's not core navigation. If you want to move it out of navigation then,
status-im/common/wizard seems like an appropriate place 👍

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure it's not core navigation. If you want to move it out of navigation then, status-im/common/wizard seems like an appropriate place 👍

cc @mmilad75

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@mmilad75
Copy link
Contributor Author

@mmilad75 - tested this pr on a real device. The send flow is missing the transaction page at the end. Can you please correct this 🙏

Also at the end of the sending flow it is currently navigating back to the wrong page.

At the end of the send flow, the navigation should return to the wallet account page. Can you address this before QA takes a look and please leave the steps to test/ what flows are covered here (e.g - they can skip the flow when you select send asset from the wallet home as we need to add the "From" send page.)

Everything should be working fine now

Copy link
Member

@Parveshdhull Parveshdhull left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work @mmilad75, Thank you

Comment on lines 16 to 19
(let [flow-config (case flow-id
:wallet-flow wallet-flow/steps
nil)
next-screen (wizard-find-next-screen db flow-config current-screen)]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should just pass flow-id to wizard-find-next-screen and have this let block there.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@mmilad75 mmilad75 moved this from REVIEW to E2E Tests in Pipeline for QA Mar 21, 2024
@status-im-auto
Copy link
Member

79% of end-end tests have passed

Total executed tests: 48
Failed tests: 9
Expected to fail tests: 1
Passed tests: 38
IDs of failed tests: 702733,702813,703495,702894,702745,702855,703202,703391,702731 
IDs of expected to fail tests: 703503 

Failed tests (9)

Click to expand
  • Rerun failed tests

  • Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_text_message_delete_push_disappear, id: 702733

    Device 2: Find `Button` by `accessibility id`: `jump-to`

    critical/chats/test_1_1_public_chats.py:459: in test_1_1_chat_text_message_delete_push_disappear
        self.chat_2.jump_to_card_by_text(self.username_1)
    ../views/base_view.py:659: in jump_to_card_by_text
        self.click_on_floating_jump_to()
    ../views/base_view.py:648: in click_on_floating_jump_to
        self.jump_to_button.click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 2: Button by accessibility id: `jump-to` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception; also Unexpected Alert is shown: 'Feature not implemented.'; also Unexpected Alert is shown: 'Feature not implemented.'
    



    Device sessions

    2. test_1_1_chat_push_emoji, id: 702813

    Device 2: Find ProfileButton by accessibility id: open-profile
    Device 1: Find ChatsTab by accessibility id: chats-stack-tab

    critical/chats/test_1_1_public_chats.py:321: in test_1_1_chat_push_emoji
        self.home_1.chats_tab.click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: ChatsTab by accessibility id: `chats-stack-tab` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception; also Unexpected Alert is shown: 'Feature not implemented.'
    



    Device sessions

    3. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745

    Device 1: Tap on found: Button
    Device 1: Find Button by xpath: //*[@text="receiver"]

    critical/chats/test_1_1_public_chats.py:276: in test_1_1_chat_non_latin_messages_stack_update_profile_photo
        self.home_1.jump_to_card_by_text(self.username_2)
    ../views/base_view.py:660: in jump_to_card_by_text
        self.element_by_text(text).click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: Button by xpath: `//*[@text="receiver"]` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception; also Unexpected Alert is shown: 'Feature not implemented.'
    



    Device sessions

    4. test_1_1_chat_edit_message, id: 702855

    Device 2: Tap on found: Button
    Device 2: Find Button by xpath: //*[@text="sender"]

    critical/chats/test_1_1_public_chats.py:372: in test_1_1_chat_edit_message
        self.chat_2.jump_to_card_by_text(self.username_1)
    ../views/base_view.py:660: in jump_to_card_by_text
        self.element_by_text(text).click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 2: Button by xpath: `//*[@text="sender"]` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception; also Unexpected Alert is shown: 'Feature not implemented.'; also Unexpected Alert is shown: 'Feature not implemented.'
    



    Device sessions

    5. test_1_1_chat_send_image_save_and_share, id: 703391

    Device 2: Find Button by accessibility id: jump-to

    critical/chats/test_1_1_public_chats.py:398: in test_1_1_chat_send_image_save_and_share
        self.chat_2.jump_to_card_by_text(self.username_1)
    ../views/base_view.py:659: in jump_to_card_by_text
        self.click_on_floating_jump_to()
    ../views/base_view.py:648: in click_on_floating_jump_to
        self.jump_to_button.click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 2: Button by accessibility id: `jump-to` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception; also Unexpected Alert is shown: 'Feature not implemented.'; also Unexpected Alert is shown: 'Feature not implemented.'
    



    Device sessions

    6. test_1_1_chat_pin_messages, id: 702731

    Device 1: Find Text by xpath: //*[starts-with(@text,'Message 4')]/ancestor::android.view.ViewGroup[@content-desc='chat-item']//*[@content-desc='message-status']/android.widget.TextView
    Device 1: Text is Sent

    critical/chats/test_1_1_public_chats.py:222: in test_1_1_chat_pin_messages
        self.chat_1.chat_element_by_text(message).wait_for_status_to_be("Delivered")
    ../views/chat_view.py:225: in wait_for_status_to_be
        raise TimeoutException("Message status was not changed to %s, it's %s" % (expected_status, current_status))
     Message status was not changed to Delivered, it's Sent
    



    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_contact_block_unblock_offline, id: 702894

    Device 2: Text is Delivered
    Device 1: Looking for a message by text: Hurray! unblocked

    critical/chats/test_public_chat_browsing.py:740: in test_community_contact_block_unblock_offline
        self.errors.verify_no_errors()
    base_test_case.py:190: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     1-1 chat from blocked user is not removed and messages home is not empty!
    



    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_mute_chat, id: 703495

    # STEP: Change device time so chat will be unmuted by timer
    Device 2: Long press on ChatElement

    critical/chats/test_group_chat.py:459: in test_group_chat_mute_chat
        chat.long_press_element()
    ../views/base_element.py:323: in long_press_element
        action.long_press(element).release().perform()
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/common/touch_action.py:174: in perform
        self._driver.execute(Command.TOUCH_ACTION, params)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:345: in execute
        self.error_handler.check_response(response)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/errorhandler.py:122: in check_response
        raise exception_class(msg=message, stacktrace=format_stacktrace(stacktrace))
     The element 'By.xpath: //*[@content-desc='author-primary-name'][starts-with(@text,'jnrenvy')]/..' is not linked to the same object in DOM anymore; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#stale-element-reference-exception
    E   Stacktrace:
    E   io.appium.uiautomator2.common.exceptions.StaleElementReferenceException: The element 'By.xpath: //*[@content-desc='author-primary-name'][starts-with(@text,'jnrenvy')]/..' is not linked to the same object in DOM anymore
    E   	at io.appium.uiautomator2.model.ElementsCache.restore(ElementsCache.java:122)
    E   	at io.appium.uiautomator2.model.ElementsCache.get(ElementsCache.java:153)
    E   	at io.appium.uiautomator2.handler.Location.safeHandle(Location.java:23)
    E   	at io.appium.uiautomator2.handler.request.SafeRequestHandler.handle(SafeRequestHandler.java:59)
    E   	at io.appium.uiautomator2.server.AppiumServlet.handleRequest(AppiumServlet.java:277)
    E   	at io.appium.uiautomator2.server.AppiumServlet.handleHttpRequest(AppiumServlet.java:271)
    E   	at io.appium.uiautomator2.http.ServerHandler.channelRead(ServerHandler.java:68)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:435)
    E   	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)
    E   	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)
    E   	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:250)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:266)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1294)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:911)
    E   	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:611)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:552)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:466)
    E   	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:438)
    E   	at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:140)
    E   	at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
    E   	at java.lang.Thread.run(Thread.java:1012)
    



    Device sessions

    2. test_group_chat_reactions, id: 703202

    Device 3: Adding one more 'sad' reaction or removing an added one
    Device 3: Wait for element Button for max 30s and click when it is available

    critical/chats/test_group_chat.py:162: in test_group_chat_reactions
        self.chats[2].add_remove_same_reaction(message=message, emoji="sad")
    ../views/chat_view.py:1082: in add_remove_same_reaction
        element.wait_and_click()
    ../views/base_element.py:100: in wait_and_click
        self.wait_for_visibility_of_element(sec)
    ../views/base_element.py:147: in wait_for_visibility_of_element
        raise TimeoutException(
     Device 3: Button by accessibility id:`emoji-reaction-5` is not found on the screen after wait_for_visibility_of_element
    



    Device sessions

    Expected to fail tests (1)

    Click to expand

    Class TestCommunityOneDeviceMerged:

    1. test_community_discovery, id: 703503

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Curated communities not loading, https://github.com//issues/17852]]

    Passed tests (38)

    Click to expand

    Class TestCommunityOneDeviceMerged:

    1. test_restore_multiaccount_with_waku_backup_remove_switch, id: 703133
    Device sessions

    2. test_community_copy_and_paste_message_in_chat_input, id: 702742
    Device sessions

    3. test_community_undo_delete_message, id: 702869
    Device sessions

    4. test_community_navigate_to_channel_when_relaunch, id: 702846
    Device sessions

    5. test_community_mute_community_and_channel, id: 703382
    Device sessions

    Class TestDeepLinksOneDevice:

    1. test_links_open_universal_links_from_chat, id: 704613
    Device sessions

    2. test_links_deep_links, id: 702775
    Device sessions

    Class TestActivityMultipleDevicePR:

    1. test_navigation_jump_to, id: 702936
    Device sessions

    2. test_activity_center_reply_read_unread_delete_filter_swipe, id: 702947
    Device sessions

    Class TestActivityCenterContactRequestMultipleDevicePR:

    1. test_add_contact_field_validation, id: 702777
    Device sessions

    2. test_activity_center_contact_request_accept_swipe_mark_all_as_read, id: 702851
    Device sessions

    3. test_activity_center_contact_request_decline, id: 702850
    Device sessions

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_markdown_support, id: 702809
    Device sessions

    2. test_community_hashtag_links_to_community_channels, id: 702948
    Device sessions

    3. test_community_mentions_push_notification, id: 702786
    Device sessions

    4. test_community_leave, id: 702845
    Device sessions

    5. test_community_join_when_node_owner_offline, id: 703629
    Device sessions

    Class TestActivityMultipleDevicePRTwo:

    1. test_activity_center_mentions, id: 702957
    Device sessions

    2. test_activity_center_admin_notification_accept_swipe, id: 702958
    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_several_images_send_reply, id: 703194
    Device sessions

    2. test_community_one_image_send_reply, id: 702859
    Device sessions

    3. test_community_emoji_send_copy_paste_reply, id: 702840
    Device sessions

    4. test_community_mark_all_messages_as_read, id: 703086
    Device sessions

    5. test_community_edit_delete_message_when_offline, id: 704615
    Device sessions

    6. test_community_message_delete, id: 702839
    Device sessions

    7. test_community_message_send_check_timestamps_sender_username, id: 702838
    Device sessions

    8. test_community_links_with_previews_github_youtube_twitter_gif_send_enable, id: 702844
    Device sessions

    9. test_community_message_edit, id: 702843
    Device sessions

    10. test_community_unread_messages_badge, id: 702841
    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_pin_messages, id: 702732
    Device sessions

    2. test_group_chat_send_image_save_and_share, id: 703297
    Device sessions

    3. test_group_chat_join_send_text_messages_push, id: 702807
    Device sessions

    4. test_group_chat_offline_pn, id: 702808
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_emoji_send_reply_and_open_link, id: 702782
    Device sessions

    2. test_1_1_chat_message_reaction, id: 702730
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUiTwo:

    1. test_1_1_chat_delete_via_long_press_relogin, id: 702784
    Device sessions

    2. test_1_1_chat_is_shown_message_sent_delivered_from_offline, id: 702783
    Device sessions

    3. test_1_1_chat_mute_chat, id: 703496
    Device sessions

    @mariia-skrypnyk mariia-skrypnyk moved this from E2E Tests to IN TESTING in Pipeline for QA Mar 22, 2024
    @mariia-skrypnyk mariia-skrypnyk self-assigned this Mar 22, 2024
    @mariia-skrypnyk
    Copy link

    Hi @mmilad75 !
    Can you please provide me steps to test/ what flows are covered here?
    Thanks!

    @mariia-skrypnyk
    Copy link

    Hi @mmilad75 !
    Thanks for such a detailed steps for QA's!

    Navigation really looks very smooth except one place.
    Let me show you!

    ISSUE 1: Select Asset screen is present when we go back in a "Long Press on Asset" scenario

    On a given wallet account, after long pressing an asset, and then selecting Send in the modal, the following screens should be displayed in order:
    Send To
    Input Amount
    Transaction Confirmation
    Transaction Progress

    Steps:

    1. Login to app
    2. Go to Wallet
    3. Make a long tap on asset with an amount you have
    4. Put receiver address on Send to screen
    5. Go to Input Amount
    6. Go back
    7. Tap continue on Send to screen

    Actual result: User sees Select Asset screen that he shouldn't see as he already chosen one at the start

    IMG_7602.MP4

    Expected result: Select Asset screen shouldn't be present in this scenario

    @status-im-auto
    Copy link
    Member

    33% of end-end tests have passed

    Total executed tests: 9
    Failed tests: 6
    Expected to fail tests: 0
    Passed tests: 3
    
    IDs of failed tests: 702733,702813,702894,702745,702855,703391 
    

    Failed tests (6)

    Click to expand
  • Rerun failed tests

  • Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_text_message_delete_push_disappear, id: 702733

    Device 2: Find `Button` by `accessibility id`: `jump-to`

    critical/chats/test_1_1_public_chats.py:459: in test_1_1_chat_text_message_delete_push_disappear
        self.chat_2.jump_to_card_by_text(self.username_1)
    ../views/base_view.py:659: in jump_to_card_by_text
        self.click_on_floating_jump_to()
    ../views/base_view.py:648: in click_on_floating_jump_to
        self.jump_to_button.click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 2: Button by accessibility id: `jump-to` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception; also Unexpected Alert is shown: 'Feature not implemented.'; also Unexpected Alert is shown: 'Feature not implemented.'
    



    Device sessions

    2. test_1_1_chat_push_emoji, id: 702813

    Device 2: Find ProfileButton by accessibility id: open-profile
    Device 1: Find ChatsTab by accessibility id: chats-stack-tab

    critical/chats/test_1_1_public_chats.py:321: in test_1_1_chat_push_emoji
        self.home_1.chats_tab.click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: ChatsTab by accessibility id: `chats-stack-tab` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception; also Unexpected Alert is shown: 'Feature not implemented.'
    



    Device sessions

    3. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745

    Device 1: Tap on found: Button
    Device 1: Find Button by xpath: //*[@text="receiver"]

    critical/chats/test_1_1_public_chats.py:276: in test_1_1_chat_non_latin_messages_stack_update_profile_photo
        self.home_1.jump_to_card_by_text(self.username_2)
    ../views/base_view.py:660: in jump_to_card_by_text
        self.element_by_text(text).click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: Button by xpath: `//*[@text="receiver"]` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception; also Unexpected Alert is shown: 'Feature not implemented.'
    



    Device sessions

    4. test_1_1_chat_edit_message, id: 702855

    Device 2: Tap on found: Button
    Device 2: Find Button by xpath: //*[@text="sender"]

    critical/chats/test_1_1_public_chats.py:372: in test_1_1_chat_edit_message
        self.chat_2.jump_to_card_by_text(self.username_1)
    ../views/base_view.py:660: in jump_to_card_by_text
        self.element_by_text(text).click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 2: Button by xpath: `//*[@text="sender"]` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception; also Unexpected Alert is shown: 'Feature not implemented.'; also Unexpected Alert is shown: 'Feature not implemented.'
    



    Device sessions

    5. test_1_1_chat_send_image_save_and_share, id: 703391

    Device 2: Find Button by accessibility id: jump-to

    critical/chats/test_1_1_public_chats.py:398: in test_1_1_chat_send_image_save_and_share
        self.chat_2.jump_to_card_by_text(self.username_1)
    ../views/base_view.py:659: in jump_to_card_by_text
        self.click_on_floating_jump_to()
    ../views/base_view.py:648: in click_on_floating_jump_to
        self.jump_to_button.click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 2: Button by accessibility id: `jump-to` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception; also Unexpected Alert is shown: 'Feature not implemented.'; also Unexpected Alert is shown: 'Feature not implemented.'
    



    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_contact_block_unblock_offline, id: 702894

    Device 2: Text is Delivered
    Device 1: Looking for a message by text: Hurray! unblocked

    critical/chats/test_public_chat_browsing.py:740: in test_community_contact_block_unblock_offline
        self.errors.verify_no_errors()
    base_test_case.py:190: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     1-1 chat from blocked user is not removed and messages home is not empty!
    



    Device sessions

    Passed tests (3)

    Click to expand

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_pin_messages, id: 702731
    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_mute_chat, id: 703495
    Device sessions

    2. test_group_chat_reactions, id: 703202
    Device sessions

    @mariia-skrypnyk
    Copy link

    Hi @mmilad75 !

    Navigation works correct as you've described.
    Checked on both platforms and in both ways: next<->back
    Thanks for your implementation.
    Failed e2e are not related.

    @mariia-skrypnyk mariia-skrypnyk moved this from IN TESTING to MERGE in Pipeline for QA Mar 22, 2024
    @mmilad75 mmilad75 merged commit c003db4 into develop Mar 22, 2024
    6 checks passed
    Pipeline for QA automation moved this from MERGE to DONE Mar 22, 2024
    @mmilad75 mmilad75 deleted the milad/19059-create-new-navigation-flow branch March 22, 2024 17:30
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    Archived in project
    8 participants