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

feat: add new theming mechanism #16191

Merged
merged 5 commits into from
Jun 23, 2023
Merged

feat: add new theming mechanism #16191

merged 5 commits into from
Jun 23, 2023

Conversation

J-Son89
Copy link
Contributor

@J-Son89 J-Son89 commented Jun 5, 2023

This pr serves two purposes. It partially fixes: https://github.com/orgs/status-im/projects/90?pane=issue&itemId=29571439
mostly a UI bug from not setting override-prop for these buttons in activity centre. ( "accept + decline swipe action colors should match button colors" )

However the main focus of this pr is to introduce a new approach to how provide the current theme across the application.

New theming mechanism

The current implementation is causing a few issues - There is no scoped theming, which means that for parts of the application which have one theme but other content available on that same screen are using a different theme. At this point it is mostly shell theme, for example Activity Centre behaves this way. Activity Centre uses shell theme while the page behind it uses the users theme.

The current solution to workaround this is to make use of the override-prop. This becomes very tedious, is error prone and requires a lot of additional work to maintain and implement features using this approach. Additionally all calls to (theme/get-theme) are insufficient on their own as there is a requirement to check the value of override-theme as well. Simply there are two sources of truth for the current theme.
This approach leads to prop drilling override-theme through multiple components, and then further set this prop on every page which is using another theme.

New Approach

Instead this pr makes use of React Context. This means that all that's needed is a React Context Provider at the outer scope of any page, component, modal (any React component really).
From there components can make a call to the useContext hook and it will receive the value of theme from the nearest React Context Provider.
Mostly we will use this at the App Root level and then over components such as Activity Center ( I think Profile too) etc

With this approach we can remove the need for override-theme and we use a HOC to pass theme directly as a prop to all Quo2 components for which they can use theme from there.
This leads to a single source of truth and means all helper functions etc are easier to use as a result.

Further, if going forward we can define themes as a set of values we can use this approach to load in themes directly to the components 👍

For more information see:
https://react.dev/learn/passing-data-deeply-with-context

https://react.dev/reference/react/useContext


(defn ^:private f-with-theme
[component props & args]
(let [theme (theme/use-theme)]
Copy link
Contributor Author

Choose a reason for hiding this comment

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

create a with theme HOC to pass theme prop to all components using this.

(defn screen-wrapper
[{:keys [insets background-color component sheet? screen-theme]}]
(let [user-theme (quo2.theme/get-theme)]
[theme/provider (or screen-theme user-theme)
Copy link
Contributor Author

Choose a reason for hiding this comment

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

we wrap the app root in a theme provider

@status-im-auto
Copy link
Member

status-im-auto commented Jun 5, 2023

Jenkins Builds

Click to see older builds (57)
Commit #️⃣ Finished (UTC) Duration Platform Result
36cf30e #1 2023-06-05 20:13:22 ~3 min tests 📄log
✔️ 36cf30e #1 2023-06-05 20:15:13 ~5 min android-e2e 🤖apk 📲
✔️ 36cf30e #1 2023-06-05 20:15:20 ~5 min android 🤖apk 📲
✔️ 36cf30e #1 2023-06-05 20:16:04 ~6 min ios 📱ipa 📲
✔️ 5ede5d9 #2 2023-06-08 01:29:13 ~5 min android 🤖apk 📲
✔️ 5ede5d9 #2 2023-06-08 01:30:02 ~6 min android-e2e 🤖apk 📲
✔️ 5ede5d9 #2 2023-06-08 01:30:09 ~6 min ios 📱ipa 📲
✔️ 5ede5d9 #2 2023-06-08 01:32:05 ~8 min tests 📄log
✔️ e9f128b #4 2023-06-08 17:33:11 ~6 min ios 📱ipa 📲
✔️ e9f128b #4 2023-06-08 17:33:20 ~6 min android 🤖apk 📲
✔️ e9f128b #4 2023-06-08 17:33:25 ~6 min android-e2e 🤖apk 📲
✔️ e9f128b #4 2023-06-08 17:34:47 ~7 min tests 📄log
✔️ ce974e1 #5 2023-06-14 16:49:23 ~5 min ios 📱ipa 📲
✔️ ce974e1 #5 2023-06-14 16:56:55 ~13 min android-e2e 🤖apk 📲
✔️ ce974e1 #5 2023-06-14 16:57:55 ~14 min android 🤖apk 📲
✔️ ce974e1 #5 2023-06-14 17:00:26 ~16 min tests 📄log
✔️ b3c881e #6 2023-06-16 10:09:28 ~5 min android-e2e 🤖apk 📲
✔️ b3c881e #6 2023-06-16 10:09:33 ~5 min android 🤖apk 📲
✔️ b3c881e #6 2023-06-16 10:10:04 ~6 min ios 📱ipa 📲
✔️ b3c881e #6 2023-06-16 10:11:53 ~7 min tests 📄log
✔️ 3343a2b #7 2023-06-16 11:25:58 ~5 min ios 📱ipa 📲
✔️ 3343a2b #7 2023-06-16 11:26:05 ~5 min android 🤖apk 📲
✔️ 3343a2b #7 2023-06-16 11:27:06 ~6 min android-e2e 🤖apk 📲
✔️ 3343a2b #7 2023-06-16 11:29:01 ~8 min tests 📄log
8f3086a #8 2023-06-16 11:50:26 ~3 min tests 📄log
✔️ 8f3086a #8 2023-06-16 11:52:40 ~5 min android 🤖apk 📲
✔️ 8f3086a #8 2023-06-16 11:52:46 ~5 min ios 📱ipa 📲
✔️ 8f3086a #8 2023-06-16 11:52:54 ~5 min android-e2e 🤖apk 📲
9dc85f4 #9 2023-06-16 12:30:18 ~2 min tests 📄log
✔️ 9dc85f4 #9 2023-06-16 12:33:11 ~5 min ios 📱ipa 📲
✔️ 9dc85f4 #9 2023-06-16 12:34:06 ~6 min android-e2e 🤖apk 📲
✔️ 9dc85f4 #9 2023-06-16 12:34:09 ~6 min android 🤖apk 📲
✔️ f4ff713 #10 2023-06-16 13:33:16 ~6 min android-e2e 🤖apk 📲
✔️ f4ff713 #10 2023-06-16 13:34:58 ~7 min android 🤖apk 📲
✔️ f4ff713 #10 2023-06-16 13:35:58 ~8 min ios 📱ipa 📲
✔️ f4ff713 #10 2023-06-16 13:38:09 ~10 min tests 📄log
✔️ f528516 #12 2023-06-16 13:56:38 ~6 min android-e2e 🤖apk 📲
✔️ f528516 #12 2023-06-16 13:57:40 ~7 min ios 📱ipa 📲
✔️ f528516 #12 2023-06-16 13:58:00 ~7 min android 🤖apk 📲
✔️ f528516 #11 2023-06-16 13:59:54 ~9 min tests 📄log
✔️ cc48d1c #13 2023-06-16 14:22:15 ~5 min ios 📱ipa 📲
✔️ cc48d1c #13 2023-06-16 14:23:32 ~6 min android-e2e 🤖apk 📲
✔️ cc48d1c #13 2023-06-16 14:23:38 ~6 min android 🤖apk 📲
✔️ cc48d1c #12 2023-06-16 14:24:47 ~7 min tests 📄log
8fdc406 #13 2023-06-18 21:02:16 ~3 min tests 📄log
✔️ 8fdc406 #14 2023-06-18 21:05:36 ~6 min android-e2e 🤖apk 📲
✔️ 8fdc406 #14 2023-06-18 21:05:45 ~6 min android 🤖apk 📲
✔️ 8fdc406 #14 2023-06-18 21:07:42 ~8 min ios 📱ipa 📲
22a597c #15 2023-06-19 08:16:35 ~2 min ios 📄log
✔️ 22a597c #15 2023-06-19 08:21:50 ~7 min android-e2e 🤖apk 📲
✔️ 22a597c #14 2023-06-19 08:24:27 ~10 min tests 📄log
✔️ 22a597c #15 2023-06-19 08:24:44 ~10 min android 🤖apk 📲
✔️ 22a597c #16 2023-06-19 08:42:18 ~7 min ios 📱ipa 📲
✔️ c7ba524 #18 2023-06-20 11:10:12 ~7 min ios 📱ipa 📲
✔️ c7ba524 #17 2023-06-20 11:21:14 ~18 min android-e2e 🤖apk 📲
✔️ c7ba524 #17 2023-06-20 11:23:42 ~20 min android 🤖apk 📲
✔️ c7ba524 #16 2023-06-20 11:23:52 ~21 min tests 📄log
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ be35e62 #19 2023-06-22 11:13:14 ~6 min ios 📱ipa 📲
✔️ be35e62 #18 2023-06-22 11:14:08 ~7 min android 🤖apk 📲
✔️ be35e62 #18 2023-06-22 11:16:02 ~9 min android-e2e 🤖apk 📲
✔️ be35e62 #17 2023-06-22 11:20:24 ~13 min tests 📄log
✔️ 3fda0ac #19 2023-06-23 12:00:22 ~7 min android 🤖apk 📲
✔️ 3fda0ac #19 2023-06-23 12:00:23 ~7 min android-e2e 🤖apk 📲
✔️ 3fda0ac #20 2023-06-23 12:00:46 ~7 min ios 📱ipa 📲
✔️ 3fda0ac #18 2023-06-23 12:03:20 ~9 min tests 📄log

:on-scroll-to-index-failed identity
:on-end-reached #(rf/dispatch [:activity-center.notifications/fetch-next-page])
:render-fn notification-component}]]))))
[theme/provider :dark
Copy link
Contributor Author

Choose a reason for hiding this comment

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

activity centre is also wrapped in a theme provider and set to dark.

Copy link
Member

Choose a reason for hiding this comment

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

Quick Question: Since the app root is wrapped with the theme provider. Is there a way we can pass the theme key (:light or :dark) as screen params just like :sheet? and send it to the provider? If yes, that would reduce the wrapping of the screen component again with the specified theme key.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

yeah that sounds like a nice solution. Seems like it would work to me We can definitely try this approach out! :)

@@ -95,3 +95,5 @@
:height size
:disabled disabled
:background-color background-color}])]]))

(def view (with-theme/with-theme view-internal))
Copy link
Contributor Author

Choose a reason for hiding this comment

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

an example use case of a wrapped component using with-theme HOC

@du82
Copy link
Contributor

du82 commented Jun 5, 2023

More theming options would be awesome, especially if theres an option to define our own colors with some sort of color picker.

Here's how Signal does it:
Screenshot_2023-06-05-17-59-44-42_4b14b257287ac0a6d1fd5fbb2487716f

Copy link
Contributor

@OmarBasem OmarBasem left a comment

Choose a reason for hiding this comment

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

Good change 👍

[status-im2.common.bottom-sheet-screen.view :as bottom-sheet-screen]
[status-im2.common.theme.core :as theme]
[quo2.theme :as quo2.theme]
))
Copy link
Contributor

Choose a reason for hiding this comment

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

trailing brackets

[:f> bottom-sheet-screen/f-view component]
[component])]
(when js/goog.DEBUG

Copy link
Contributor

@OmarBasem OmarBasem Jun 6, 2023

Choose a reason for hiding this comment

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

There is an extra empty line I think?

Copy link
Member

@smohamedjavid smohamedjavid left a comment

Choose a reason for hiding this comment

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

I like this solution. It reduces a lot of override-theme key used in our codebase.

Great work! @J-Son89!

(defn ^:private f-with-theme
[component props & args]
(let [theme (theme/use-theme)]
(tap> theme)
Copy link
Member

Choose a reason for hiding this comment

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

I guess you forgot to remove the tap>

Copy link
Contributor Author

Choose a reason for hiding this comment

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

yep thanks! :eye

[rn/view {:style (wrapped-screen-style insets background-color)}
[inactive]
(if sheet?
[:f> bottom-sheet-screen/f-view component]
Copy link
Member

Choose a reason for hiding this comment

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

Not for this PR, Just a reminder, We need this solution for the bottom-sheet too. For instance, the How to scan bottom sheet is a dark theme by default, and the Request to join community sheet is user themed.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yep absolutely, tried to keep this pr focused on the bare minimum to get it working but you are right in that we will need to add it there too!

:on-scroll-to-index-failed identity
:on-end-reached #(rf/dispatch [:activity-center.notifications/fetch-next-page])
:render-fn notification-component}]]))))
[theme/provider :dark
Copy link
Member

Choose a reason for hiding this comment

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

Quick Question: Since the app root is wrapped with the theme provider. Is there a way we can pass the theme key (:light or :dark) as screen params just like :sheet? and send it to the provider? If yes, that would reduce the wrapping of the screen component again with the specified theme key.

Copy link
Contributor

@ilmotta ilmotta left a comment

Choose a reason for hiding this comment

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

I'm getting an exception right when the app starts in the onboarding. Tried make clean and all the incantations. Do you get this @J-Son89?

 ERROR  Error: No protocol method IDeref.-deref defined for type null:

This error is located at:
    in quo2.components.buttons.button.button_internal (created by quo2.with_theme.f_with_theme)

@@ -204,7 +204,7 @@
(when disabled
{:opacity 0.3})))

(defn button
(defn button-internal
Copy link
Contributor

Choose a reason for hiding this comment

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

To make it "more internal", we can change to defn- (private).

screens)
(keyword key))
;; "everything" needed for hot reload
_ (def --e everything)
Copy link
Contributor

Choose a reason for hiding this comment

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

I have no words to explain how I feel about this line... Not this PR's fault though

Copy link
Contributor

@ulisesmac ulisesmac Jun 7, 2023

Choose a reason for hiding this comment

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

I added this line 😅 , We were debugging, we should have cleaned the code before opening the PR

Copy link
Contributor Author

Choose a reason for hiding this comment

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

So it's not needed? Will remove so

@J-Son89
Copy link
Contributor Author

J-Son89 commented Jun 6, 2023

I'm getting an exception right when the app starts in the onboarding. Tried make clean and all the incantations. Do you get this @J-Son89?

 ERROR  Error: No protocol method IDeref.-deref defined for type null:

This error is located at:
    in quo2.components.buttons.button.button_internal (created by quo2.with_theme.f_with_theme)

hmm perhaps I left out some details. I will look into it and make sure the branch is working alright 👍

@ilmotta
Copy link
Contributor

ilmotta commented Jun 6, 2023

@J-Son89, I think we need to come up with a solution that doesn't involve using status-im2 namespaces inside quo2. That's the reason why make lint currently fails.

@J-Son89
Copy link
Contributor Author

J-Son89 commented Jun 6, 2023 via email

@ilmotta
Copy link
Contributor

ilmotta commented Jun 8, 2023

@J-Son89, the branch works now on my machine. Great stuff coming in soon!

In this gist https://gist.github.com/ilmotta/85c72b1a001cb06669527fe93e600edb I refactored the code to use the existing namespace quo2.core. I think it's confusing to have two namespaces for theming.

In the gist I also renamed the var theme (that should be private as I did in the gist) to theme-state, so that the other functions in quo2.theme can't shadow it.

@J-Son89
Copy link
Contributor Author

J-Son89 commented Jun 8, 2023

@J-Son89, the branch works now on my machine. Great stuff coming in soon!

In this gist https://gist.github.com/ilmotta/85c72b1a001cb06669527fe93e600edb I refactored the code to use the existing namespace quo2.core. I think it's confusing to have two namespaces for theming.

In the gist I also renamed the var theme (that should be private as I did in the gist) to theme-state, so that the other functions in quo2.theme can't shadow it.

Awesome, yes I agree. We can do as a follow up!

@ilmotta
Copy link
Contributor

ilmotta commented Jun 8, 2023

@J-Son89, the branch works now on my machine. Great stuff coming in soon!
In this gist https://gist.github.com/ilmotta/85c72b1a001cb06669527fe93e600edb I refactored the code to use the existing namespace quo2.core. I think it's confusing to have two namespaces for theming.
In the gist I also renamed the var theme (that should be private as I did in the gist) to theme-state, so that the other functions in quo2.theme can't shadow it.

Awesome, yes I agree. We can do as a follow up!

🚀 Great! So I think we should at least nail down the namespaces in this PR @J-Son89, to create the basic infrastructure. The diff can be applied in a matter of minutes, and since this PR still needs more reviews, we can save time by doing some changes now rather than in a follow-up PR that will require explanation and agreement.

Let me know if you would like me to push those changes to this PR since you're working with more important stuff now.

@J-Son89
Copy link
Contributor Author

J-Son89 commented Jun 8, 2023

Yep for sure, please push any changes you feel best to this branch :)

@ilmotta ilmotta force-pushed the porto/theming branch 2 times, most recently from 884b0b2 to e9f128b Compare June 8, 2023 17:26
@ilmotta
Copy link
Contributor

ilmotta commented Jun 8, 2023

More theming options would be awesome, especially if theres an option to define our own colors with some sort of color picker.

I would love something like that too @du82. I remember having conversations about the fact that our existing technical solution is too brittle and it assumes there are only ever going to be two themes. Even though this is true for the current app design, we know users love to personalize their apps. So it's kind of unfortunate we didn't model the code in a way to support whatever set of colors, fonts, etc users may want.

One of the goals of this PR is to move one step closer to having a truly themeable code and eventually UI.

@@ -36,7 +36,7 @@
"node-libs-react-native": "^1.2.1",
"qrcode": "^1.4.1",
"react": "18.0.0",
"react-dom": "^16.4.2",
"react-dom": "18.0.0",
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@siddarthkay this pr updates react-dom to match react version, these should always be in sync 👌

Copy link
Contributor

Choose a reason for hiding this comment

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

Ooh my bad, Thanks @J-Son89 !

@J-Son89
Copy link
Contributor Author

J-Son89 commented Jun 20, 2023

Thanks for finding these issues @VladimrLitvinenko! I will address them and let you know when I have solved them all.

This pr does not add anything additional, i.e everything should look as it currently does in develop. The only thing this does is change the underlying mechanism of how the code is reading what theme is being used.

There should only be one exception where the activity centre notification buttons and swipe button should now be the correct color, as they were incorrect before.

@J-Son89 J-Son89 force-pushed the porto/theming branch 3 times, most recently from c7ba524 to be35e62 Compare June 22, 2023 11:06
@J-Son89
Copy link
Contributor Author

J-Son89 commented Jun 22, 2023

@VladimrLitvinenko, haven't made changes here just updating this branch with latest. It's ready to be tested whenever you have some available time :)

@status-im-auto
Copy link
Member

64% of end-end tests have passed

Total executed tests: 33
Failed tests: 12
Passed tests: 21
IDs of failed tests: 702782,702733,702784,702732,702813,703133,703086,702745,702783,702855,702731,702730 

Failed tests (12)

Click to expand
  • Rerun failed tests

  • Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_emoji_send_reply_and_open_link, id: 702782
    Test setup failed: critical/chats/test_1_1_public_chats.py:832: in prepare_devices
        self.drivers, self.loop = create_shared_drivers(2)
    base_test_case.py:313: in create_shared_drivers
        raise e
    base_test_case.py:302: in create_shared_drivers
        drivers = loop.run_until_complete(start_threads(quantity,
    /usr/lib/python3.10/asyncio/base_events.py:646: in run_until_complete
        return future.result()
    __init__.py:22: in start_threads
        returns[k] = await returns[k]
    /usr/lib/python3.10/concurrent/futures/thread.py:58: in run
        result = self.fn(*self.args, **self.kwargs)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:267: in __init__
        super().__init__(
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:157: in __init__
        self.start_session(capabilities, browser_profile)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:357: in start_session
        response = self.execute(RemoteCommand.NEW_SESSION, parameters)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:319: in execute
        response = self.command_executor.execute(driver_command, params)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:376: in execute
        return self._request(command_info[0], url, body=data)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:399: in _request
        resp = self._conn.request(method, url, body=body, headers=headers)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:78: in request
        return self.request_encode_body(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:170: in request_encode_body
        return self.urlopen(method, url, **extra_kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:405: in urlopen
        retries = retries.increment(method, url, response=response, _pool=conn)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/util/retry.py:592: in increment
        raise MaxRetryError(_pool, url, error or ResponseError(cause))
     HTTPSConnectionPool(host='ondemand.eu-central-1.saucelabs.com', port=443): Max retries exceeded with url: https://anton-status:0a8c5013-d483-4872-a894-9b62d6391892@ondemand.eu-central-1.saucelabs.com:443/wd/hub/session/448260f072264059be615a211854e013?ref=8394c830c71e4486923ea3e69f9e1d06 (Caused by ResponseError('too many redirects'))
    



    2. test_1_1_chat_text_message_delete_push_disappear, id: 702733

    Test setup failed: critical/chats/test_1_1_public_chats.py:832: in prepare_devices
        self.drivers, self.loop = create_shared_drivers(2)
    base_test_case.py:313: in create_shared_drivers
        raise e
    base_test_case.py:302: in create_shared_drivers
        drivers = loop.run_until_complete(start_threads(quantity,
    /usr/lib/python3.10/asyncio/base_events.py:646: in run_until_complete
        return future.result()
    __init__.py:22: in start_threads
        returns[k] = await returns[k]
    /usr/lib/python3.10/concurrent/futures/thread.py:58: in run
        result = self.fn(*self.args, **self.kwargs)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:267: in __init__
        super().__init__(
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:157: in __init__
        self.start_session(capabilities, browser_profile)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:357: in start_session
        response = self.execute(RemoteCommand.NEW_SESSION, parameters)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:319: in execute
        response = self.command_executor.execute(driver_command, params)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:376: in execute
        return self._request(command_info[0], url, body=data)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:399: in _request
        resp = self._conn.request(method, url, body=body, headers=headers)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:78: in request
        return self.request_encode_body(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:170: in request_encode_body
        return self.urlopen(method, url, **extra_kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:405: in urlopen
        retries = retries.increment(method, url, response=response, _pool=conn)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/util/retry.py:592: in increment
        raise MaxRetryError(_pool, url, error or ResponseError(cause))
     HTTPSConnectionPool(host='ondemand.eu-central-1.saucelabs.com', port=443): Max retries exceeded with url: https://anton-status:0a8c5013-d483-4872-a894-9b62d6391892@ondemand.eu-central-1.saucelabs.com:443/wd/hub/session/448260f072264059be615a211854e013?ref=8394c830c71e4486923ea3e69f9e1d06 (Caused by ResponseError('too many redirects')) 
    

    [[Message is being in status 'Sending' for a long time: https://github.com//issues/15385]]

    3. test_1_1_chat_delete_via_long_press_relogin, id: 702784

    Test setup failed: critical/chats/test_1_1_public_chats.py:832: in prepare_devices
        self.drivers, self.loop = create_shared_drivers(2)
    base_test_case.py:313: in create_shared_drivers
        raise e
    base_test_case.py:302: in create_shared_drivers
        drivers = loop.run_until_complete(start_threads(quantity,
    /usr/lib/python3.10/asyncio/base_events.py:646: in run_until_complete
        return future.result()
    __init__.py:22: in start_threads
        returns[k] = await returns[k]
    /usr/lib/python3.10/concurrent/futures/thread.py:58: in run
        result = self.fn(*self.args, **self.kwargs)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:267: in __init__
        super().__init__(
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:157: in __init__
        self.start_session(capabilities, browser_profile)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:357: in start_session
        response = self.execute(RemoteCommand.NEW_SESSION, parameters)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:319: in execute
        response = self.command_executor.execute(driver_command, params)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:376: in execute
        return self._request(command_info[0], url, body=data)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:399: in _request
        resp = self._conn.request(method, url, body=body, headers=headers)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:78: in request
        return self.request_encode_body(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:170: in request_encode_body
        return self.urlopen(method, url, **extra_kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:405: in urlopen
        retries = retries.increment(method, url, response=response, _pool=conn)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/util/retry.py:592: in increment
        raise MaxRetryError(_pool, url, error or ResponseError(cause))
     HTTPSConnectionPool(host='ondemand.eu-central-1.saucelabs.com', port=443): Max retries exceeded with url: https://anton-status:0a8c5013-d483-4872-a894-9b62d6391892@ondemand.eu-central-1.saucelabs.com:443/wd/hub/session/448260f072264059be615a211854e013?ref=8394c830c71e4486923ea3e69f9e1d06 (Caused by ResponseError('too many redirects'))
    



    4. test_1_1_chat_push_emoji, id: 702813

    Test setup failed: critical/chats/test_1_1_public_chats.py:832: in prepare_devices
        self.drivers, self.loop = create_shared_drivers(2)
    base_test_case.py:313: in create_shared_drivers
        raise e
    base_test_case.py:302: in create_shared_drivers
        drivers = loop.run_until_complete(start_threads(quantity,
    /usr/lib/python3.10/asyncio/base_events.py:646: in run_until_complete
        return future.result()
    __init__.py:22: in start_threads
        returns[k] = await returns[k]
    /usr/lib/python3.10/concurrent/futures/thread.py:58: in run
        result = self.fn(*self.args, **self.kwargs)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:267: in __init__
        super().__init__(
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:157: in __init__
        self.start_session(capabilities, browser_profile)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:357: in start_session
        response = self.execute(RemoteCommand.NEW_SESSION, parameters)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:319: in execute
        response = self.command_executor.execute(driver_command, params)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:376: in execute
        return self._request(command_info[0], url, body=data)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:399: in _request
        resp = self._conn.request(method, url, body=body, headers=headers)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:78: in request
        return self.request_encode_body(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:170: in request_encode_body
        return self.urlopen(method, url, **extra_kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:405: in urlopen
        retries = retries.increment(method, url, response=response, _pool=conn)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/util/retry.py:592: in increment
        raise MaxRetryError(_pool, url, error or ResponseError(cause))
     HTTPSConnectionPool(host='ondemand.eu-central-1.saucelabs.com', port=443): Max retries exceeded with url: https://anton-status:0a8c5013-d483-4872-a894-9b62d6391892@ondemand.eu-central-1.saucelabs.com:443/wd/hub/session/448260f072264059be615a211854e013?ref=8394c830c71e4486923ea3e69f9e1d06 (Caused by ResponseError('too many redirects'))
    



    5. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745

    Test setup failed: critical/chats/test_1_1_public_chats.py:832: in prepare_devices
        self.drivers, self.loop = create_shared_drivers(2)
    base_test_case.py:313: in create_shared_drivers
        raise e
    base_test_case.py:302: in create_shared_drivers
        drivers = loop.run_until_complete(start_threads(quantity,
    /usr/lib/python3.10/asyncio/base_events.py:646: in run_until_complete
        return future.result()
    __init__.py:22: in start_threads
        returns[k] = await returns[k]
    /usr/lib/python3.10/concurrent/futures/thread.py:58: in run
        result = self.fn(*self.args, **self.kwargs)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:267: in __init__
        super().__init__(
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:157: in __init__
        self.start_session(capabilities, browser_profile)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:357: in start_session
        response = self.execute(RemoteCommand.NEW_SESSION, parameters)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:319: in execute
        response = self.command_executor.execute(driver_command, params)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:376: in execute
        return self._request(command_info[0], url, body=data)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:399: in _request
        resp = self._conn.request(method, url, body=body, headers=headers)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:78: in request
        return self.request_encode_body(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:170: in request_encode_body
        return self.urlopen(method, url, **extra_kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:405: in urlopen
        retries = retries.increment(method, url, response=response, _pool=conn)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/util/retry.py:592: in increment
        raise MaxRetryError(_pool, url, error or ResponseError(cause))
     HTTPSConnectionPool(host='ondemand.eu-central-1.saucelabs.com', port=443): Max retries exceeded with url: https://anton-status:0a8c5013-d483-4872-a894-9b62d6391892@ondemand.eu-central-1.saucelabs.com:443/wd/hub/session/448260f072264059be615a211854e013?ref=8394c830c71e4486923ea3e69f9e1d06 (Caused by ResponseError('too many redirects'))
    



    6. test_1_1_chat_is_shown_message_sent_delivered_from_offline, id: 702783

    Test setup failed: critical/chats/test_1_1_public_chats.py:832: in prepare_devices
        self.drivers, self.loop = create_shared_drivers(2)
    base_test_case.py:313: in create_shared_drivers
        raise e
    base_test_case.py:302: in create_shared_drivers
        drivers = loop.run_until_complete(start_threads(quantity,
    /usr/lib/python3.10/asyncio/base_events.py:646: in run_until_complete
        return future.result()
    __init__.py:22: in start_threads
        returns[k] = await returns[k]
    /usr/lib/python3.10/concurrent/futures/thread.py:58: in run
        result = self.fn(*self.args, **self.kwargs)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:267: in __init__
        super().__init__(
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:157: in __init__
        self.start_session(capabilities, browser_profile)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:357: in start_session
        response = self.execute(RemoteCommand.NEW_SESSION, parameters)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:319: in execute
        response = self.command_executor.execute(driver_command, params)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:376: in execute
        return self._request(command_info[0], url, body=data)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:399: in _request
        resp = self._conn.request(method, url, body=body, headers=headers)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:78: in request
        return self.request_encode_body(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:170: in request_encode_body
        return self.urlopen(method, url, **extra_kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:405: in urlopen
        retries = retries.increment(method, url, response=response, _pool=conn)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/util/retry.py:592: in increment
        raise MaxRetryError(_pool, url, error or ResponseError(cause))
     HTTPSConnectionPool(host='ondemand.eu-central-1.saucelabs.com', port=443): Max retries exceeded with url: https://anton-status:0a8c5013-d483-4872-a894-9b62d6391892@ondemand.eu-central-1.saucelabs.com:443/wd/hub/session/448260f072264059be615a211854e013?ref=8394c830c71e4486923ea3e69f9e1d06 (Caused by ResponseError('too many redirects')) 
    

    [[Issue with messages not being sent for a long time]]

    7. test_1_1_chat_edit_message, id: 702855

    Test setup failed: critical/chats/test_1_1_public_chats.py:832: in prepare_devices
        self.drivers, self.loop = create_shared_drivers(2)
    base_test_case.py:313: in create_shared_drivers
        raise e
    base_test_case.py:302: in create_shared_drivers
        drivers = loop.run_until_complete(start_threads(quantity,
    /usr/lib/python3.10/asyncio/base_events.py:646: in run_until_complete
        return future.result()
    __init__.py:22: in start_threads
        returns[k] = await returns[k]
    /usr/lib/python3.10/concurrent/futures/thread.py:58: in run
        result = self.fn(*self.args, **self.kwargs)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:267: in __init__
        super().__init__(
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:157: in __init__
        self.start_session(capabilities, browser_profile)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:357: in start_session
        response = self.execute(RemoteCommand.NEW_SESSION, parameters)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:319: in execute
        response = self.command_executor.execute(driver_command, params)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:376: in execute
        return self._request(command_info[0], url, body=data)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:399: in _request
        resp = self._conn.request(method, url, body=body, headers=headers)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:78: in request
        return self.request_encode_body(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:170: in request_encode_body
        return self.urlopen(method, url, **extra_kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:405: in urlopen
        retries = retries.increment(method, url, response=response, _pool=conn)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/util/retry.py:592: in increment
        raise MaxRetryError(_pool, url, error or ResponseError(cause))
     HTTPSConnectionPool(host='ondemand.eu-central-1.saucelabs.com', port=443): Max retries exceeded with url: https://anton-status:0a8c5013-d483-4872-a894-9b62d6391892@ondemand.eu-central-1.saucelabs.com:443/wd/hub/session/448260f072264059be615a211854e013?ref=8394c830c71e4486923ea3e69f9e1d06 (Caused by ResponseError('too many redirects')) 
    

    [[Message is being in status 'Sending' for a long time: https://github.com//issues/15385]]

    8. test_1_1_chat_pin_messages, id: 702731

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Pin feature is in development]]

    9. test_1_1_chat_message_reaction, id: 702730

    Test setup failed: critical/chats/test_1_1_public_chats.py:832: in prepare_devices
        self.drivers, self.loop = create_shared_drivers(2)
    base_test_case.py:313: in create_shared_drivers
        raise e
    base_test_case.py:302: in create_shared_drivers
        drivers = loop.run_until_complete(start_threads(quantity,
    /usr/lib/python3.10/asyncio/base_events.py:646: in run_until_complete
        return future.result()
    __init__.py:22: in start_threads
        returns[k] = await returns[k]
    /usr/lib/python3.10/concurrent/futures/thread.py:58: in run
        result = self.fn(*self.args, **self.kwargs)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:267: in __init__
        super().__init__(
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:157: in __init__
        self.start_session(capabilities, browser_profile)
    /home/jenkins/.local/lib/python3.10/site-packages/appium/webdriver/webdriver.py:357: in start_session
        response = self.execute(RemoteCommand.NEW_SESSION, parameters)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:319: in execute
        response = self.command_executor.execute(driver_command, params)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:376: in execute
        return self._request(command_info[0], url, body=data)
    /home/jenkins/.local/lib/python3.10/site-packages/selenium/webdriver/remote/remote_connection.py:399: in _request
        resp = self._conn.request(method, url, body=body, headers=headers)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:78: in request
        return self.request_encode_body(
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/request.py:170: in request_encode_body
        return self.urlopen(method, url, **extra_kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:418: in urlopen
        return self.urlopen(method, redirect_location, **kw)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/poolmanager.py:405: in urlopen
        retries = retries.increment(method, url, response=response, _pool=conn)
    /home/jenkins/.local/lib/python3.10/site-packages/urllib3/util/retry.py:592: in increment
        raise MaxRetryError(_pool, url, error or ResponseError(cause))
     HTTPSConnectionPool(host='ondemand.eu-central-1.saucelabs.com', port=443): Max retries exceeded with url: https://anton-status:0a8c5013-d483-4872-a894-9b62d6391892@ondemand.eu-central-1.saucelabs.com:443/wd/hub/session/448260f072264059be615a211854e013?ref=8394c830c71e4486923ea3e69f9e1d06 (Caused by ResponseError('too many redirects'))
    



    Class TestCommunityOneDeviceMerged:

    1. test_restore_multiaccount_with_waku_backup_remove_switch, id: 703133

    Device 1: Find Button by accessibility id: show-profiles
    Device 1: Tap on found: Button

    critical/test_public_chat_browsing.py:399: in test_restore_multiaccount_with_waku_backup_remove_switch
        self.errors.verify_no_errors()
    base_test_case.py:182: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Contact Chu_QA was not restored from backup!
    E    Contact my-custom-nickname was not restored from backup!
    



    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_pin_messages, id: 702732

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Pin feature is in development]]

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_mark_all_messages_as_read, id: 703086

    Device 1: Find Button by accessibility id: mark-as-read
    Device 1: Tap on found: Button

    critical/test_public_chat_browsing.py:799: in test_community_mark_all_messages_as_read
        self.errors.verify_no_errors()
    base_test_case.py:182: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     New messages counter is not shown in home > Commmunity element
    



    Device sessions

    Passed tests (21)

    Click to expand

    Class TestActivityMultipleDevicePR:

    1. test_activity_center_mentions, id: 702957
    Device sessions

    2. test_navigation_jump_to, id: 702936
    Device sessions

    3. test_activity_center_reply_read_unread_delete_filter_swipe, id: 702947
    Device sessions

    4. test_activity_center_admin_notification_accept_swipe, id: 702958
    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_community_copy_and_paste_message_in_chat_input, id: 702742
    Device sessions

    2. test_community_navigate_to_channel_when_relaunch, id: 702846
    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_join_send_text_messages_push, id: 702807
    Device sessions

    2. test_group_chat_offline_pn, id: 702808
    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_contact_block_unblock_offline, id: 702894
    Device sessions

    5. test_community_mentions_push_notification, id: 702786
    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_leave, id: 702845
    Device sessions

    11. test_community_unread_messages_badge, id: 702841
    Device sessions

    Class TestActivityCenterContactRequestMultipleDevicePR:

    1. test_activity_center_contact_request_accept_swipe_mark_all_as_read, id: 702851
    Device sessions

    2. test_activity_center_contact_request_decline, id: 702850
    Device sessions

    @status-im-auto
    Copy link
    Member

    82% of end-end tests have passed

    Total executed tests: 33
    Failed tests: 6
    Passed tests: 27
    
    IDs of failed tests: 702733,702732,703133,703086,702783,702731 
    

    Failed tests (6)

    Click to expand
  • Rerun failed tests

  • Class TestCommunityOneDeviceMerged:

    1. test_restore_multiaccount_with_waku_backup_remove_switch, id: 703133

    Device 1: Find `Button` by `accessibility id`: `show-profiles`
    Device 1: Tap on found: Button

    critical/test_public_chat_browsing.py:399: in test_restore_multiaccount_with_waku_backup_remove_switch
        self.errors.verify_no_errors()
    base_test_case.py:182: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Contact Chu_QA was not restored from backup!
    E    Contact my-custom-nickname was not restored from backup!
    



    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_mark_all_messages_as_read, id: 703086

    Device 1: Find Button by accessibility id: mark-as-read
    Device 1: Tap on found: Button

    critical/test_public_chat_browsing.py:799: in test_community_mark_all_messages_as_read
        self.errors.verify_no_errors()
    base_test_case.py:182: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     New messages counter is not shown in home > Commmunity element
    



    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_text_message_delete_push_disappear, id: 702733

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

    critical/chats/test_1_1_public_chats.py:1162: in test_1_1_chat_text_message_delete_push_disappear
        self.chat_2.chat_element_by_text(message_after_edit_1_1).wait_for_status_to_be("Delivered")
    ../views/chat_view.py:228: 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 
    

    [[Message is being in status 'Sending' for a long time: https://github.com//issues/15385]]

    Device sessions

    2. test_1_1_chat_is_shown_message_sent_delivered_from_offline, id: 702783

    # STEP: Device1 goes back online and checks that 1-1 chat will be fetched
    Device 1: Looking for a message by text: test message

    critical/chats/test_1_1_public_chats.py:1253: in test_1_1_chat_is_shown_message_sent_delivered_from_offline
        self.errors.verify_no_errors()
    base_test_case.py:182: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Message status was not delivered after back up online, it is "Sending"! 
    

    [[Issue with messages not being sent for a long time]]

    Device sessions

    3. test_1_1_chat_pin_messages, id: 702731

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Pin feature is in development]]

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_pin_messages, id: 702732

    Test is not run, e2e blocker  
    

    [[reason: [NOTRUN] Pin feature is in development]]

    Passed tests (27)

    Click to expand

    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_contact_block_unblock_offline, id: 702894
    Device sessions

    5. test_community_mentions_push_notification, id: 702786
    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_leave, id: 702845
    Device sessions

    11. test_community_unread_messages_badge, id: 702841
    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_join_send_text_messages_push, id: 702807
    Device sessions

    2. test_group_chat_offline_pn, id: 702808
    Device sessions

    Class TestActivityCenterContactRequestMultipleDevicePR:

    1. test_activity_center_contact_request_accept_swipe_mark_all_as_read, id: 702851
    Device sessions

    2. test_activity_center_contact_request_decline, id: 702850
    Device sessions

    Class TestActivityMultipleDevicePR:

    1. test_activity_center_mentions, id: 702957
    Device sessions

    2. test_navigation_jump_to, id: 702936
    Device sessions

    3. test_activity_center_reply_read_unread_delete_filter_swipe, id: 702947
    Device sessions

    4. test_activity_center_admin_notification_accept_swipe, id: 702958
    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_community_copy_and_paste_message_in_chat_input, id: 702742
    Device sessions

    2. test_community_navigate_to_channel_when_relaunch, id: 702846
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_emoji_send_reply_and_open_link, id: 702782
    Device sessions

    2. test_1_1_chat_delete_via_long_press_relogin, id: 702784
    Device sessions

    3. test_1_1_chat_push_emoji, id: 702813
    Device sessions

    4. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745
    Device sessions

    5. test_1_1_chat_edit_message, id: 702855
    Device sessions

    6. test_1_1_chat_message_reaction, id: 702730
    Device sessions

    @VolodLytvynenko
    Copy link
    Contributor

    Hi @J-Son89 thank you for PR. No issues from my side. Can be merged

    @J-Son89
    Copy link
    Contributor Author

    J-Son89 commented Jun 23, 2023

    Thanks for all the testing @VladimrLitvinenko!!

    @J-Son89 J-Son89 merged commit e5778ee into develop Jun 23, 2023
    @J-Son89 J-Son89 deleted the porto/theming branch June 23, 2023 12:11
    codemaster115 pushed a commit that referenced this pull request Jul 7, 2023
    * chore: set react-dom to same version as react
    @vkjr vkjr mentioned this pull request Aug 1, 2023
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    No open projects
    Archived in project
    Development

    Successfully merging this pull request may close these issues.