From 5f441dfa939183b5e1b771719a4fe984557c30bb Mon Sep 17 00:00:00 2001 From: Yevheniia Berdnyk Date: Thu, 29 Jun 2023 15:12:33 +0300 Subject: [PATCH] e2e: Reactions in 1-1 chats --- .../critical/chats/test_1_1_public_chats.py | 85 ++++++++++++++++--- test/appium/views/chat_view.py | 9 +- 2 files changed, 78 insertions(+), 16 deletions(-) diff --git a/test/appium/tests/critical/chats/test_1_1_public_chats.py b/test/appium/tests/critical/chats/test_1_1_public_chats.py index e178d8022a..09545d6385 100644 --- a/test/appium/tests/critical/chats/test_1_1_public_chats.py +++ b/test/appium/tests/critical/chats/test_1_1_public_chats.py @@ -3,6 +3,7 @@ import time import emoji import pytest +from _pytest.outcomes import Failed from selenium.common.exceptions import TimeoutException, NoSuchElementException from tests import marks, common_password, run_in_parallel @@ -862,7 +863,7 @@ class TestOneToOneChatMultipleSharedDevicesNewUi(MultipleSharedDeviceTestCase): @marks.testrail_id(702730) def test_1_1_chat_message_reaction(self): message_from_sender = "Message sender" - self.device_1.just_fyi("Sender start 1-1 chat, set emoji and check counter") + self.device_1.just_fyi("Sender start 1-1 chat, set 'thumbs-up' emoji and check counter") self.chat_1.send_message(message_from_sender) self.chat_1.chat_element_by_text(message_from_sender).wait_for_sent_state(120) self.chat_1.set_reaction(message_from_sender) @@ -870,21 +871,57 @@ class TestOneToOneChatMultipleSharedDevicesNewUi(MultipleSharedDeviceTestCase): message_sender = self.chat_1.chat_element_by_text(message_from_sender) message_sender.emojis_below_message().wait_for_element_text(1) - self.device_2.just_fyi("Receiver sets own emoji and verifies counter on received message in 1-1 chat") + self.device_2.just_fyi( + "Receiver also sets 'thumbs-up' emoji and verifies counter on received message in 1-1 chat") message_receiver = self.chat_2.chat_element_by_text(message_from_sender) - message_receiver.emojis_below_message().wait_for_element_text(1, 90) + message_receiver.emojis_below_message(emoji="thumbs-up").wait_for_element_text(1, 90) self.chat_2.add_remove_same_reaction(message_from_sender) - message_receiver.emojis_below_message().wait_for_element_text(2) - message_sender.emojis_below_message().wait_for_element_text(2, 90) + message_receiver.emojis_below_message(emoji="thumbs-up").wait_for_element_text(2) + message_sender.emojis_below_message(emoji="thumbs-up").wait_for_element_text(2, 90) - self.device_2.just_fyi("Receiver pick the same emoji and verify that counter will decrease for both users") + self.device_2.just_fyi( + "Receiver removes 'thumbs-up' emoji and verify that counter will decrease for both users") self.chat_2.add_remove_same_reaction(message_from_sender) - message_receiver.emojis_below_message().wait_for_element_text(1) - message_sender.emojis_below_message().wait_for_element_text(1, 90) + message_receiver.emojis_below_message(emoji="thumbs-up").wait_for_element_text(1) + message_sender.emojis_below_message(emoji="thumbs-up").wait_for_element_text(1, 90) + + self.device_2.just_fyi("Receiver sets another reaction ('love'). Check it's shown for both sender and receiver") + self.chat_2.set_reaction(message_from_sender, emoji="love") + message_receiver.emojis_below_message(emoji="thumbs-up").wait_for_element_text(1) + message_sender.emojis_below_message(emoji="thumbs-up").wait_for_element_text(1, 90) + message_receiver.emojis_below_message(emoji="love").wait_for_element_text(1) + message_sender.emojis_below_message(emoji="love").wait_for_element_text(1, 90) + + self.device_1.just_fyi("Sender votes for 'love' reaction. Check reactions counters") + self.chat_1.add_remove_same_reaction(message_from_sender, emoji="love") + message_receiver.emojis_below_message(emoji="thumbs-up").wait_for_element_text(1) + message_sender.emojis_below_message(emoji="thumbs-up").wait_for_element_text(1) + message_receiver.emojis_below_message(emoji="love").wait_for_element_text(2, 90) + message_sender.emojis_below_message(emoji="love").wait_for_element_text(2) + + self.device_1.just_fyi("Check emojis info") + message_sender.emojis_below_message(emoji="love").long_press_until_element_is_shown( + self.chat_1.authors_for_reaction(emoji="love")) + if not self.chat_1.user_list_element_by_name( + self.username_1).is_element_displayed() or not self.chat_1.user_list_element_by_name( + self.username_2).is_element_displayed(): + self.errors.append("Incorrect users are shown for 'love' reaction.") + + self.chat_1.authors_for_reaction(emoji="thumbs-up").click() + if not self.chat_1.user_list_element_by_name( + self.username_1).is_element_displayed() or self.chat_1.user_list_element_by_name( + self.username_2).is_element_displayed(): + self.errors.append("Incorrect users are shown for 'thumbs-up' reaction.") + self.chat_1.driver.press_keycode(4) + self.errors.verify_no_errors() @marks.testrail_id(702782) def test_1_1_chat_emoji_send_reply_and_open_link(self): + for chat in self.chat_1, self.chat_2: + element = chat.chat_message_input + if not element.is_element_displayed(): + chat.click_system_back_button_until_element_is_shown(element) self.home_1.just_fyi("Check that can send emoji in 1-1 chat") emoji_name = random.choice(list(emoji.EMOJI_UNICODE)) emoji_unicode = emoji.EMOJI_UNICODE[emoji_name] @@ -911,6 +948,14 @@ class TestOneToOneChatMultipleSharedDevicesNewUi(MultipleSharedDeviceTestCase): self.chat_1.just_fyi("Receiver verifies received reply...") if self.chat_2.chat_element_by_text(reply_to_message_from_sender).replied_message_text != emoji_unicode: self.errors.append("No reply received in 1-1 chat") + else: + self.chat_2.just_fyi("Device 2 sets a reaction on the message reply. Device 1 checks the reaction") + self.chat_1.set_reaction(reply_to_message_from_sender) + try: + self.chat_1.chat_element_by_text( + reply_to_message_from_sender).emojis_below_message().wait_for_element_text(1) + except Failed: + self.errors.append("Reply message reaction is not shown for the sender") self.home_1.just_fyi("Check that link can be opened and replied from 1-1 chat") reply = 'reply to link' @@ -923,6 +968,13 @@ class TestOneToOneChatMultipleSharedDevicesNewUi(MultipleSharedDeviceTestCase): if replied_message.replied_message_text != url_message: self.errors.append("Reply for '%s' not present in message received in public chat" % url_message) + self.chat_2.just_fyi("Device 2 sets a reaction on the message with a link. Device 1 checks the reaction") + self.chat_2.set_reaction(url_message) + try: + self.chat_1.chat_element_by_text(url_message).emojis_below_message().wait_for_element_text(1) + except Failed: + self.errors.append("Link message reaction is not shown for the sender") + self.home_2.just_fyi("Check 'Open in Status' option") url_message = 'http://status.im' self.chat_1.send_message(url_message) @@ -1127,8 +1179,6 @@ class TestOneToOneChatMultipleSharedDevicesNewUi(MultipleSharedDeviceTestCase): self.errors.append("PN are keep staying after message was seen by user") self.errors.verify_no_errors() - @marks.xfail(reason="Message is being in status 'Sending' for a long time: " \ - "https://github.com/status-im/status-mobile/issues/15385") @marks.testrail_id(702855) def test_1_1_chat_edit_message(self): [home.click_system_back_button_until_element_is_shown() for home in self.homes] @@ -1136,18 +1186,25 @@ class TestOneToOneChatMultipleSharedDevicesNewUi(MultipleSharedDeviceTestCase): self.chat_1.jump_to_card_by_text(self.username_2) self.device_2.just_fyi( - "Device 1 sends text message and edits it in 1-1 chat. Device2 checks edited message is shown") + "Device 2 sends text message and edits it in 1-1 chat. Device 2 checks edited message is shown") message_before_edit_1_1, message_after_edit_1_1 = "Message before edit 1-1", "AFTER" self.chat_2.send_message(message_before_edit_1_1) self.chat_2.chat_element_by_text(message_before_edit_1_1).wait_for_status_to_be("Delivered") self.chat_2.edit_message_in_chat(message_before_edit_1_1, message_after_edit_1_1) - chat_element = self.chat_1.chat_element_by_text('%s (Edited)' % message_after_edit_1_1) + message_text_after_edit = message_after_edit_1_1 + ' (Edited)' + chat_element = self.chat_1.chat_element_by_text(message_text_after_edit) if not chat_element.is_element_displayed(30): self.errors.append('No edited message in 1-1 chat displayed') + else: + self.device_1.just_fyi("Device 1 sets a reaction on the edited message. Device 2 checks the reaction") + self.chat_1.set_reaction(message_text_after_edit) + try: + self.chat_1.chat_element_by_text( + message_text_after_edit).emojis_below_message().wait_for_element_text(1) + except Failed: + self.errors.append("Message reaction is not shown for the sender") self.errors.verify_no_errors() - @marks.xfail(reason="Message is being in status 'Sending' for a long time: " \ - "https://github.com/status-im/status-mobile/issues/15385") @marks.testrail_id(702733) def test_1_1_chat_text_message_delete_push_disappear(self): if not self.chat_2.chat_message_input.is_element_displayed(): diff --git a/test/appium/views/chat_view.py b/test/appium/views/chat_view.py index 2229ee34c7..d04e1739d9 100644 --- a/test/appium/views/chat_view.py +++ b/test/appium/views/chat_view.py @@ -1149,6 +1149,9 @@ class ChatView(BaseView): community_button.click() return CommunityView(self.driver) + def user_list_element_by_name(self, user_name: str): + return BaseElement(self.driver, xpath="//*[@content-desc='user-list']//*[@text='%s']" % user_name) + def mention_user(self, user_name: str): self.driver.info("Mention user %s in the chat" % user_name) gboard = self.driver.available_ime_engines[0] @@ -1157,8 +1160,7 @@ class ChatView(BaseView): self.chat_message_input.send_keys("@") try: self.mentions_list.wait_for_element() - self.driver.find_element(MobileBy.XPATH, - "//*[@content-desc='user-list']//*[@text='%s']" % user_name).click() + self.user_list_element_by_name(user_name).click() except TimeoutException: self.driver.fail("Mentions list is not shown") @@ -1220,3 +1222,6 @@ class ChatView(BaseView): @staticmethod def pn_wants_you_to_join_to_group_chat(admin, chat_name): return '%s wants you to join group %s' % (admin, chat_name) + + def authors_for_reaction(self, emoji: str): + return Button(self.driver, accessibility_id='authors-for-reaction-%s' % emojis[emoji])