From 026d0ebb06d9e638409997a27ca5f6c7741d9d48 Mon Sep 17 00:00:00 2001 From: Valentina1133 <141633821+Valentina1133@users.noreply.github.com> Date: Wed, 8 Nov 2023 15:33:16 +0100 Subject: [PATCH] test: test_import_restore_keycard_via_seed_phrase added (#258) --- test/e2e/constants/keycard.py | 2 + .../gui/components/settings/keycard_popup.py | 27 +++++++- test/e2e/gui/objects_map/component_names.py | 5 ++ test/e2e/gui/screens/settings_keycard.py | 9 ++- ...te_keycard_account_with_new_seed_phrase.py | 2 +- ..._import_restore_keycard_via_seed_phrase.py | 69 +++++++++++++++++++ 6 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 test/e2e/tests/settings/settings_keycard/test_import_restore_keycard_via_seed_phrase.py diff --git a/test/e2e/constants/keycard.py b/test/e2e/constants/keycard.py index 13a636ef0d..53f537ae3a 100644 --- a/test/e2e/constants/keycard.py +++ b/test/e2e/constants/keycard.py @@ -6,6 +6,7 @@ class Keycard(Enum): KEYCARD_NAME = 'Test Keycard' ACCOUNT_NAME = 'Test Account' KEYCARD_POPUP_HEADER = 'Create a new Keycard account with a new seed phrase' + KEYCARD_POPUP_HEADER_IMPORT = 'Import or restore a Keycard via a seed phrase' KEYCARD_INSTRUCTIONS_PLUG_IN = 'Plug in Keycard reader...' KEYCARD_INSTRUCTIONS_INSERT_KEYCARD = 'Insert Keycard...' KEYCARD_RECOGNIZED = 'Keycard recognized' @@ -16,3 +17,4 @@ class Keycard(Enum): KEYCARD_NAME_IT = 'Name this Keycard' KEYCARD_NAME_ACCOUNTS = 'Name accounts' KEYCARD_NEW_ACCOUNT_CREATED = 'New account successfully created' + KEYCARD_READY = 'Keycard is ready to use!' diff --git a/test/e2e/gui/components/settings/keycard_popup.py b/test/e2e/gui/components/settings/keycard_popup.py index 237a9b2cc3..2057ef947b 100644 --- a/test/e2e/gui/components/settings/keycard_popup.py +++ b/test/e2e/gui/components/settings/keycard_popup.py @@ -7,11 +7,12 @@ import driver from gui.components.base_popup import BasePopup from gui.elements.button import Button from gui.elements.object import QObject +from gui.elements.text_edit import TextEdit from gui.elements.text_label import TextLabel from scripts.tools.image import Image -class CreateNewKeycardAccountSeedPhrasePopup(BasePopup): +class KeycardPopup(BasePopup): def __init__(self): super().__init__() @@ -24,6 +25,10 @@ class CreateNewKeycardAccountSeedPhrasePopup(BasePopup): self._seed_phrase_first_word_component = QObject('word0_StatusInput') self._seed_phrase_second_word_component = QObject('word1_StatusInput') self._seed_phrase_third_word_component = QObject('word2_StatusInput') + self._seed_phrase_word_text_edit = TextEdit('statusSeedPhraseInputField_TextEdit') + self._seed_phrase_12_words_button = Button('switchTabBar_12_words_StatusSwitchTabButton') + self._seed_phrase_18_words_button = Button('switchTabBar_18_words_StatusSwitchTabButton') + self._seed_phrase_24_words_button = Button('switchTabBar_24_words_StatusSwitchTabButton') self._field_object = QObject('edit_TextEdit') self._keypair_item = QObject('o_KeyPairItem') self._keypair_tag = QObject('o_StatusListItemTag') @@ -128,3 +133,23 @@ class CreateNewKeycardAccountSeedPhrasePopup(BasePopup): self.click_next().name_keycard(keycard_name) self.click_next().name_account(account_name) self.click_next() + + @allure.step('Import keycard via seed phrase') + def import_keycard_via_seed_phrase(self, seed_phrase_words: list, pin: str, keycard_name: str, account_name: str): + if len(seed_phrase_words) == 12: + self._seed_phrase_12_words_button.click() + elif len(seed_phrase_words) == 18: + self._seed_phrase_18_words_button.click() + elif len(seed_phrase_words) == 24: + self._seed_phrase_24_words_button.click() + else: + raise RuntimeError("Wrong amount of seed words", len(seed_phrase_words)) + for count, word in enumerate(seed_phrase_words, start=1): + self._seed_phrase_word_text_edit.real_name['objectName'] = f'statusSeedPhraseInputField{count}' + self._seed_phrase_word_text_edit.text = word + self.click_next() + self.input_pin(pin) + self.input_pin(pin) + self.click_next().name_keycard(keycard_name) + self.click_next().name_account(account_name) + self.click_next() diff --git a/test/e2e/gui/objects_map/component_names.py b/test/e2e/gui/objects_map/component_names.py index afabd7ba50..b302707d4b 100644 --- a/test/e2e/gui/objects_map/component_names.py +++ b/test/e2e/gui/objects_map/component_names.py @@ -335,3 +335,8 @@ word1_StatusInput = {"container": statusDesktop_mainWindow_overlay, "id": "word1 word2_StatusInput = {"container": statusDesktop_mainWindow_overlay, "id": "word2", "type": "StatusInput", "unnamed": 1, "visible": True} o_KeyPairItem = {"container": statusDesktop_mainWindow_overlay, "type": "KeyPairItem", "unnamed": 1, "visible": True} o_StatusListItemTag = {"container": statusDesktop_mainWindow_overlay, "type": "StatusListItemTag", "unnamed": 1, "visible": True} +statusSeedPhraseInputField_TextEdit = {"container": statusDesktop_mainWindow_overlay, "objectName": "statusSeedPhraseInputField", "type": "TextEdit", "visible": True} +switchTabBar_StatusSwitchTabBar = {"container": statusDesktop_mainWindow_overlay, "id": "switchTabBar", "type": "StatusSwitchTabBar", "unnamed": 1, "visible": True} +switchTabBar_12_words_StatusSwitchTabButton = {"checkable": True, "container": switchTabBar_StatusSwitchTabBar, "objectName": "12SeedButton", "text": "12 words", "type": "StatusSwitchTabButton", "visible": True} +switchTabBar_18_words_StatusSwitchTabButton = {"checkable": True, "container": switchTabBar_StatusSwitchTabBar, "objectName": "18SeedButton", "text": "18 words", "type": "StatusSwitchTabButton", "visible": True} +switchTabBar_24_words_StatusSwitchTabButton = {"checkable": True, "container": switchTabBar_StatusSwitchTabBar, "objectName": "24SeedButton", "text": "24 words", "type": "StatusSwitchTabButton", "visible": True} diff --git a/test/e2e/gui/screens/settings_keycard.py b/test/e2e/gui/screens/settings_keycard.py index 01dd0d2fa1..a478fd6589 100644 --- a/test/e2e/gui/screens/settings_keycard.py +++ b/test/e2e/gui/screens/settings_keycard.py @@ -2,7 +2,7 @@ import allure import configs.timeouts import driver -from gui.components.settings.keycard_popup import CreateNewKeycardAccountSeedPhrasePopup +from gui.components.settings.keycard_popup import KeycardPopup from gui.elements.button import Button from gui.elements.object import QObject from gui.elements.scroll import Scroll @@ -27,7 +27,12 @@ class KeycardSettingsView(QObject): @allure.step('Choose create new keycard account with new seed phrase') def click_create_new_account_with_new_seed_phrase(self): self._create_new_keycard_account_button.click() - return CreateNewKeycardAccountSeedPhrasePopup().wait_until_appears() + return KeycardPopup().wait_until_appears() + + @allure.step('Choose import or restore keycard via seed phrase') + def click_import_restore_via_seed_phrase(self): + self._import_restore_via_seed_phrase_button.click() + return KeycardPopup().wait_until_appears() @allure.step('Check that all keycard options displayed') def all_keycard_options_available(self): diff --git a/test/e2e/tests/settings/settings_keycard/test_create_keycard_account_with_new_seed_phrase.py b/test/e2e/tests/settings/settings_keycard/test_create_keycard_account_with_new_seed_phrase.py index 6c18de9603..d33c1d3eb2 100644 --- a/test/e2e/tests/settings/settings_keycard/test_create_keycard_account_with_new_seed_phrase.py +++ b/test/e2e/tests/settings/settings_keycard/test_create_keycard_account_with_new_seed_phrase.py @@ -15,7 +15,7 @@ from gui.mocked_keycard_controller import MockedKeycardController @pytest.mark.case(703624) @pytest.mark.parametrize('options', [aut_options.MOCK_KEYCARD]) @pytest.mark.skip(reason="https://github.com/status-im/desktop-qa-automation/issues/274") -def test_create_keycard_account_with_new_seed_phrase(main_screen: MainWindow): +def test_create_keycard_account_with_new_seed_phrase(main_screen: MainWindow, options): with step('Choose option Create a new Keycard account with a new seed phrase in settings'): main_screen.prepare() keycard_settings = main_screen.left_panel.open_settings().left_panel.open_keycard_settings() diff --git a/test/e2e/tests/settings/settings_keycard/test_import_restore_keycard_via_seed_phrase.py b/test/e2e/tests/settings/settings_keycard/test_import_restore_keycard_via_seed_phrase.py new file mode 100644 index 0000000000..ef10e9a9e0 --- /dev/null +++ b/test/e2e/tests/settings/settings_keycard/test_import_restore_keycard_via_seed_phrase.py @@ -0,0 +1,69 @@ +import allure +import pytest +from allure import step + +import configs +import constants +import driver +from constants import ColorCodes, aut_options +from constants.keycard import Keycard +from gui.main_window import MainWindow +from gui.mocked_keycard_controller import MockedKeycardController + + +@allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703625', + 'Import or restore a Keycard via a seed phrase') +@pytest.mark.case(703625) +@pytest.mark.parametrize('user_account', [constants.user.user_account_one]) +@pytest.mark.parametrize('options', [aut_options.MOCK_KEYCARD]) +@pytest.mark.skip(reason="https://github.com/status-im/desktop-qa-automation/issues/274") +def test_import_restore_keycard_via_seed_phrase(main_screen: MainWindow, user_account, options): + with step('Choose option Import or restore account via seed phrase in settings'): + main_screen.prepare() + keycard_settings = main_screen.left_panel.open_settings().left_panel.open_keycard_settings() + keycard_popup = keycard_settings.click_import_restore_via_seed_phrase() + + with (step('Verify displayed keycard popup instructions are correct')): + with step('Verify header is correct'): + assert keycard_popup.keycard_header == Keycard.KEYCARD_POPUP_HEADER_IMPORT.value, "The header is incorrect" + with step('Verify instructions are correct'): + assert Keycard.KEYCARD_INSTRUCTIONS_PLUG_IN.value in keycard_popup.keycard_instructions, \ + "There is no correct keycard instruction" + + with step('Plug in reader'): + main_screen.hide() + keycard_controller = MockedKeycardController().wait_until_appears() + keycard_controller.plugin_reader() + main_screen.show() + + with step('Verify displayed keycard popup instructions are correct'): + assert driver.waitFor( + lambda: Keycard.KEYCARD_INSTRUCTIONS_INSERT_KEYCARD.value in keycard_popup.keycard_instructions, + configs.timeouts.UI_LOAD_TIMEOUT_MSEC), "There is no correct keycard instruction" + + with step('Register and insert keycard'): + main_screen.hide() + keycard_controller.register_keycard() + keycard_controller.insert_keycard_1() + main_screen.show() + + with step('Verify displayed keycard popup instructions are correct'): + with step('Verify keycard is recognized'): + assert driver.waitFor(lambda: Keycard.KEYCARD_RECOGNIZED.value in keycard_popup.keycard_instructions, + configs.timeouts.UI_LOAD_TIMEOUT_MSEC), "There is no correct keycard instruction" + + with step('Import keycard via seed phrase'): + pin = Keycard.KEYCARD_PIN.value + keycard_name = Keycard.KEYCARD_NAME.value + account_name = Keycard.ACCOUNT_NAME.value + keycard_popup.import_keycard_via_seed_phrase(user_account.seed_phrase, pin, keycard_name, account_name) + + with step('Verify that preview shows correct keycard and account name and color and instructions are correct'): + assert driver.waitFor(lambda: Keycard.KEYCARD_READY.value in keycard_popup.keycard_instructions), \ + "There is no correct keycard instruction" + + assert keycard_popup.keycard_preview_name == keycard_name, "Keycard name in preview is incorrect" + assert keycard_popup.account_preview_name == account_name, "Account name in preview is incorrect" + assert keycard_popup.preview_color == ColorCodes.BLUE.value, "Color in preview is incorrect" + + keycard_popup.click_next()