diff --git a/src/status_im/ui/screens/chat/input/input.cljs b/src/status_im/ui/screens/chat/input/input.cljs index 0c5e9129dd..32c6e5ffde 100644 --- a/src/status_im/ui/screens/chat/input/input.cljs +++ b/src/status_im/ui/screens/chat/input/input.cljs @@ -159,6 +159,7 @@ [react/scroll-view {:style style/reply-message-content} [react/view {:style style/reply-message-to-container} [vector-icons/tiny-icon :tiny-icons/tiny-reply {:container-style style/reply-icon + :accessibility-label :tiny-reply-icon :width 20 :color colors/gray}] (chat-utils/format-reply-author from alias ens-name current-public-key style/reply-message-author)] diff --git a/test/appium/tests/atomic/chats/test_chats_management.py b/test/appium/tests/atomic/chats/test_chats_management.py index 73523364c4..811cc4eac7 100644 --- a/test/appium/tests/atomic/chats/test_chats_management.py +++ b/test/appium/tests/atomic/chats/test_chats_management.py @@ -2,7 +2,7 @@ import pytest import time from tests import marks, camera_access_error_text, get_current_time -from tests.users import basic_user +from tests.users import basic_user, dummy_user from tests.base_test_case import SingleDeviceTestCase, MultipleDeviceTestCase from views.sign_in_view import SignInView @@ -211,6 +211,39 @@ class TestChatManagement(SingleDeviceTestCase): if home.element_by_text(basic_user["username"]).is_element_displayed(): self.driver.fail("Unblocked user not added previously in contact list added in contacts!") + @marks.testrail_id(5496) + @marks.low + def test_can_remove_quote_snippet_from_inputs(self): + sign_in = SignInView(self.driver) + home = sign_in.create_user() + chat_view = home.add_contact(dummy_user["public_key"], add_in_contacts=False) + message_to_quote_1_to_1 = "This is a message to quote in 1-1" + message_to_quote_public = "This is a message to quote in public" + + chat_view.just_fyi("Send and quote message in 1-1 chat") + chat_view.send_message(message_to_quote_1_to_1) + chat_view.quote_message(message_to_quote_1_to_1) + chat_view.get_back_to_home_view(times_to_click_on_back_btn=1) + + chat_view.just_fyi("Send and quote message in public chat") + public_chat_name = home.get_public_chat_name() + home.join_public_chat(public_chat_name) + chat_view.send_message(message_to_quote_public) + chat_view.quote_message(message_to_quote_public) + + chat_view.just_fyi("Clear quotes from both chats") + chat_view.cancel_reply_button.click() + + if chat_view.tiny_reply_icon_in_message_input.is_element_displayed(): + self.errors.append("Message quote kept in public chat input after it's cancelation") + chat_view.get_back_to_home_view(times_to_click_on_back_btn=1) + home.get_chat_with_user(dummy_user["username"]).click() + chat_view.cancel_reply_button.click() + if chat_view.tiny_reply_icon_in_message_input.is_element_displayed(): + self.errors.append("Message quote kept in 1-1 chat input after it's cancelation") + + self.errors.verify_no_errors() + @marks.chat class TestChatManagementMultipleDevice(MultipleDeviceTestCase): @@ -301,9 +334,8 @@ class TestChatManagementMultipleDevice(MultipleDeviceTestCase): "'%s' from blocked user %s are shown in public chat" % (message, device_2.driver.number)) @marks.testrail_id(5763) - @marks.high + @marks.medium def test_block_user_from_one_to_one_header(self): - self.create_drivers(2) device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1]) message_before_block_1 = "Before block from %s" % device_1.driver.number diff --git a/test/appium/tests/atomic/chats/test_public.py b/test/appium/tests/atomic/chats/test_public.py index 2ae436ebe0..d6ce387568 100644 --- a/test/appium/tests/atomic/chats/test_public.py +++ b/test/appium/tests/atomic/chats/test_public.py @@ -138,8 +138,7 @@ class TestPublicChatMultipleDevice(MultipleDeviceTestCase): if not chat_element_2.is_element_displayed(sec=10): self.errors.append('Message with emoji was not received in public chat by the recipient') - chat_element_2.long_press_element() - chat_2.element_by_text('Reply').click() + chat_2.quote_message(emoji_unicode) message_text = 'test message' chat_2.chat_message_input.send_keys(message_text) chat_2.send_message_button.click() diff --git a/test/appium/tests/atomic/transactions/test_wallet.py b/test/appium/tests/atomic/transactions/test_wallet.py index a4963e60e1..c2793e964e 100644 --- a/test/appium/tests/atomic/transactions/test_wallet.py +++ b/test/appium/tests/atomic/transactions/test_wallet.py @@ -393,7 +393,7 @@ class TestTransactionWalletSingleDevice(SingleDeviceTestCase): send_transaction.sign_with_password.click_until_presence_of_element(send_transaction.enter_password_input) send_transaction.enter_password_input.send_keys(common_password) send_transaction.sign_button.click() - send_transaction.element_by_text('intrinsic gas too low', 'text').wait_for_visibility_of_element(40) + send_transaction.element_by_text('intrinsic gas too low', 'text').wait_for_visibility_of_element(80) send_transaction.ok_button.click() send_transaction.sign_transaction_button.click() @@ -409,6 +409,7 @@ class TestTransactionWalletSingleDevice(SingleDeviceTestCase): self.network_api.find_transaction_by_unique_amount(sender['address'], amount) @marks.testrail_id(5314) + @marks.critical def test_can_see_all_transactions_in_history(self): address = wallet_users['D']['address'] passphrase = wallet_users['D']['passphrase'] diff --git a/test/appium/tests/users.py b/test/appium/tests/users.py index 6c27a070ce..cc6bd33dda 100644 --- a/test/appium/tests/users.py +++ b/test/appium/tests/users.py @@ -18,6 +18,14 @@ ens_user_other_domain = dict() ens_user_other_domain['ens'] = 'tanyatest1.eth' ens_user_other_domain['address'] = '0xcf2272205cc0cf96Cfbb9Dd740BD681D1E86901E' +dummy_user = dict() +dummy_user['username'] = "Vain Wordy Hagfish" +dummy_user['passphrase'] = "near broom kiss excess sad switch slab melt trade crash spare dinner" +dummy_user['public_key'] = "0x04596348471aa19d31c8503fa00f95abd0fc3ca908668817284b52b7ced95f966cc13457254aa908aa8e64" \ + "a2748453accf9d358b8d7a1448597201c664dc280e37" +dummy_user['address'] = "0xdF6Bc71206d7ea89ec905a7f5ce8Ff34C85eB04e" + + wallet_users = dict() wallet_users['A'] = dict() diff --git a/test/appium/views/base_view.py b/test/appium/views/base_view.py index d070c25efc..45e7eb37b4 100644 --- a/test/appium/views/base_view.py +++ b/test/appium/views/base_view.py @@ -541,12 +541,12 @@ class BaseView(object): raw_public_key = bytearray.fromhex(public_key.replace('0x04', '')) return datatypes.PublicKey(raw_public_key).to_address()[2:] - def get_back_to_home_view(self): + def get_back_to_home_view(self, times_to_click_on_back_btn=5): counter = 0 from views.home_view import PlusButton while not PlusButton(self.driver).is_element_displayed(2): try: - if counter >= 5: + if counter >= times_to_click_on_back_btn: break self.back_button.click() except (NoSuchElementException, TimeoutException): diff --git a/test/appium/views/chat_view.py b/test/appium/views/chat_view.py index 587d8d0f5f..7d35de5d40 100644 --- a/test/appium/views/chat_view.py +++ b/test/appium/views/chat_view.py @@ -14,11 +14,24 @@ class ChatMessageInput(BaseEditBox): self.locator = self.Locator.accessibility_id('chat-message-input') +class TinyReplyIconInMessageInput(BaseElement): + def __init__(self, driver): + super(TinyReplyIconInMessageInput, self).__init__(driver) + self.locator = self.Locator.accessibility_id('tiny-reply-icon') + + +class CancelReplyButton(BaseEditBox): + def __init__(self, driver): + super(CancelReplyButton, self).__init__(driver) + self.locator = self.Locator.accessibility_id('cancel-message-reply') + + class AddToContacts(BaseButton): def __init__(self, driver): super(AddToContacts, self).__init__(driver) self.locator = self.Locator.accessibility_id('add-to-contacts-button') + class RemoveFromContactsButton(BaseButton): def __init__(self, driver): super(RemoveFromContactsButton, self).__init__(driver) @@ -100,6 +113,12 @@ class ClearHistoryButton(BaseButton): self.locator = self.Locator.xpath_selector('//*[@text="Clear history"]') +class ReplyMessageButton(BaseButton): + def __init__(self, driver): + super(ReplyMessageButton, self).__init__(driver) + self.locator = self.Locator.text_selector("Reply") + + class GroupInfoButton(BaseButton): def __init__(self, driver): @@ -380,6 +399,8 @@ class ChatView(BaseView): super(ChatView, self).__init__(driver) self.chat_message_input = ChatMessageInput(self.driver) + self.tiny_reply_icon_in_message_input = TinyReplyIconInMessageInput(self.driver) + self.cancel_reply_button = CancelReplyButton(self.driver) self.add_to_contacts = AddToContacts(self.driver) self.remove_from_contacts = RemoveFromContactsButton(self.driver) self.user_name_text = UserNameText(self.driver) @@ -399,6 +420,7 @@ class ChatView(BaseView): self.members_button = MembersButton(self.driver) self.delete_chat_button = DeleteChatButton(self.driver) self.clear_history_button = ClearHistoryButton(self.driver) + self.reply_message_button = ReplyMessageButton(self.driver) self.clear_button = ClearButton(self.driver) self.block_contact_button = BlockContactButton(self.driver) self.unblock_contact_button = UnblockContactButton(self.driver) @@ -568,6 +590,10 @@ class ChatView(BaseView): self.chat_message_input.send_keys(message) self.send_message_button.click() + def quote_message(self, message = str): + self.chat_element_by_text(message).long_press_element() + self.reply_message_button.click() + def move_to_messages_by_time_marker(self, marker='Today'): self.driver.info("Moving to messages by time marker: '%s'" % marker) HistoryTimeMarker(self.driver, marker).scroll_to_element(depth=50, direction='up')