From f41aa5bdea67907b4ffdb15f68e1da5f69ec1ea8 Mon Sep 17 00:00:00 2001 From: pavloburykh Date: Mon, 23 May 2022 17:51:51 +0300 Subject: [PATCH] e2e: permissions-scan-qr group --- test/appium/support/testrail_report.py | 2 + .../tests/medium/test_permissions_scan_qr.py | 433 +++++++++++++++++ .../appium/tests/medium/test_single_device.py | 437 +----------------- 3 files changed, 442 insertions(+), 430 deletions(-) create mode 100644 test/appium/tests/medium/test_permissions_scan_qr.py diff --git a/test/appium/support/testrail_report.py b/test/appium/support/testrail_report.py index 4f0736b4fb..1cb45c66e8 100644 --- a/test/appium/support/testrail_report.py +++ b/test/appium/support/testrail_report.py @@ -118,6 +118,8 @@ class TestrailReport(BaseTestReport): test_cases['pr']['ens'] = 50827 test_cases['pr']['sync'] = 50834 test_cases['pr']['browser'] = 50812 + test_cases['pr']['permissions'] = 50843 + test_cases['pr']['scan qr'] = 50844 ## Nightly e2e test_cases['nightly']['medium'] = 736 test_cases['nightly']['chat'] = 50811 diff --git a/test/appium/tests/medium/test_permissions_scan_qr.py b/test/appium/tests/medium/test_permissions_scan_qr.py new file mode 100644 index 0000000000..d519ed10eb --- /dev/null +++ b/test/appium/tests/medium/test_permissions_scan_qr.py @@ -0,0 +1,433 @@ +import pytest + +from tests import marks +from tests.users import transaction_senders, basic_user, ens_user_ropsten, ens_user +from views.web_views.base_web_view import BaseWebView +from tests.base_test_case import create_shared_drivers, MultipleSharedDeviceTestCase +from views.send_transaction_view import SendTransactionView +from views.chat_view import ChatView +from views.sign_in_view import SignInView +from views.profile_view import ProfileView + + +@pytest.mark.xdist_group(name="one_2") +@marks.medium +class TestPermissionsScanQrOneDevice(MultipleSharedDeviceTestCase): + + @classmethod + def setup_class(cls): + cls.drivers, cls.loop = create_shared_drivers(1) + cls.sign_in = SignInView(cls.drivers[0]) + cls.home = cls.sign_in.recover_access(transaction_senders['C']['passphrase']) + cls.public_key = cls.home.get_public_key_and_username() + cls.home.home_button.click() + + @marks.testrail_id(702289) + def test_permissions_deny_access_camera_and_gallery(self): + general_camera_error = self.home.element_by_translation_id("camera-access-error") + + self.home.just_fyi("Denying access to camera in universal qr code scanner") + self.home.plus_button.click() + self.home.universal_qr_scanner_button.click() + self.home.deny_button.click() + general_camera_error.wait_for_visibility_of_element(3) + self.home.ok_button.click() + self.home.get_back_to_home_view() + + self.home.just_fyi("Denying access to camera in scan chat key view") + self.home.plus_button.click() + chat = self.home.start_new_chat_button.click() + chat.scan_contact_code_button.click() + chat.deny_button.click() + general_camera_error.wait_for_visibility_of_element(3) + chat.ok_button.click() + self.home.get_back_to_home_view() + + self.home.just_fyi("Denying access to gallery at attempt to send image") + self.home.add_contact(basic_user['public_key']) + chat.show_images_button.click() + chat.deny_button.click() + chat.element_by_translation_id("external-storage-denied").wait_for_visibility_of_element(3) + chat.ok_button.click() + + self.home.just_fyi("Denying access to audio at attempt to record audio") + chat.audio_message_button.click() + chat.deny_button.click() + chat.element_by_translation_id("audio-recorder-permissions-error").wait_for_visibility_of_element(3) + chat.ok_button.click() + self.home.get_back_to_home_view() + + self.home.just_fyi("Denying access to camera in wallet view") + wallet = self.home.wallet_button.click() + wallet.scan_qr_button.click() + wallet.deny_button.click() + general_camera_error.wait_for_visibility_of_element(3) + wallet.ok_button.click() + + self.home.just_fyi("Denying access to camera in send transaction > scan address view") + wallet.accounts_status_account.click() + send_transaction = wallet.send_transaction_button.click() + send_transaction.chose_recipient_button.scroll_and_click() + send_transaction.scan_qr_code_button.click() + send_transaction.deny_button.click() + general_camera_error.wait_for_visibility_of_element(3) + send_transaction.ok_button.click() + wallet.close_button.click() + wallet.close_send_transaction_view_button.click() + + self.home.just_fyi("Allow access to camera in universal qr code scanner and check it in other views") + wallet.home_button.click() + self.home.plus_button.click() + self.home.universal_qr_scanner_button.click() + self.home.allow_button.click() + if not self.home.element_by_text('Scan QR code').is_element_displayed(): + self.errors.append('Scan QR code is not opened after denying and allowing permission to the camera') + self.home.cancel_button.click() + wallet = self.home.wallet_button.click() + wallet.scan_qr_button.click() + if not self.home.element_by_text('Scan QR code').is_element_displayed(): + self.errors.append( + 'Scan QR code is not opened after allowing permission to the camera from univesal QR code' + ' scanner view') + wallet.cancel_button.click() + wallet.home_button.click() + self.home.get_chat(basic_user['username']).click() + chat.show_images_button.click() + chat.allow_button.click() + if not chat.first_image_from_gallery.is_element_displayed(): + self.errors.append('Image previews are not shown after denying and allowing access to gallery') + self.home.get_back_to_home_view() + + self.errors.verify_no_errors() + + @marks.testrail_id(702290) + def test_permissions_webview_camera(self): + web_view_camera_url = 'https://simpledapp.status.im/webviewtest/webviewcamera.html' + self.drivers[0].set_clipboard_text(web_view_camera_url) + dapp = self.home.dapp_tab_button.click() + dapp.enter_url_editbox.click() + dapp.paste_text() + dapp.confirm() + + # from views.web_views.base_web_view import BaseWebView + camera_dapp = BaseWebView(self.drivers[0]) + camera_dapp.just_fyi("Check camera request blocked (because it's not enabled in app yet)") + camera_request_blocked = self.home.get_translation_by_key("page-camera-request-blocked") + if not dapp.element_by_text_part(camera_request_blocked).is_element_displayed(): + self.driver.fail("There is no pop-up notifying that camera access need to be granted in app") + camera_dapp.swipe_down() + if not camera_dapp.camera_image_in_dapp.is_element_image_similar_to_template('blank_camera_image.png'): + self.driver.fail("Even camera permissions not allowed - acccess to camera granted") + + profile = self.home.profile_button.click() + profile.privacy_and_security_button.click() + + camera_dapp.just_fyi("Enable camera requests in Dapps") + profile.element_by_translation_id("webview-camera-permission-requests").scroll_and_click() + self.home.dapp_tab_button.click(desired_element_text='webview') + + camera_dapp.just_fyi("Check DApp asks now to allow camera access but Deny in DApp") + camera_dapp.browser_refresh_page_button.click() + camera_dapp.deny_button.click() + if not camera_dapp.camera_image_in_dapp.is_element_image_similar_to_template('blank_camera_image.png'): + self.driver.fail("Even camera access Denied to Dapp, - access to camera granted") + + camera_dapp.just_fyi("Check DApp asks now to allow camera access and Allow access to DApp") + camera_dapp.browser_refresh_page_button.click() + camera_dapp.allow_button.click() + if camera_dapp.camera_image_in_dapp.is_element_image_similar_to_template('blank_camera_image.png'): + self.driver.fail("Even camera access Accepted to Dapp, - camera view is not shown") + + camera_dapp.just_fyi("Relogin and check camera access still needs to be allowed") + self.home.profile_button.click() + profile.relogin() + self.home.dapp_tab_button.click() + camera_dapp.open_tabs_button.click() + dapp.element_by_text_part("https").click() + if not camera_dapp.allow_button.is_element_displayed(): + self.driver.fail("No request to camera access after relogin") + camera_dapp.allow_button.click() + self.home.home_button.click() + + self.errors.verify_no_errors() + + @marks.testrail_id(702291) + def test_scan_qr_with_scan_contact_code_via_start_chat(self): + + url_data = { + 'ens_with_stateofus_domain_deep_link': { + 'url': 'https://join.status.im/u/%s.stateofus.eth' % ens_user_ropsten['ens'], + 'username': '@%s' % ens_user_ropsten['ens'] + }, + 'ens_without_stateofus_domain_deep_link': { + 'url': 'https://join.status.im/u/%s' % ens_user_ropsten['ens'], + 'username': '@%s' % ens_user_ropsten['ens'] + }, + 'ens_another_domain_deep_link': { + 'url': 'status-im://u/%s' % ens_user['ens_another'], + 'username': '@%s' % ens_user['ens_another'] + }, + 'own_profile_key_deep_link': { + 'url': 'https://join.status.im/u/%s' % self.public_key, + 'error': "That's you" + }, + 'other_user_profile_key_deep_link': { + 'url': 'https://join.status.im/u/%s' % transaction_senders['M']['public_key'], + 'username': transaction_senders['M']['username'] + }, + 'other_user_profile_key_deep_link_invalid': { + 'url': 'https://join.status.im/u/%sinvalid' % ens_user['public_key'], + 'error': 'Please enter or scan a valid chat key' + }, + 'own_profile_key': { + 'url': self.public_key, + 'error': "That's you" + }, + # 'ens_without_stateofus_domain': { + # 'url': ens_user['ens'], + # 'username': ens_user['username'] + # }, + 'other_user_profile_key': { + 'url': transaction_senders['M']['public_key'], + 'username': transaction_senders['M']['username'] + }, + 'other_user_profile_key_invalid': { + 'url': '%s123' % ens_user['public_key'], + 'error': 'Please enter or scan a valid chat key' + }, + } + + for key in url_data: + self.home.plus_button.click_until_presence_of_element(self.home.start_new_chat_button) + contacts = self.home.start_new_chat_button.click() + self.home.just_fyi('Checking scanning qr for "%s" case' % key) + contacts.scan_contact_code_button.click() + contacts.allow_button.click_if_shown(3) + contacts.enter_qr_edit_box.scan_qr(url_data[key]['url']) + chat = ChatView(self.drivers[0]) + if url_data[key].get('error'): + if not chat.element_by_text_part(url_data[key]['error']).is_element_displayed(): + self.errors.append('Expected error %s is not shown' % url_data[key]['error']) + chat.ok_button.click() + if url_data[key].get('username'): + if not chat.chat_message_input.is_element_displayed(): + self.errors.append( + 'In "%s" case chat input is not found after scanning, so no redirect to 1-1' % key) + if not chat.element_by_text(url_data[key]['username']).is_element_displayed(): + self.errors.append('In "%s" case "%s" not found after scanning' % (key, url_data[key]['username'])) + chat.get_back_to_home_view() + self.errors.verify_no_errors() + + @marks.testrail_id(702293) + def test_scan_qr_different_links_with_universal_qr_scanner(self): + wallet = self.home.wallet_button.click() + wallet.home_button.click() + send_transaction = SendTransactionView(self.drivers[0]) + + url_data = { + 'ens_without_stateofus_domain_deep_link': { + 'url': 'https://join.status.im/u/%s' % ens_user_ropsten['ens'], + 'username': '@%s' % ens_user_ropsten['ens'] + }, + + 'other_user_profile_key_deep_link': { + 'url': 'status-im://u/%s' % basic_user['public_key'], + 'username': basic_user['username'] + }, + 'other_user_profile_key_deep_link_invalid': { + 'url': 'https://join.status.im/u/%sinvalid' % ens_user['public_key'], + 'error': 'Unable to read this code' + }, + 'own_profile_key': { + 'url': self.public_key, + }, + 'other_user_profile_key': { + 'url': transaction_senders['A']['public_key'], + 'username': transaction_senders['A']['username'] + }, + 'wallet_validation_wrong_address_transaction': { + 'url': 'ethereum:0x744d70fdbe2ba4cf95131626614a1763df805b9e@3/transfer?address=blablabla&uint256=1e10', + 'error': 'Invalid address', + }, + 'wallet_eip_ens_for_receiver': { + 'url': 'ethereum:0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=nastya.stateofus.eth&uint256=1e-1', + 'data': { + 'asset': 'STT', + 'amount': '0.1', + 'address': '0x58d8…F2ff', + }, + }, + 'wallet_eip_payment_link': { + 'url': 'ethereum:pay-0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=0x3d597789ea16054a084ac84ce87f50df9198f415&uint256=1e1', + 'data': { + 'amount': '10', + 'asset': 'STT', + 'address': '0x3D59…F415', + }, + }, + 'dapp_deep_link': { + 'url': 'https://join.status.im/b/simpledapp.eth', + }, + 'dapp_deep_link_https': { + 'url': 'https://join.status.im/b/https://simpledapp.eth', + }, + 'public_chat_deep_link': { + 'url': 'https://join.status.im/baga-ma-2020', + 'chat_name': 'baga-ma-2020' + }, + } + + for key in url_data: + self.home.plus_button.click_until_presence_of_element(self.home.start_new_chat_button) + self.home.just_fyi('Checking %s case' % key) + if self.home.universal_qr_scanner_button.is_element_displayed(): + self.home.universal_qr_scanner_button.click() + if self.home.allow_button.is_element_displayed(): + self.home.allow_button.click() + self.home.enter_qr_edit_box.scan_qr(url_data[key]['url']) + from views.chat_view import ChatView + chat = ChatView(self.drivers[0]) + if key == 'own_profile_key': + profile = ProfileView(self.drivers[0]) + if not profile.default_username_text.is_element_displayed(): + self.errors.append('In %s case was not redirected to own profile' % key) + self.home.home_button.double_click() + if url_data[key].get('error'): + if not chat.element_by_text_part(url_data[key]['error']).is_element_displayed(): + self.errors.append('Expected error %s is not shown' % url_data[key]['error']) + chat.ok_button.click() + if url_data[key].get('username'): + if not chat.element_by_text(url_data[key]['username']).is_element_displayed(): + self.errors.append('In %s case username not shown' % key) + if 'wallet' in key: + if url_data[key].get('data'): + actual_data = send_transaction.get_values_from_send_transaction_bottom_sheet() + difference_in_data = url_data[key]['data'].items() - actual_data.items() + if difference_in_data: + self.errors.append( + 'In %s case returned value does not match expected in %s' % (key, repr(difference_in_data))) + wallet.close_send_transaction_view_button.click() + wallet.home_button.click() + if 'dapp' in key: + self.home.open_in_status_button.click() + if not (chat.allow_button.is_element_displayed() or chat.element_by_text( + "Can't find web3 library").is_element_displayed()): + self.errors.append('No allow button is shown in case of navigating to Status dapp!') + chat.dapp_tab_button.click() + chat.home_button.click() + if 'public' in key: + if not chat.chat_message_input.is_element_displayed(): + self.errors.append('No message input is shown in case of navigating to public chat via deep link!') + if not chat.element_by_text_part(url_data[key]['chat_name']).is_element_displayed(): + self.errors.append('Chat name is not shown in case of navigating to public chat via deep link!') + chat.get_back_to_home_view() + + self.errors.verify_no_errors() + + @marks.testrail_id(702291) + def test_scan_qr_eip_681_links_via_wallet(self): + + wallet = self.home.wallet_button.click() + wallet.wait_balance_is_changed() + send_transaction_view = SendTransactionView(self.drivers[0]) + + self.home.just_fyi("Setting up wallet") + wallet.accounts_status_account.click_until_presence_of_element(wallet.send_transaction_button) + send_transaction = wallet.send_transaction_button.click() + send_transaction.set_recipient_address('0x%s' % basic_user['address']) + send_transaction.amount_edit_box.set_value("0") + send_transaction.confirm() + send_transaction.sign_transaction_button.click() + wallet.set_up_wallet_when_sending_tx() + wallet.cancel_button.click() + wallet.close_button.click() + + url_data = { + 'ens_for_receiver': { + 'url': 'ethereum:0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=nastya.stateofus.eth&uint256=1e-1', + 'data': { + 'asset': 'STT', + 'amount': '0.1', + 'address': '0x58d8…F2ff', + }, + }, + # 'gas_settings': { + # 'url': 'ethereum:0x3d597789ea16054a084ac84ce87f50df9198f415@3?value=1e16&gasPrice=1000000000&gasLimit=100000', + # 'data': { + # 'amount': '0.01', + # 'asset': 'ETHro', + # 'address': '0x3D59…F415', + # 'gas_limit': '100000', + # 'gas_price': '1', + # }, + # }, + 'payment_link': { + 'url': 'ethereum:pay-0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=0x3d597789ea16054a084ac84ce87f50df9198f415&uint256=1e1', + 'data': { + 'amount': '10', + 'asset': 'STT', + 'address': '0x3D59…F415', + }, + }, + 'validation_amount_too_presize': { + 'url': 'ethereum:0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA&uint256=1e-19', + 'data': { + 'amount': '1e-19', + 'asset': 'STT', + 'address': '0x1018…82FA', + + }, + 'send_transaction_validation_error': 'Amount is too precise', + }, + 'validation_amount_too_big': { + 'url': 'ethereum:0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA@3?value=1e25', + 'data': { + 'amount': '10000000', + 'asset': 'ETHro', + 'address': '0x1018…82FA', + + }, + 'send_transaction_validation_error': 'Insufficient funds', + }, + 'validation_wrong_chain_id': { + 'url': 'ethereum:0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA?value=1e17', + 'error': 'Network does not match', + 'data': { + 'amount': '0.1', + 'asset': 'ETHro', + 'address': '0x1018…82FA', + }, + }, + 'validation_wrong_address': { + 'url': 'ethereum:0x744d70fdbe2ba4cf95131626614a1763df805b9e@3/transfer?address=blablabla&uint256=1e10', + 'error': 'Invalid address', + }, + } + + for key in url_data: + wallet.just_fyi('Checking %s case' % key) + wallet.scan_qr_button.click() + if wallet.allow_button.is_element_displayed(): + wallet.allow_button.click() + wallet.enter_qr_edit_box.scan_qr(url_data[key]['url']) + if url_data[key].get('error'): + if not wallet.element_by_text_part(url_data[key]['error']).is_element_displayed(): + self.errors.append('Expected error %s is not shown' % url_data[key]['error']) + wallet.ok_button.click() + if url_data[key].get('data'): + actual_data = send_transaction_view.get_values_from_send_transaction_bottom_sheet() + difference_in_data = url_data[key]['data'].items() - actual_data.items() + if difference_in_data: + self.errors.append( + 'In %s case returned value does not match expected in %s' % (key, repr(difference_in_data))) + if url_data[key].get('send_transaction_validation_error'): + error = url_data[key]['send_transaction_validation_error'] + if not wallet.element_by_text_part(error).is_element_displayed(): + self.errors.append( + 'Expected error %s is not shown' % error) + if wallet.close_send_transaction_view_button.is_element_displayed(): + wallet.close_send_transaction_view_button.wait_and_click() + else: + wallet.cancel_button.wait_and_click() + + self.errors.verify_no_errors() diff --git a/test/appium/tests/medium/test_single_device.py b/test/appium/tests/medium/test_single_device.py index c1b2ab3dfc..e3deebda8d 100644 --- a/test/appium/tests/medium/test_single_device.py +++ b/test/appium/tests/medium/test_single_device.py @@ -42,133 +42,6 @@ class TestChatManagement(SingleDeviceTestCase): if profile.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(6319) - # TODO: merge with other 1-driver medium e2e - def test_permissions_deny_access_camera_and_gallery(self): - home = SignInView(self.driver).create_user() - general_camera_error = home.element_by_translation_id("camera-access-error") - - home.just_fyi("Denying access to camera in universal qr code scanner") - home.plus_button.click() - home.universal_qr_scanner_button.click() - home.deny_button.click() - general_camera_error.wait_for_visibility_of_element(3) - home.ok_button.click() - home.get_back_to_home_view() - - home.just_fyi("Denying access to camera in scan chat key view") - home.plus_button.click() - chat = home.start_new_chat_button.click() - chat.scan_contact_code_button.click() - chat.deny_button.click() - general_camera_error.wait_for_visibility_of_element(3) - chat.ok_button.click() - home.get_back_to_home_view() - - home.just_fyi("Denying access to gallery at attempt to send image") - home.add_contact(basic_user['public_key']) - chat.show_images_button.click() - chat.deny_button.click() - chat.element_by_translation_id("external-storage-denied").wait_for_visibility_of_element(3) - chat.ok_button.click() - - home.just_fyi("Denying access to audio at attempt to record audio") - chat.audio_message_button.click() - chat.deny_button.click() - chat.element_by_translation_id("audio-recorder-permissions-error").wait_for_visibility_of_element(3) - chat.ok_button.click() - home.get_back_to_home_view() - - home.just_fyi("Denying access to camera in wallet view") - wallet = home.wallet_button.click() - wallet.scan_qr_button.click() - wallet.deny_button.click() - general_camera_error.wait_for_visibility_of_element(3) - wallet.ok_button.click() - - home.just_fyi("Denying access to camera in send transaction > scan address view") - wallet.accounts_status_account.click() - send_transaction = wallet.send_transaction_button.click() - send_transaction.chose_recipient_button.scroll_and_click() - send_transaction.scan_qr_code_button.click() - send_transaction.deny_button.click() - general_camera_error.wait_for_visibility_of_element(3) - send_transaction.ok_button.click() - wallet.close_button.click() - wallet.close_send_transaction_view_button.click() - - home.just_fyi("Allow access to camera in universal qr code scanner and check it in other views") - wallet.home_button.click() - home.plus_button.click() - home.universal_qr_scanner_button.click() - home.allow_button.click() - if not home.element_by_text('Scan QR code').is_element_displayed(): - self.errors.append('Scan QR code is not opened after denying and allowing permission to the camera') - home.cancel_button.click() - wallet = home.wallet_button.click() - wallet.scan_qr_button.click() - if not home.element_by_text('Scan QR code').is_element_displayed(): - self.errors.append( - 'Scan QR code is not opened after allowing permission to the camera from univesal QR code' - ' scanner view') - wallet.cancel_button.click() - wallet.home_button.click() - home.get_chat(basic_user['username']).click() - chat.show_images_button.click() - chat.allow_button.click() - if not chat.first_image_from_gallery.is_element_displayed(): - self.errors.append('Image previews are not shown after denying and allowing access to gallery') - self.errors.verify_no_errors() - - @marks.testrail_id(6635) - # TODO: merge with other 1-driver medium e2e - def test_permissions_webview_camera(self): - web_view_camera_url = 'https://simpledapp.status.im/webviewtest/webviewcamera.html' - home = SignInView(self.driver).create_user() - self.driver.set_clipboard_text(web_view_camera_url) - dapp = home.dapp_tab_button.click() - dapp.enter_url_editbox.click() - dapp.paste_text() - dapp.confirm() - - from views.web_views.base_web_view import BaseWebView - camera_dapp = BaseWebView(self.driver) - camera_dapp.just_fyi("Check camera request blocked (because it's not enabled in app yet)") - camera_request_blocked = home.get_translation_by_key("page-camera-request-blocked") - if not dapp.element_by_text_part(camera_request_blocked).is_element_displayed(): - self.driver.fail("There is no pop-up notifying that camera access need to be granted in app") - camera_dapp.swipe_down() - if not camera_dapp.camera_image_in_dapp.is_element_image_similar_to_template('blank_camera_image.png'): - self.driver.fail("Even camera permissions not allowed - acccess to camera granted") - - profile = home.profile_button.click() - profile.privacy_and_security_button.click() - - camera_dapp.just_fyi("Enable camera requests in Dapps") - profile.element_by_translation_id("webview-camera-permission-requests").scroll_and_click() - home.dapp_tab_button.click(desired_element_text='webview') - - camera_dapp.just_fyi("Check DApp asks now to allow camera aceess but Deny in DApp") - camera_dapp.browser_refresh_page_button.click() - camera_dapp.deny_button.click() - if not camera_dapp.camera_image_in_dapp.is_element_image_similar_to_template('blank_camera_image.png'): - self.driver.fail("Even camera access Denied to Dapp, - acccess to camera granted") - - camera_dapp.just_fyi("Check DApp asks now to allow camera aceess and Allow access to DApp") - camera_dapp.browser_refresh_page_button.click() - camera_dapp.allow_button.click() - if camera_dapp.camera_image_in_dapp.is_element_image_similar_to_template('blank_camera_image.png'): - self.driver.fail("Even camera access Accepted to Dapp, - camera view is not shown") - - camera_dapp.just_fyi("Relogin and check camera access still needs to be allowed") - home.profile_button.click() - profile.relogin() - home.dapp_tab_button.click() - camera_dapp.open_tabs_button.click() - dapp.element_by_text_part("https").click() - if not camera_dapp.allow_button.is_element_displayed(): - self.driver.fail("No request to camera access after relogin") - @marks.testrail_id(6300) @marks.skip # TODO: waiting mode (rechecked 23.11.21, valid) @@ -208,298 +81,6 @@ class TestChatManagement(SingleDeviceTestCase): self.errors.verify_no_errors() - @marks.testrail_id(6298) - # TODO: merge with other 1-driver medium e2e - def test_scan_qr_with_scan_contact_code_via_start_chat(self): - sign_in = SignInView(self.driver) - home = sign_in.recover_access(basic_user['passphrase']) - - url_data = { - 'ens_with_stateofus_domain_deep_link': { - 'url': 'https://join.status.im/u/%s.stateofus.eth' % ens_user_ropsten['ens'], - 'username': '@%s' % ens_user_ropsten['ens'] - }, - 'ens_without_stateofus_domain_deep_link': { - 'url': 'https://join.status.im/u/%s' % ens_user_ropsten['ens'], - 'username': '@%s' % ens_user_ropsten['ens'] - }, - 'ens_another_domain_deep_link': { - 'url': 'status-im://u/%s' % ens_user['ens_another'], - 'username': '@%s' % ens_user['ens_another'] - }, - 'own_profile_key_deep_link': { - 'url': 'https://join.status.im/u/%s' % basic_user['public_key'], - 'error': "That's you" - }, - 'other_user_profile_key_deep_link': { - 'url': 'https://join.status.im/u/%s' % transaction_senders['M']['public_key'], - 'username': transaction_senders['M']['username'] - }, - 'other_user_profile_key_deep_link_invalid': { - 'url': 'https://join.status.im/u/%sinvalid' % ens_user['public_key'], - 'error': 'Please enter or scan a valid chat key' - }, - 'own_profile_key': { - 'url': basic_user['public_key'], - 'error': "That's you" - }, - # 'ens_without_stateofus_domain': { - # 'url': ens_user['ens'], - # 'username': ens_user['username'] - # }, - 'other_user_profile_key': { - 'url': transaction_senders['M']['public_key'], - 'username': transaction_senders['M']['username'] - }, - 'other_user_profile_key_invalid': { - 'url': '%s123' % ens_user['public_key'], - 'error': 'Please enter or scan a valid chat key' - }, - } - - for key in url_data: - home.plus_button.click_until_presence_of_element(home.start_new_chat_button) - contacts = home.start_new_chat_button.click() - sign_in.just_fyi('Checking scanning qr for "%s" case' % key) - contacts.scan_contact_code_button.click() - if contacts.allow_button.is_element_displayed(): - contacts.allow_button.click() - contacts.enter_qr_edit_box.scan_qr(url_data[key]['url']) - from views.chat_view import ChatView - chat = ChatView(self.driver) - if url_data[key].get('error'): - if not chat.element_by_text_part(url_data[key]['error']).is_element_displayed(): - self.errors.append('Expected error %s is not shown' % url_data[key]['error']) - chat.ok_button.click() - if url_data[key].get('username'): - if not chat.chat_message_input.is_element_displayed(): - self.errors.append( - 'In "%s" case chat input is not found after scanning, so no redirect to 1-1' % key) - if not chat.element_by_text(url_data[key]['username']).is_element_displayed(): - self.errors.append('In "%s" case "%s" not found after scanning' % (key, url_data[key]['username'])) - chat.get_back_to_home_view() - self.errors.verify_no_errors() - - @marks.testrail_id(6322) - # TODO: merge with other 1-driver medium e2e - def test_scan_qr_different_links_with_universal_qr_scanner(self): - user = transaction_senders['ETH_STT_3'] - home = SignInView(self.driver).recover_access(user['passphrase']) - wallet = home.wallet_button.click() - wallet.home_button.click() - send_transaction = SendTransactionView(self.driver) - - url_data = { - 'ens_without_stateofus_domain_deep_link': { - 'url': 'https://join.status.im/u/%s' % ens_user_ropsten['ens'], - 'username': '@%s' % ens_user_ropsten['ens'] - }, - - 'other_user_profile_key_deep_link': { - 'url': 'status-im://u/%s' % basic_user['public_key'], - 'username': basic_user['username'] - }, - 'other_user_profile_key_deep_link_invalid': { - 'url': 'https://join.status.im/u/%sinvalid' % ens_user['public_key'], - 'error': 'Unable to read this code' - }, - 'own_profile_key': { - 'url': user['public_key'], - }, - 'other_user_profile_key': { - 'url': transaction_senders['A']['public_key'], - 'username': transaction_senders['A']['username'] - }, - 'wallet_validation_wrong_address_transaction': { - 'url': 'ethereum:0x744d70fdbe2ba4cf95131626614a1763df805b9e@3/transfer?address=blablabla&uint256=1e10', - 'error': 'Invalid address', - }, - 'wallet_eip_ens_for_receiver': { - 'url': 'ethereum:0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=nastya.stateofus.eth&uint256=1e-1', - 'data': { - 'asset': 'STT', - 'amount': '0.1', - 'address': '0x58d8…F2ff', - }, - }, - 'wallet_eip_payment_link': { - 'url': 'ethereum:pay-0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=0x3d597789ea16054a084ac84ce87f50df9198f415&uint256=1e1', - 'data': { - 'amount': '10', - 'asset': 'STT', - 'address': '0x3D59…F415', - }, - }, - 'dapp_deep_link': { - 'url': 'https://join.status.im/b/simpledapp.eth', - }, - 'dapp_deep_link_https': { - 'url': 'https://join.status.im/b/https://simpledapp.eth', - }, - 'public_chat_deep_link': { - 'url': 'https://join.status.im/baga-ma-2020', - 'chat_name': 'baga-ma-2020' - }, - } - - for key in url_data: - home.plus_button.click_until_presence_of_element(home.start_new_chat_button) - home.just_fyi('Checking %s case' % key) - if home.universal_qr_scanner_button.is_element_displayed(): - home.universal_qr_scanner_button.click() - if home.allow_button.is_element_displayed(): - home.allow_button.click() - home.enter_qr_edit_box.scan_qr(url_data[key]['url']) - from views.chat_view import ChatView - chat = ChatView(self.driver) - if key == 'own_profile_key': - from views.profile_view import ProfileView - profile = ProfileView(self.driver) - if not profile.default_username_text.is_element_displayed(): - self.errors.append('In %s case was not redirected to own profile' % key) - home.home_button.double_click() - if url_data[key].get('error'): - if not chat.element_by_text_part(url_data[key]['error']).is_element_displayed(): - self.errors.append('Expected error %s is not shown' % url_data[key]['error']) - chat.ok_button.click() - if url_data[key].get('username'): - if not chat.element_by_text(url_data[key]['username']).is_element_displayed(): - self.errors.append('In %s case username not shown' % key) - if 'wallet' in key: - if url_data[key].get('data'): - actual_data = send_transaction.get_values_from_send_transaction_bottom_sheet() - difference_in_data = url_data[key]['data'].items() - actual_data.items() - if difference_in_data: - self.errors.append( - 'In %s case returned value does not match expected in %s' % (key, repr(difference_in_data))) - wallet.close_send_transaction_view_button.click() - wallet.home_button.click() - if 'dapp' in key: - home.open_in_status_button.click() - if not (chat.allow_button.is_element_displayed() or chat.element_by_text( - "Can't find web3 library").is_element_displayed()): - self.errors.append('No allow button is shown in case of navigating to Status dapp!') - chat.dapp_tab_button.click() - chat.home_button.click() - if 'public' in key: - if not chat.chat_message_input.is_element_displayed(): - self.errors.append('No message input is shown in case of navigating to public chat via deep link!') - if not chat.element_by_text_part(url_data[key]['chat_name']).is_element_displayed(): - self.errors.append('Chat name is not shown in case of navigating to public chat via deep link!') - chat.get_back_to_home_view() - - self.errors.verify_no_errors() - - # TODO: merge with other 1-driver medium e2e - @marks.testrail_id(6282) - def test_scan_qr_eip_681_links_via_wallet(self): - sign_in = SignInView(self.driver) - sign_in.recover_access(transaction_senders['C']['passphrase']) - wallet = sign_in.wallet_button.click() - wallet.wait_balance_is_changed() - send_transaction_view = SendTransactionView(self.driver) - - sign_in.just_fyi("Setting up wallet") - wallet.accounts_status_account.click_until_presence_of_element(wallet.send_transaction_button) - send_transaction = wallet.send_transaction_button.click() - send_transaction.set_recipient_address('0x%s' % basic_user['address']) - send_transaction.amount_edit_box.set_value("0") - send_transaction.confirm() - send_transaction.sign_transaction_button.click() - wallet.set_up_wallet_when_sending_tx() - wallet.cancel_button.click() - wallet.close_button.click() - - url_data = { - 'ens_for_receiver': { - 'url': 'ethereum:0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=nastya.stateofus.eth&uint256=1e-1', - 'data': { - 'asset': 'STT', - 'amount': '0.1', - 'address': '0x58d8…F2ff', - }, - }, - # 'gas_settings': { - # 'url': 'ethereum:0x3d597789ea16054a084ac84ce87f50df9198f415@3?value=1e16&gasPrice=1000000000&gasLimit=100000', - # 'data': { - # 'amount': '0.01', - # 'asset': 'ETHro', - # 'address': '0x3D59…F415', - # 'gas_limit': '100000', - # 'gas_price': '1', - # }, - # }, - 'payment_link': { - 'url': 'ethereum:pay-0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=0x3d597789ea16054a084ac84ce87f50df9198f415&uint256=1e1', - 'data': { - 'amount': '10', - 'asset': 'STT', - 'address': '0x3D59…F415', - }, - }, - 'validation_amount_too_presize': { - 'url': 'ethereum:0xc55cf4b03948d7ebc8b9e8bad92643703811d162@3/transfer?address=0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA&uint256=1e-19', - 'data': { - 'amount': '1e-19', - 'asset': 'STT', - 'address': '0x1018…82FA', - - }, - 'send_transaction_validation_error': 'Amount is too precise', - }, - 'validation_amount_too_big': { - 'url': 'ethereum:0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA@3?value=1e25', - 'data': { - 'amount': '10000000', - 'asset': 'ETHro', - 'address': '0x1018…82FA', - - }, - 'send_transaction_validation_error': 'Insufficient funds', - }, - 'validation_wrong_chain_id': { - 'url': 'ethereum:0x101848D5C5bBca18E6b4431eEdF6B95E9ADF82FA?value=1e17', - 'error': 'Network does not match', - 'data': { - 'amount': '0.1', - 'asset': 'ETHro', - 'address': '0x1018…82FA', - }, - }, - 'validation_wrong_address': { - 'url': 'ethereum:0x744d70fdbe2ba4cf95131626614a1763df805b9e@3/transfer?address=blablabla&uint256=1e10', - 'error': 'Invalid address', - }, - } - - for key in url_data: - wallet.just_fyi('Checking %s case' % key) - wallet.scan_qr_button.click() - if wallet.allow_button.is_element_displayed(): - wallet.allow_button.click() - wallet.enter_qr_edit_box.scan_qr(url_data[key]['url']) - if url_data[key].get('error'): - if not wallet.element_by_text_part(url_data[key]['error']).is_element_displayed(): - self.errors.append('Expected error %s is not shown' % url_data[key]['error']) - wallet.ok_button.click() - if url_data[key].get('data'): - actual_data = send_transaction_view.get_values_from_send_transaction_bottom_sheet() - difference_in_data = url_data[key]['data'].items() - actual_data.items() - if difference_in_data: - self.errors.append( - 'In %s case returned value does not match expected in %s' % (key, repr(difference_in_data))) - if url_data[key].get('send_transaction_validation_error'): - error = url_data[key]['send_transaction_validation_error'] - if not wallet.element_by_text_part(error).is_element_displayed(): - self.errors.append( - 'Expected error %s is not shown' % error) - if wallet.close_send_transaction_view_button.is_element_displayed(): - wallet.close_send_transaction_view_button.wait_and_click() - else: - wallet.cancel_button.wait_and_click() - - self.errors.verify_no_errors() - @marks.testrail_id(6311) # TODO: can be added to any group where kk multiaccount with money is restored as additional check def test_keycard_same_seed_added_inside_multiaccount(self): @@ -1819,10 +1400,15 @@ class TestChatManagement(SingleDeviceTestCase): self.errors.verify_no_errors() @marks.testrail_id(5721) - # TODO: make a user with 20 contacts, backup contacts and use it in this e2e. cna me merged with other group chat e2e + # TODO: can be merged with other group chat e2e def test_cant_add_more_twenty_participants_to_group_chat(self): + user_20_contacts = dict() + user_20_contacts[ + 'passphrase'] = "length depend bottom mom kitchen solar deposit emerge junior horse midnight grunt" + sign_in = SignInView(self.driver) - home = sign_in.create_user() + home = sign_in.recover_access(user_20_contacts['passphrase']) + users = [chat_users['A'], chat_users['B'], transaction_senders['ETH_8'], @@ -1845,19 +1431,10 @@ class TestChatManagement(SingleDeviceTestCase): transaction_senders['U']] usernames = [] - home.just_fyi('Add 20 users to contacts') - profile = home.profile_button.click() - profile.contacts_button.click() - chat = home.get_chat_view() for user in users: - profile.add_new_contact_button.click() - chat.public_key_edit_box.click() - chat.public_key_edit_box.set_value(user['public_key']) - chat.confirm_until_presence_of_element(profile.add_new_contact_button) usernames.append(user['username']) home.just_fyi('Create group chat with max amount of users') - profile.home_button.click() chat = home.create_group_chat(usernames, 'some_group_chat') home.just_fyi('Verify that can not add more users via group info')