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

chore: cleanup events and tests #21885

Merged
merged 22 commits into from
Jan 14, 2025
Merged

Conversation

seanstrom
Copy link
Member

@seanstrom seanstrom commented Jan 3, 2025

Summary

  • This PR attempts to clean up some of the code related to defining events and the tests we write to confirm their behaviour. Ideally, when we write an event handler we would use data for describing the on-success and on-error handlers instead of functions. This PR tries to find some of the places where we do not follow that convention and update the events and tests with that pattern.
    • Additionally, in some places I've tried updating the event code to migrate from rf/defn towards defn with rf/reg-event-fx.

Platforms

  • Android
  • iOS

Areas that maybe impacted

Functional
  • 1-1 chats
    • Delete Message For Me (with undo)
    • Delete Message for Everyone (with undo)
  • Contacts
    • Sending a contact request
    • Accepting a contact request
    • Dismissing/Declining a contact request
    • Updating a contact nickname
    • Removing a contact

Steps to test

WIP

status: ready

@seanstrom seanstrom self-assigned this Jan 3, 2025
@status-im-auto
Copy link
Member

status-im-auto commented Jan 3, 2025

Jenkins Builds

Click to see older builds (28)
Commit #️⃣ Finished (UTC) Duration Platform Result
76b7123 #1 2025-01-03 15:12:12 ~4 min tests 📄log
✔️ 76b7123 #1 2025-01-03 15:15:54 ~8 min android 🤖apk 📲
✔️ 76b7123 #1 2025-01-03 15:16:21 ~9 min android-e2e 🤖apk 📲
✔️ 76b7123 #1 2025-01-03 15:16:31 ~9 min ios 📱ipa 📲
dc46391 #3 2025-01-03 18:57:17 ~3 min tests 📄log
✔️ dc46391 #3 2025-01-03 19:01:09 ~6 min ios 📱ipa 📲
✔️ dc46391 #3 2025-01-03 19:01:11 ~7 min android 🤖apk 📲
✔️ dc46391 #3 2025-01-03 19:01:57 ~7 min android-e2e 🤖apk 📲
e50ffb4 #4 2025-01-03 19:19:19 ~2 min tests 📄log
✔️ e50ffb4 #4 2025-01-03 19:23:08 ~6 min android 🤖apk 📲
✔️ e50ffb4 #4 2025-01-03 19:23:13 ~6 min ios 📱ipa 📲
✔️ e50ffb4 #4 2025-01-03 19:23:47 ~7 min android-e2e 🤖apk 📲
d0472cb #5 2025-01-03 22:26:18 ~2 min tests 📄log
✔️ d0472cb #5 2025-01-03 22:29:41 ~6 min android-e2e 🤖apk 📲
✔️ d0472cb #5 2025-01-03 22:30:29 ~7 min ios 📱ipa 📲
✔️ d0472cb #5 2025-01-03 22:31:28 ~8 min android 🤖apk 📲
87f0ae8 #6 2025-01-06 19:56:42 ~2 min tests 📄log
f1f8b29 #7 2025-01-06 20:00:06 ~2 min tests 📄log
✔️ f1f8b29 #7 2025-01-06 20:04:58 ~7 min ios 📱ipa 📲
✔️ f1f8b29 #7 2025-01-06 20:05:20 ~8 min android-e2e 🤖apk 📲
✔️ f1f8b29 #7 2025-01-06 20:05:54 ~8 min android 🤖apk 📲
7d404b7 #8 2025-01-08 20:01:18 ~5 min tests 📄log
✔️ 7d404b7 #8 2025-01-08 20:03:37 ~8 min ios 📱ipa 📲
✔️ 7d404b7 #8 2025-01-08 20:05:28 ~10 min android-e2e 🤖apk 📲
✔️ accbbe6 #9 2025-01-08 22:21:52 ~4 min tests 📄log
✔️ accbbe6 #9 2025-01-08 22:25:04 ~7 min ios 📱ipa 📲
✔️ accbbe6 #9 2025-01-08 22:25:05 ~7 min android-e2e 🤖apk 📲
✔️ accbbe6 #9 2025-01-08 22:25:36 ~8 min android 🤖apk 📲
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ e4bc784 #10 2025-01-14 09:31:52 ~4 min tests 📄log
✔️ e4bc784 #10 2025-01-14 09:34:04 ~6 min ios 📱ipa 📲
✔️ e4bc784 #10 2025-01-14 09:34:36 ~7 min android 🤖apk 📲
✔️ e4bc784 #10 2025-01-14 09:34:54 ~7 min android-e2e 🤖apk 📲
✔️ e7ec3c0 #11 2025-01-14 13:03:33 ~4 min tests 📄log
✔️ e7ec3c0 #11 2025-01-14 13:05:57 ~7 min ios 📱ipa 📲
✔️ e7ec3c0 #11 2025-01-14 13:06:28 ~7 min android-e2e 🤖apk 📲
✔️ e7ec3c0 #11 2025-01-14 13:07:12 ~8 min android 🤖apk 📲

Copy link
Member Author

@seanstrom seanstrom left a comment

Choose a reason for hiding this comment

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

Self Review 📚

Comment on lines +132 to +133
:json-rpc/call
:fx})
Copy link
Member Author

Choose a reason for hiding this comment

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

This needed to be added while running tests locally, otherwise the rf/merge function wouldn't return a merged collection of effects.

Copy link
Contributor

Choose a reason for hiding this comment

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

Nice catch!

Comment on lines 97 to 107
:on-error [:contacts/send-contact-request-error id]
:on-success [:transport/message-sent]}]]]}))

(rf/reg-event-fx :contact.ui/send-contact-request send-contact-request)

(defn send-contact-request-failure
(defn send-contact-request-error
[_ [id error]]
(log/error "Failed to send contact request"
{:error error
:event :contact.ui/send-contact-request
:id id}))
{:id id
:error error
:event :contact.ui/send-contact-request}))
Copy link
Member Author

Choose a reason for hiding this comment

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

Here's a pattern for the error handlers that has been introduced in other areas. Here we're creating an explicit error handler instead of inlining a function. This way it's more straightforward to unit test this code because it's all data.

Comment on lines +111 to +126
(defn remove-contact
"Remove a contact from current account's contact list"
{:events [:contact.ui/remove-contact-pressed]}
[{:keys [db]} {:keys [public-key]}]
{:db (-> db
(assoc-in [:contacts/contacts public-key :added?] false)
(assoc-in [:contacts/contacts public-key :active?] false)
(assoc-in [:contacts/contacts public-key :contact-request-state]
constants/contact-request-state-none))
:json-rpc/call [{:method "wakuext_retractContactRequest"
:params [{:id public-key}]
:js-response true
:on-success #(rf/dispatch [:sanitize-messages-and-process-response %])
:on-error #(log/error "failed to remove contact" public-key %)}]})

(rf/defn update-nickname
{:events [:contacts/update-nickname]}
[_ public-key nickname]
{:json-rpc/call [{:method "wakuext_setContactLocalNickname"
:params [{:id public-key :nickname nickname}]
:js-response true
:on-success #(rf/dispatch [:sanitize-messages-and-process-response %])
:on-error #(log/error "failed to set contact nickname " public-key nickname %)}]})
[{:keys [db]} [{:keys [public-key]}]]
{:db (-> db
(assoc-in [:contacts/contacts public-key :added?] false)
(assoc-in [:contacts/contacts public-key :active?] false)
(assoc-in [:contacts/contacts public-key :contact-request-state]
constants/contact-request-state-none))
:fx [[:json-rpc/call
[{:method "wakuext_retractContactRequest"
:params [{:id public-key}]
:js-response true
:on-success [:sanitize-messages-and-process-response]
:on-error [:contacts/remove-contact-error public-key]}]]]})

(rf/reg-event-fx :contact.ui/remove-contact-pressed remove-contact)
Copy link
Member Author

Choose a reason for hiding this comment

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

Here we're also migrating towards using the :fx key for re-frame effects.

Comment on lines +159 to +157
(fn [cofx]
(delete-for-me/sync-all cofx))
(fn [cofx]
(delete-message/send-all cofx))
Copy link
Member Author

Choose a reason for hiding this comment

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

  • Here we're wrapping these functions because delete-for-me/sync-all and delete-message/send-all are no longer defined with rf/defn.
    • It seems by default that functions defined with rf/defn are composable with rf/merge (when we don't pass all the arguments I think), and rf/merge likes to compose these functions by passing a cofx object.
    • So instead we just manually wrap the function, which seems to have the same behaviour as before.

Copy link
Contributor

Choose a reason for hiding this comment

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

This is correct @seanstrom. I had to do this a few times in the past.

Comment on lines 75 to 79
(i18n/label :t/contact-request-chat-pending)

contact-request-dismissed?
(i18n/label :t/contact-request-chat-add {:name primary-name}))}]]))

Copy link
Member Author

Choose a reason for hiding this comment

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

Adding a label because we were not handling the dismissed state and that was causing some schema errors

Comment on lines +141 to +146
(let [pending-sync-messages (reduce-kv filter-pending-sync-messages [] (:messages db))
pending-effects (map (fn [message]
(fn [cofx]
(delete-and-sync cofx [message true])))
pending-sync-messages)]
(apply rf/merge cofx pending-effects)))
Copy link
Member Author

Choose a reason for hiding this comment

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

Here we're needing to wrap the call to delete-and-sync because rf/merge is expecting a sequence of functions that receive a cofx object. Normally this behaviour is handled by rf/defn but delete-and-sync no longer uses that for defining its logic.

Comment on lines 13 to 14
(testing "foo"
(is (= 1 1)))
Copy link
Member Author

Choose a reason for hiding this comment

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

Oops 🙈

Comment on lines +132 to +133
:json-rpc/call
:fx})
Copy link
Contributor

Choose a reason for hiding this comment

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

Nice catch!

Comment on lines +159 to +157
(fn [cofx]
(delete-for-me/sync-all cofx))
(fn [cofx]
(delete-message/send-all cofx))
Copy link
Contributor

Choose a reason for hiding this comment

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

This is correct @seanstrom. I had to do this a few times in the past.


(defn delete-and-send-error
[_ [message-id error]]
(log/error "failed to delete message "
Copy link
Contributor

Choose a reason for hiding this comment

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

For the purist, log calls are stateful and could be re-frame effects. When I see these wrapper functions for log calls I remember we could create a custom log effect and avoid the imperative calls to log. We used to do that in another re-frame project.

Copy link
Member Author

Choose a reason for hiding this comment

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

I was thinking about this too, and I had commit for defining events and effects for call the log functions. Here's the commit: b4b808d

When you have chance, let me know what you think, I would definitely like to use log effects for this.

Copy link
Contributor

Choose a reason for hiding this comment

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

That's pretty much what I had in mind too @seanstrom. I would consider using a shorter name. For the event, could be :log/error (reads a bit better to be in the singular, but it's personal preference). And then just register other events for the other commonly supported levels we use, like debug, warn, and info.

The event :logs/log-and-attach-error I would skip to keep things plain simple. Some other app contexts could then build their own effects abstracting logs, in case a strong pattern emerges in how certain errors are logged (for example for WalletConnect).

Copy link
Contributor

Choose a reason for hiding this comment

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

Besides the PR reviewers, @clauxx @smohamedjavid what are your thoughts on this topic?

Copy link
Member

Choose a reason for hiding this comment

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

As a developer, I don't need to add logs for every RPC call's on-error. In fact, the on-error or on-success should be defined ONLY if the client/UI will take any action (UI or app-db changes) based on it. Not to mention the user won't see our polite log message failed to do X/Y/Z.

I felt we have subconsciously created a pattern for RPC calls in our codebase to add logging on error and it's been followed everywhere (:on-error #(log/error "failed to do X/Y/Z")).

Now, with this PR, this might probably evolve to :on-error [:chat/delete-and-send-error] or :on-error [:log/error]

IMO, the logs should be added in the error handling part of the json-rpc call method (centralised place).

(let [error (transforms/js->clj error)]
(if (vector? on-error)
(rf/dispatch (conj on-error error))
(on-error error)))

We could log just the method name and error response, optionally params, as we have sensitive data such as passwords or private keys.

The log structure can be something like:

[json-rpc] [wallet] {:name "wallet_fetchOrGetCachedWalletBalances" :error "<ERROR_RESPONSE_GOES_HERE>"}
[json-rpc] [chat] {:name "chat_editChat" :error "..."}
[json-rpc] [wakuext] {:name "wakuext_createGroupChatWithMembers" :error "..."}

The above would help devs to search for any RPC errors in the logs by their context (e.g. searching [wallet]).

The above are just my thoughts 😅

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks @smohamedjavid. I see your point and I agree with the observation that logs shouldn't ideally be polluting so many of our event handlers. Usually in past projects I used to work with 2 layers:

  1. The generic request abstraction (in our case the :json/rpc-call effect)
  2. A domain/context specific abstraction for making requests. This layer we don't have in status-mobile. This is the layer where we would log and sometimes handle errors in a particular way.

We could log just the method name and error response, optionally params, as we have sensitive data such as passwords or private keys.

I think that's the problem of having only one general abstraction such as :json/rpc-call. It shouldn't know what to log because it lacks context by definition of being generic. And logging too much is risky.

One solution is to have a separate namespace(s) defining custom effects for all RPC endpoints. These effects can safely decide what to log and the generic :json/rpc-call we would gradually stop using. They wouldn't be tied to any UI concerns. This is a sensible approach to implement, low risk as well. Would give us a central place to apply malli schemas in and out as well.

The above would help devs to search for any RPC errors in the logs by their context (e.g. searching [wallet]).

Nice idea about log groups. In status-go there's work in progress to support log namespaces, similar idea.

Anyway, I also just shared a few thoughts. Seems like we could take this discussion outside the PR since there are different ideas to explore. Maybe the DX call?

@seanstrom seanstrom force-pushed the seanstrom/cleanup-events-and-tests branch 2 times, most recently from 767ab80 to dc46391 Compare January 3, 2025 18:53
@@ -38,3 +38,75 @@
:logs/set-level
(fn [level]
(setup level)))

Copy link
Contributor

Choose a reason for hiding this comment

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

I love this!

@vkjr
Copy link
Contributor

vkjr commented Jan 6, 2025

Thanks for the cleanup, @seanstrom! 🎉

@seanstrom seanstrom force-pushed the seanstrom/cleanup-events-and-tests branch 3 times, most recently from f1f8b29 to 7d404b7 Compare January 8, 2025 19:55
@seanstrom seanstrom force-pushed the seanstrom/cleanup-events-and-tests branch from accbbe6 to e4bc784 Compare January 14, 2025 09:26
@status-im-auto
Copy link
Member

100% of end-end tests have passed

Total executed tests: 8
Failed tests: 0
Expected to fail tests: 0
Passed tests: 8

Passed tests (8)

Click to expand

Class TestCommunityMultipleDeviceMerged:

1. test_community_message_edit, id: 702843
Device sessions

Class TestCommunityOneDeviceMerged:

1. test_community_copy_and_paste_message_in_chat_input, id: 702742
Device sessions

2. test_restore_multiaccount_with_waku_backup_remove_profile_switch, id: 703133
Device sessions

Class TestWalletOneDevice:

1. test_wallet_add_remove_regular_account, id: 727231
2. test_wallet_balance_mainnet, id: 740490

Class TestWalletMultipleDevice:

1. test_wallet_send_asset_from_drawer, id: 727230
2. test_wallet_send_eth, id: 727229

Class TestOneToOneChatMultipleSharedDevicesNewUi:

1. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745
Device sessions

@status-im-auto
Copy link
Member

95% of end-end tests have passed

Total executed tests: 56
Failed tests: 2
Expected to fail tests: 1
Passed tests: 53
IDs of failed tests: 703133,702784 
IDs of expected to fail tests: 702844 

Failed tests (2)

Click to expand
  • Rerun failed tests

  • Class TestOneToOneChatMultipleSharedDevicesNewUiTwo:

    1. test_1_1_chat_delete_via_long_press_relogin, id: 702784

    Device 2: Tap on found: LogInButton
    ## Signed in successfully!

    critical/chats/test_1_1_public_chats.py:690: in test_1_1_chat_delete_via_long_press_relogin
        if chat.is_element_displayed(15):
    ../views/base_element.py:206: in is_element_displayed
        return self.wait_for_visibility_of_element(sec, ignored_exceptions=ignored_exceptions)
    ../views/base_element.py:136: in wait_for_visibility_of_element
        .until(expected_conditions.visibility_of_element_located((self.by, self.locator)))
    ../../../../status-app-prs-rerun@2@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/support/wait.py:86: in until
        value = method(self._driver)
    ../../../../status-app-prs-rerun@2@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/support/expected_conditions.py:152: in _predicate
        return _element_if_visible(driver.find_element(*locator))
    ../../../../status-app-prs-rerun@2@tmp/venv/lib/python3.10/site-packages/appium/webdriver/webdriver.py:409: in find_element
        return self.execute(RemoteCommand.FIND_ELEMENT, {'using': by, 'value': value})['value']
    ../../../../status-app-prs-rerun@2@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:345: in execute
        self.error_handler.check_response(response)
    ../../../../status-app-prs-rerun@2@tmp/venv/lib/python3.10/site-packages/appium/webdriver/errorhandler.py:122: in check_response
        raise exception_class(msg=message, stacktrace=format_stacktrace(stacktrace))
     An unknown server-side error occurred while processing the command. Original error: 'POST /element' cannot be proxied to UiAutomator2 server because the instrumentation process is not running (probably crashed). Check the server log and/or the logcat output for more details
    E   Stacktrace:
    E   UnknownError: An unknown server-side error occurred while processing the command. Original error: 'POST /element' cannot be proxied to UiAutomator2 server because the instrumentation process is not running (probably crashed). Check the server log and/or the logcat output for more details
    E       at UIA2Proxy.command (/root/lambda/shared-tools/volume/uiautomator/uiautomator-2.32.3/node_modules/@appium/base-driver/lib/jsonwp-proxy/proxy.js:355:13)
    E       at runMicrotasks (<anonymous>)
    E       at processTicksAndRejections (node:internal/process/task_queues:96:5)
    E       at AndroidUiautomator2Driver.doFindElementOrEls (/root/lambda/shared-tools/volume/uiautomator/uiautomator-2.32.3/lib/commands/find.js:44:7)
    E       at doFind (/root/lambda/shared-tools/volume/uiautomator/uiautomator-2.32.3/node_modules/appium-android-driver/lib/commands/find.ts:48:17)
    E       at wrappedCondFn (/root/lambda/shared-tools/volume/uiautomator/uiautomator-2.32.3/node_modules/@appium/base-driver/lib/basedriver/commands/timeout.ts:137:14)
    E       at spin (/root/lambda/shared-tools/volume/uiautomator/uiautomator-2.32.3/node_modules/asyncbox/lib/asyncbox.js:221:20)
    E       at waitForCondition (/root/lambda/shared-tools/volume/uiautomator/uiautomator-2.32.3/node_modules/asyncbox/lib/asyncbox.js:238:10)
    E       at AndroidUiautomator2Driver.implicitWaitForCondition (/root/lambda/shared-tools/volume/uiautomator/uiautomator-2.32.3/node_modules/@appium/base-driver/lib/basedriver/commands/timeout.ts:139:12)
    E       at AndroidUiautomator2Driver.findElOrEls (/root/lambda/shared-tools/volume/uiautomator/uiautomator-2.32.3/node_modules/appium-android-driver/lib/commands/find.ts:71:5)
    E       at AndroidUiautomator2Driver.findElOrElsWithProcessing (/root/lambda/shared-tools/volume/uiautomator/uiautomator-2.32.3/node_modules/@appium/base-driver/lib/basedriver/commands/find.ts:60:12)
    E       at AndroidUiautomator2Driver.findElement (/root/lambda/shared-tools/volume/uiautomator/uiautomator-2.32.3/node_modules/@appium/base-driver/lib/basedriver/commands/find.ts:75:12)
    



    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_restore_multiaccount_with_waku_backup_remove_profile_switch, id: 703133

    Device 1: Tap on found: Button
    # STEP: Check that removed user is not shown in the list anymore

    critical/chats/test_public_chat_browsing.py:241: in test_restore_multiaccount_with_waku_backup_remove_profile_switch
        self.errors.verify_no_errors()
    base_test_case.py:176: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     zQ3...dWXh5 was not restored as a contact from waku backup!
    E    zQ3...Vacac was not restored as a contact from waku backup!
    E    admin_open was not restored from waku-backup!!
    E    member_open was not restored from waku-backup!!
    E    admin_closed was not restored from waku-backup!!
    E    member_closed was not restored from waku-backup!!
    



    Device sessions

    Expected to fail tests (1)

    Click to expand

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_links_with_previews_github_youtube_twitter_gif_send_enable, id: 702844

    Device 2: Find EmojisNumber by xpath: //*[starts-with(@text,'https://m.youtube.com/watch?v=Je7yErjEVt4')]/ancestor::android.view.ViewGroup[@content-desc='chat-item']/../..//*[@content-desc='emoji-reaction-4']/android.widget.TextView[2]
    Device 2: Element EmojisNumber text is equal to 1

    critical/chats/test_public_chat_browsing.py:650: in test_community_links_with_previews_github_youtube_twitter_gif_send_enable
        self.errors.verify_no_errors()
    base_test_case.py:176: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     No preview is loaded for url https://youtu.be/Je7yErjEVt4
    E    No preview is loaded for url https://www.youtube.com/watch?v=XN-SVmuJH2g&list=PLbrz7IuP1hrgNtYe9g6YHwHO6F3OqNMao
    E    No preview is loaded for url https://m.youtube.com/watch?v=Je7yErjEVt4 
    

    [[Youtube links preview is not loaded on LambdaTest emulators, needs investigation]]

    Device sessions

    Passed tests (53)

    Click to expand

    Class TestWalletMultipleDevice:

    1. test_wallet_send_asset_from_drawer, id: 727230
    2. test_wallet_send_eth, id: 727229

    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

    3. test_add_contact_field_validation, id: 702777
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_edit_message, id: 702855
    Device sessions

    2. test_1_1_chat_message_reaction, id: 702730
    Device sessions

    3. test_1_1_chat_non_latin_messages_stack_update_profile_photo, id: 702745
    Device sessions

    4. test_1_1_chat_pin_messages, id: 702731
    Device sessions

    5. test_1_1_chat_text_message_delete_push_disappear, id: 702733
    Device sessions

    6. test_1_1_chat_push_emoji, id: 702813
    Device sessions

    7. test_1_1_chat_emoji_send_reply_and_open_link, id: 702782
    Device sessions

    8. test_1_1_chat_send_image_save_and_share, id: 703391
    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_emoji_send_copy_paste_reply, id: 702840
    Device sessions

    2. test_community_contact_block_unblock_offline, id: 702894
    Device sessions

    3. test_community_mark_all_messages_as_read, id: 703086
    Device sessions

    4. test_community_unread_messages_badge, id: 702841
    Device sessions

    5. test_community_message_delete, id: 702839
    Device sessions

    6. test_community_message_send_check_timestamps_sender_username, id: 702838
    Device sessions

    7. test_community_edit_delete_message_when_offline, id: 704615
    Device sessions

    8. test_community_one_image_send_reply, id: 702859
    Device sessions

    9. test_community_message_edit, id: 702843
    Device sessions

    10. test_community_several_images_send_reply, id: 703194
    Device sessions

    Class TestCommunityMultipleDeviceMergedTwo:

    1. test_community_leave, id: 702845
    Device sessions

    2. test_community_mentions_push_notification, id: 702786
    Device sessions

    3. test_community_markdown_support, id: 702809
    Device sessions

    4. test_community_hashtag_links_to_community_channels, id: 702948
    Device sessions

    5. test_community_join_when_node_owner_offline, id: 703629
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUiTwo:

    1. test_1_1_chat_mute_chat, id: 703496
    Device sessions

    2. test_1_1_chat_is_shown_message_sent_delivered_from_offline, id: 702783
    Device sessions

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_reactions, id: 703202
    Device sessions

    2. test_group_chat_join_send_text_messages_push, id: 702807
    Device sessions

    3. test_group_chat_offline_pn, id: 702808
    Device sessions

    4. test_group_chat_pin_messages, id: 702732
    Device sessions

    5. test_group_chat_send_image_save_and_share, id: 703297
    Device sessions

    6. test_group_chat_mute_chat, id: 703495
    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

    3. test_community_undo_delete_message, id: 702869
    Device sessions

    4. test_community_mute_community_and_channel, id: 703382
    Device sessions

    5. test_community_discovery, id: 703503
    Device sessions

    Class TestActivityMultipleDevicePR:

    1. test_activity_center_reply_read_unread_delete_filter_swipe, id: 702947
    Device sessions

    Class TestWalletOneDevice:

    1. test_wallet_add_remove_regular_account, id: 727231
    2. test_wallet_balance_mainnet, id: 740490

    Class TestDeepLinksOneDevice:

    1. test_links_open_universal_links_from_chat, id: 704613
    Device sessions

    2. test_links_deep_links_profile, id: 702775
    Device sessions

    3. test_deep_links_communities, id: 739307
    Device sessions

    Class TestFallbackMultipleDevice:

    1. test_fallback_add_key_pair, id: 741054
    2. test_fallback_sync_with_error, id: 740220
    3. test_fallback_with_correct_seed_phrase, id: 740221
    4. test_fallback_validate_seed_phrase, id: 740222

    Class TestActivityMultipleDevicePRTwo:

    1. test_activity_center_admin_notification_accept_swipe, id: 702958
    Device sessions

    2. test_activity_center_mentions, id: 702957
    Device sessions

    @pavloburykh
    Copy link
    Contributor

    @seanstrom thanks for the PR. No issues from my side. Ready for merge.

    @seanstrom seanstrom force-pushed the seanstrom/cleanup-events-and-tests branch from e4bc784 to e7ec3c0 Compare January 14, 2025 12:58
    @seanstrom seanstrom merged commit 5dc1bfe into develop Jan 14, 2025
    5 checks passed
    @seanstrom seanstrom deleted the seanstrom/cleanup-events-and-tests branch January 14, 2025 14:41
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    Status: DONE
    Development

    Successfully merging this pull request may close these issues.

    6 participants