test(Wallet) Manage seed phrase account(imported and generated) and k… (#103)

* test(Wallet) Manage seed phrase account(imported and generated) and keycard settings

* test(Wallet) Manage seed phrase account(imported and generated) and keycard settings

---------

Co-authored-by: Vladimir Druzhinin <vlado@status.im>
This commit is contained in:
Valentina1133 2023-09-14 10:52:27 +07:00 committed by GitHub
parent 61b87e0d23
commit ccb2f3f50c
8 changed files with 395 additions and 47 deletions

View File

@ -0,0 +1,94 @@
import typing
import allure
import configs
from gui.components.base_popup import BasePopup
from gui.elements.qt.button import Button
from gui.elements.qt.check_box import CheckBox
from gui.elements.qt.object import QObject
from gui.elements.qt.text_edit import TextEdit
class BackUpYourSeedPhrasePopUp(BasePopup):
def __init__(self):
super(BackUpYourSeedPhrasePopUp, self).__init__()
self._i_have_a_pen_and_paper_check_box = CheckBox('mainWallet_AddEditAccountPopup_HavePenAndPaperCheckBox')
self._i_know_where_i_ll_store_it_check_box = CheckBox(
'mainWallet_AddEditAccountPopup_StoringSeedPhraseConfirmedCheckBox')
self._i_am_ready_to_write_down_seed_phrase_check_box = CheckBox(
'mainWallet_AddEditAccountPopup_SeedPhraseWrittenCheckBox')
self._primary_button = Button('mainWallet_AddEditAccountPopup_PrimaryButton')
self._reveal_seed_phrase_button = Button('mainWallet_AddEditAccountPopup_RevealSeedPhraseButton')
self._seed_phrase_panel = QObject('confirmSeedPhrasePanel_StatusSeedPhraseInput')
self._seed_phrase_word_component = QObject('mainWallet_AddEditAccountPopup_EnterSeedPhraseWordComponent')
self._prove_word_seed_phrase_text_edit = TextEdit('mainWallet_AddEditAccountPopup_EnterSeedPhraseWord')
self._acknowledge_check_box = CheckBox('mainWallet_AddEditAccountPopup_SeedBackupAknowledgeCheckBox')
self._seed_phrase_name_text_edit = TextEdit('mainWallet_AddEditAccountPopup_GeneratedSeedPhraseKeyName')
@allure.step('Set have pen and paper checkbox')
def set_have_pen_and_paper(self, value: bool):
self._i_have_a_pen_and_paper_check_box.set(value)
return self
@allure.step('Set ready to write checkbox')
def set_ready_to_write_seed_phrase(self, value: bool):
self._i_am_ready_to_write_down_seed_phrase_check_box.set(value)
return self
@allure.step('Set know where will store it checkbox')
def set_know_where_store_it(self, value: bool):
self._i_know_where_i_ll_store_it_check_box.set(value)
return self
@allure.step('Click next button')
def next(self):
self._primary_button.click()
return self
@allure.step('Click reveal seed phrase button')
def reveal_seed_phrase(self):
self._reveal_seed_phrase_button.click()
return self
@allure.step('Get seed phrases list')
def get_seed_phrases(self):
phrases = []
for phrase_n in range(1, 13):
object_name = f'SeedPhraseWordAtIndex-{phrase_n}'
self._seed_phrase_panel.real_name['objectName'] = object_name
phrases.append(str(self._seed_phrase_panel.object.textEdit.input.edit.text))
return phrases
@allure.step('Confirm word in seed phrase')
def confirm_word(self, seed_phrase: typing.List[str]):
word_index = int(str(self._seed_phrase_word_component.object.label).split('Word #')[1])
seed_word = seed_phrase[word_index - 1]
self._prove_word_seed_phrase_text_edit.text = seed_word
return self
@allure.step('Set aknowledge checkbox')
def set_acknowledge(self, value: bool):
self._acknowledge_check_box.set(value)
return self
@allure.step('Set seed phrase name')
def set_seed_phrase_name(self, value: str):
self._seed_phrase_name_text_edit.text = value
return self
@allure.step('Wait until hidden {0}')
def wait_until_hidden(self, timeout_msec: int = configs.timeouts.UI_LOAD_TIMEOUT_MSEC):
self._seed_phrase_name_text_edit.wait_until_hidden()
@allure.step('Generate seed phrase')
def generate_seed_phrase(self, name: str):
self.set_have_pen_and_paper(True).set_ready_to_write_seed_phrase(True).set_know_where_store_it(True)
self.next().reveal_seed_phrase()
seed_phrases = self.get_seed_phrases()
self.next().confirm_word(seed_phrases)
self.next().confirm_word(seed_phrases)
self.next().set_acknowledge(True)
self.next().set_seed_phrase_name(name)
self.next().wait_until_hidden()

View File

@ -1,19 +1,23 @@
import typing
import allure import allure
from gui.components.wallet.authenticate_popup import AuthenticatePopup
import configs import configs
import constants.wallet import constants.wallet
import driver import driver
from gui.components.wallet.authenticate_popup import AuthenticatePopup from gui.components.back_up_your_seed_phrase_popup import BackUpYourSeedPhrasePopUp
from gui.components.base_popup import BasePopup from gui.components.base_popup import BasePopup
from gui.components.emoji_popup import EmojiPopup from gui.components.emoji_popup import EmojiPopup
from gui.elements.qt.button import Button from gui.elements.qt.button import Button
from gui.elements.qt.check_box import CheckBox from gui.elements.qt.check_box import CheckBox
from gui.elements.qt.text_edit import TextEdit
from gui.elements.qt.scroll import Scroll
from gui.elements.qt.object import QObject from gui.elements.qt.object import QObject
from gui.elements.qt.scroll import Scroll
from gui.elements.qt.text_edit import TextEdit
GENERATED_PAGES_LIMIT = 20 GENERATED_PAGES_LIMIT = 20
class AccountPopup(BasePopup): class AccountPopup(BasePopup):
def __init__(self): def __init__(self):
super(AccountPopup, self).__init__() super(AccountPopup, self).__init__()
@ -26,6 +30,7 @@ class AccountPopup(BasePopup):
self._watch_only_account_origin_item = QObject("mainWallet_AddEditAccountPopup_OriginOptionWatchOnlyAcc") self._watch_only_account_origin_item = QObject("mainWallet_AddEditAccountPopup_OriginOptionWatchOnlyAcc")
self._new_master_key_origin_item = QObject('mainWallet_AddEditAccountPopup_OriginOptionNewMasterKey') self._new_master_key_origin_item = QObject('mainWallet_AddEditAccountPopup_OriginOptionNewMasterKey')
self._existing_origin_item = QObject('addAccountPopup_OriginOption_StatusListItem') self._existing_origin_item = QObject('addAccountPopup_OriginOption_StatusListItem')
self._use_keycard_button = QObject('mainWallet_AddEditAccountPopup_MasterKey_GoToKeycardSettingsOption')
# derivation # derivation
self._address_text_edit = TextEdit('mainWallet_AddEditAccountPopup_AccountWatchOnlyAddress') self._address_text_edit = TextEdit('mainWallet_AddEditAccountPopup_AccountWatchOnlyAddress')
self._add_account_button = Button('mainWallet_AddEditAccountPopup_PrimaryButton') self._add_account_button = Button('mainWallet_AddEditAccountPopup_PrimaryButton')
@ -77,6 +82,20 @@ class AccountPopup(BasePopup):
AddNewAccountPopup().wait_until_appears().import_private_key(value) AddNewAccountPopup().wait_until_appears().import_private_key(value)
return self return self
@allure.step('Set new seed phrase for account')
def set_origin_new_seed_phrase(self, value: str):
self._origin_combobox.click()
self._new_master_key_origin_item.click()
AddNewAccountPopup().wait_until_appears().generate_new_master_key(value)
return self
@allure.step('Set seed phrase')
def set_origin_seed_phrase(self, value: typing.List[str]):
self._origin_combobox.click()
self._new_master_key_origin_item.click()
AddNewAccountPopup().wait_until_appears().import_new_seed_phrase(value)
return self
@allure.step('Set derivation path for account') @allure.step('Set derivation path for account')
def set_derivation_path(self, value: str, index: int, password: str): def set_derivation_path(self, value: str, index: int, password: str):
self._edit_derivation_path_button.hover().click() self._edit_derivation_path_button.hover().click()
@ -95,6 +114,13 @@ class AccountPopup(BasePopup):
self._derivation_path_text_edit.type_text(str(index)) self._derivation_path_text_edit.type_text(str(index))
return self return self
@allure.step('Click continue in keycard settings')
def continue_in_keycard_settings(self):
self._origin_combobox.click()
self._new_master_key_origin_item.click()
self._use_keycard_button.click()
return self
@allure.step('Save added account') @allure.step('Save added account')
def save(self): def save(self):
self._add_account_button.wait_until_appears().click() self._add_account_button.wait_until_appears().click()
@ -109,6 +135,14 @@ class AddNewAccountPopup(BasePopup):
self._private_key_text_edit = TextEdit('mainWallet_AddEditAccountPopup_PrivateKey') self._private_key_text_edit = TextEdit('mainWallet_AddEditAccountPopup_PrivateKey')
self._private_key_name_text_edit = TextEdit('mainWallet_AddEditAccountPopup_PrivateKeyName') self._private_key_name_text_edit = TextEdit('mainWallet_AddEditAccountPopup_PrivateKeyName')
self._continue_button = Button('mainWallet_AddEditAccountPopup_PrimaryButton') self._continue_button = Button('mainWallet_AddEditAccountPopup_PrimaryButton')
self._import_seed_phrase_button = Button('mainWallet_AddEditAccountPopup_MasterKey_ImportSeedPhraseOption')
self._generate_master_key_button = Button('mainWallet_AddEditAccountPopup_MasterKey_GenerateSeedPhraseOption')
self._seed_phrase_12_words_button = Button("mainWallet_AddEditAccountPopup_12WordsButton")
self._seed_phrase_18_words_button = Button("mainWallet_AddEditAccountPopup_18WordsButton")
self._seed_phrase_24_words_button = Button("mainWallet_AddEditAccountPopup_24WordsButton")
self._seed_phrase_word_text_edit = TextEdit('mainWallet_AddEditAccountPopup_SPWord')
self._seed_phrase_phrase_key_name_text_edit = TextEdit(
'mainWallet_AddEditAccountPopup_ImportedSeedPhraseKeyName')
@allure.step('Import private key') @allure.step('Import private key')
def import_private_key(self, private_key: str) -> str: def import_private_key(self, private_key: str) -> str:
@ -118,6 +152,30 @@ class AddNewAccountPopup(BasePopup):
self._continue_button.click() self._continue_button.click()
return private_key[:5] return private_key[:5]
@allure.step('Import new seed phrase')
def import_new_seed_phrase(self, seed_phrase_words: list) -> str:
self._import_seed_phrase_button.click()
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
seed_phrase_name = ''.join([word[0] for word in seed_phrase_words[:10]])
self._seed_phrase_phrase_key_name_text_edit.text = seed_phrase_name
self._continue_button.click()
return seed_phrase_name
@allure.step('Generate new seed phrase')
def generate_new_master_key(self, name: str):
self._generate_master_key_button.click()
BackUpYourSeedPhrasePopUp().wait_until_appears().generate_seed_phrase(name)
class GeneratedAddressesList(QObject): class GeneratedAddressesList(QObject):
@ -154,4 +212,4 @@ class GeneratedAddressesList(QObject):
else: else:
selected_page_number += 1 selected_page_number += 1
self._paginator_page.real_name['text'] = selected_page_number self._paginator_page.real_name['text'] = selected_page_number
self._paginator_page.click() self._paginator_page.click()

View File

@ -119,7 +119,7 @@ class MainWindow(Window):
self.left_panel = LeftPanel() self.left_panel = LeftPanel()
@allure.step('Sign Up user') @allure.step('Sign Up user')
def sign_up(self, user_account: UserAccount = constants.user.community_params): def sign_up(self, user_account: UserAccount = constants.user.user_account_one):
if configs.system.IS_MAC: if configs.system.IS_MAC:
AllowNotificationsView().wait_until_appears().allow() AllowNotificationsView().wait_until_appears().allow()
BeforeStartedPopUp().get_started() BeforeStartedPopUp().get_started()

View File

@ -231,3 +231,22 @@ mainWallet_AddEditAccountPopup_MasterKey_ImportPrivateKeyOption = {"container":
mainWallet_AddEditAccountPopup_PrivateKey = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-PrivateKeyInput", "type": "StatusPasswordInput", "visible": True} mainWallet_AddEditAccountPopup_PrivateKey = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-PrivateKeyInput", "type": "StatusPasswordInput", "visible": True}
mainWallet_AddEditAccountPopup_PrivateKeyNameComponent = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-PrivateKeyName", "type": "StatusInput", "visible": True} mainWallet_AddEditAccountPopup_PrivateKeyNameComponent = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-PrivateKeyName", "type": "StatusInput", "visible": True}
mainWallet_AddEditAccountPopup_PrivateKeyName = {"container": mainWallet_AddEditAccountPopup_PrivateKeyNameComponent, "type": "TextEdit", "unnamed": 1, "visible": True} mainWallet_AddEditAccountPopup_PrivateKeyName = {"container": mainWallet_AddEditAccountPopup_PrivateKeyNameComponent, "type": "TextEdit", "unnamed": 1, "visible": True}
mainWallet_AddEditAccountPopup_MasterKey_GoToKeycardSettingsOption = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-GoToKeycardSettings", "type": "StatusButton", "visible": True}
mainWallet_AddEditAccountPopup_MasterKey_ImportSeedPhraseOption = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-ImportUsingSeedPhrase", "type": "StatusListItem", "visible": True}
mainWallet_AddEditAccountPopup_MasterKey_GenerateSeedPhraseOption = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-GenerateNewMasterKey", "type": "StatusListItem", "visible": True}
mainWallet_AddEditAccountPopup_ImportedSeedPhraseKeyNameComponent = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-ImportedSeedPhraseKeyName", "type": "StatusInput", "visible": True}
mainWallet_AddEditAccountPopup_ImportedSeedPhraseKeyName = {"container": mainWallet_AddEditAccountPopup_ImportedSeedPhraseKeyNameComponent, "type": "TextEdit", "unnamed": 1, "visible": True}
mainWallet_AddEditAccountPopup_GeneratedSeedPhraseKeyNameComponent = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-GeneratedSeedPhraseKeyName", "type": "StatusInput", "visible": True}
mainWallet_AddEditAccountPopup_GeneratedSeedPhraseKeyName = {"container": mainWallet_AddEditAccountPopup_GeneratedSeedPhraseKeyNameComponent, "type": "TextEdit", "unnamed": 1, "visible": True}
mainWallet_AddEditAccountPopup_HavePenAndPaperCheckBox = {"checkable": True, "container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-HavePenAndPaper", "type": "StatusCheckBox", "visible": True}
mainWallet_AddEditAccountPopup_SeedPhraseWrittenCheckBox = {"checkable": True, "container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-SeedPhraseWritten", "type": "StatusCheckBox", "visible": True}
mainWallet_AddEditAccountPopup_StoringSeedPhraseConfirmedCheckBox = {"checkable": True, "container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-StoringSeedPhraseConfirmed", "type": "StatusCheckBox", "visible": True}
mainWallet_AddEditAccountPopup_SeedBackupAknowledgeCheckBox = {"checkable": True, "container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-SeedBackupAknowledge", "type": "StatusCheckBox", "visible": True}
mainWallet_AddEditAccountPopup_RevealSeedPhraseButton = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-RevealSeedPhrase", "type": "StatusButton", "visible": True}
mainWallet_AddEditAccountPopup_SeedPhraseWordAtIndex_Placeholder = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "SeedPhraseWordAtIndex-%WORD-INDEX%", "type": "StatusSeedPhraseInput", "visible": True}
mainWallet_AddEditAccountPopup_EnterSeedPhraseWordComponent = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "AddAccountPopup-EnterSeedPhraseWord", "type": "StatusInput", "visible": True}
mainWallet_AddEditAccountPopup_EnterSeedPhraseWord = {"container": mainWallet_AddEditAccountPopup_EnterSeedPhraseWordComponent, "type": "TextEdit", "unnamed": 1, "visible": True}
mainWallet_AddEditAccountPopup_SPWord = {"container": mainWallet_AddEditAccountPopup_Content, "type": "TextEdit", "objectName": RegularExpression("statusSeedPhraseInputField*")}
mainWallet_AddEditAccountPopup_12WordsButton = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "12SeedButton", "type": "StatusSwitchTabButton"}
mainWallet_AddEditAccountPopup_18WordsButton = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "18SeedButton", "type": "StatusSwitchTabButton"}
mainWallet_AddEditAccountPopup_24WordsButton = {"container": mainWallet_AddEditAccountPopup_Content, "objectName": "24SeedButton", "type": "StatusSwitchTabButton"}

View File

@ -2,6 +2,8 @@ from gui.objects_map.main_names import statusDesktop_mainWindow
mainWindow_ProfileLayout = {"container": statusDesktop_mainWindow, "type": "ProfileLayout", "unnamed": 1, "visible": True} mainWindow_ProfileLayout = {"container": statusDesktop_mainWindow, "type": "ProfileLayout", "unnamed": 1, "visible": True}
mainWindow_StatusSectionLayout_ContentItem = {"container": mainWindow_ProfileLayout, "objectName": "StatusSectionLayout", "type": "ContentItem", "visible": True} mainWindow_StatusSectionLayout_ContentItem = {"container": mainWindow_ProfileLayout, "objectName": "StatusSectionLayout", "type": "ContentItem", "visible": True}
settingsContentBase_ScrollView = {"container": statusDesktop_mainWindow, "objectName": "settingsContentBaseScrollView", "type": "StatusScrollView", "visible": True}
settingsContentBaseScrollView_Flickable = {"container": settingsContentBase_ScrollView, "type": "Flickable", "unnamed": 1, "visible": True}
# Left Panel # Left Panel
mainWindow_LeftTabView = {"container": mainWindow_StatusSectionLayout_ContentItem, "type": "LeftTabView", "unnamed": 1, "visible": True} mainWindow_LeftTabView = {"container": mainWindow_StatusSectionLayout_ContentItem, "type": "LeftTabView", "unnamed": 1, "visible": True}
@ -29,3 +31,12 @@ mainWindow_ContactsView = {"container": statusDesktop_mainWindow, "type": "Conta
mainWindow_Send_contact_request_to_chat_key_StatusButton = {"checkable": False, "container": mainWindow_ContactsView, "objectName": "ContactsView_ContactRequest_Button", "type": "StatusButton", "visible": True} mainWindow_Send_contact_request_to_chat_key_StatusButton = {"checkable": False, "container": mainWindow_ContactsView, "objectName": "ContactsView_ContactRequest_Button", "type": "StatusButton", "visible": True}
contactsTabBar_Pending_Requests_StatusTabButton = {"checkable": True, "container": mainWindow_ContactsView, "objectName": "ContactsView_PendingRequest_Button", "type": "StatusTabButton", "visible": True} contactsTabBar_Pending_Requests_StatusTabButton = {"checkable": True, "container": mainWindow_ContactsView, "objectName": "ContactsView_PendingRequest_Button", "type": "StatusTabButton", "visible": True}
settingsContentBaseScrollView_ContactListPanel = {"container": mainWindow_ContactsView, "objectName": "ContactListPanel_ListView", "type": "StatusListView", "visible": True} settingsContentBaseScrollView_ContactListPanel = {"container": mainWindow_ContactsView, "objectName": "ContactListPanel_ListView", "type": "StatusListView", "visible": True}
# Keycard Settings View
mainWindow_KeycardView = {"container": statusDesktop_mainWindow, "type": "KeycardView", "unnamed": 1, "visible": True}
setupFromExistingKeycardAccount_StatusListItem = {"container": settingsContentBase_ScrollView, "objectName": "setupFromExistingKeycardAccount", "type": "StatusListItem", "visible": True}
createNewKeycardAccount_StatusListItem = {"container": settingsContentBase_ScrollView, "objectName": "createNewKeycardAccount", "type": "StatusListItem", "visible": True}
importRestoreKeycard_StatusListItem = {"container": settingsContentBase_ScrollView, "objectName": "importRestoreKeycard", "type": "StatusListItem", "visible": True}
importFromKeycard_StatusListItem = {"container": settingsContentBase_ScrollView, "objectName": "importFromKeycard", "type": "StatusListItem", "visible": True}
checkWhatsNewKeycard_StatusListItem = {"container": settingsContentBase_ScrollView, "objectName": "checkWhatsNewKeycard", "type": "StatusListItem", "visible": True}
factoryResetKeycard_StatusListItem = {"container": settingsContentBase_ScrollView, "objectName": "factoryResetKeycard", "type": "StatusListItem", "visible": True}

View File

@ -12,6 +12,7 @@ from gui.components.settings.send_contact_request_popup import SendContactReques
from gui.elements.qt.button import Button from gui.elements.qt.button import Button
from gui.elements.qt.list import List from gui.elements.qt.list import List
from gui.elements.qt.object import QObject from gui.elements.qt.object import QObject
from gui.elements.qt.scroll import Scroll
from gui.elements.qt.text_label import TextLabel from gui.elements.qt.text_label import TextLabel
from gui.screens.community_settings import CommunitySettingsScreen from gui.screens.community_settings import CommunitySettingsScreen
from gui.screens.messages import MessagesScreen from gui.screens.messages import MessagesScreen
@ -173,3 +174,33 @@ class CommunitiesSettingsView(QObject):
def open_community_overview_settings(self, name: str): def open_community_overview_settings(self, name: str):
driver.mouseClick(self._get_community_item(name)) driver.mouseClick(self._get_community_item(name))
return CommunitySettingsScreen().wait_until_appears() return CommunitySettingsScreen().wait_until_appears()
class KeycardSettingsView(QObject):
def __init__(self):
super(KeycardSettingsView, self).__init__('mainWindow_KeycardView')
self._scroll = Scroll('settingsContentBaseScrollView_Flickable')
self._setup_keycard_with_existing_account_button = Button('setupFromExistingKeycardAccount_StatusListItem')
self._create_new_keycard_account_button = Button('createNewKeycardAccount_StatusListItem')
self._import_restore_via_seed_phrase_button = Button('importRestoreKeycard_StatusListItem')
self._import_from_keycard_button = Button('importFromKeycard_StatusListItem')
self._check_whats_on_keycard_button = Button('checkWhatsNewKeycard_StatusListItem')
self._factory_reset_keycard_button = Button('factoryResetKeycard_StatusListItem')
@allure.step('Check that keycard screen displayed')
def check_keycard_screen_loaded(self):
assert KeycardSettingsView().is_visible
@allure.step('Check that all keycard options displayed')
def all_keycard_options_available(self):
assert self._setup_keycard_with_existing_account_button.is_visible, f'Setup keycard with existing account not visible'
assert self._create_new_keycard_account_button.is_visible, f'Create new keycard button not visible'
assert self._import_restore_via_seed_phrase_button.is_visible, f'Import and restore via seed phrase button not visible'
self._scroll.vertical_scroll_to(self._import_from_keycard_button)
assert driver.waitFor(lambda: self._import_from_keycard_button.is_visible,
configs.timeouts.UI_LOAD_TIMEOUT_MSEC), f'Import keycard button not visible'
assert driver.waitFor(lambda: self._check_whats_on_keycard_button.is_visible,
configs.timeouts.UI_LOAD_TIMEOUT_MSEC ), f'Check whats new keycard button not visible'
assert driver.waitFor(lambda: self._factory_reset_keycard_button.is_visible,
configs.timeouts.UI_LOAD_TIMEOUT_MSEC ), f'Factory reset keycard button not visible'

View File

@ -3,51 +3,17 @@ import time
import allure import allure
import pytest import pytest
from allure import step from allure import step
from gui.components.wallet.authenticate_popup import AuthenticatePopup
import configs.timeouts
import constants import constants
import driver import driver
from gui.components.wallet.authenticate_popup import AuthenticatePopup
from gui.components.signing_phrase_popup import SigningPhrasePopup from gui.components.signing_phrase_popup import SigningPhrasePopup
from gui.main_window import MainWindow from gui.main_window import MainWindow
from gui.screens.settings import KeycardSettingsView
pytestmark = allure.suite("Wallet") pytestmark = allure.suite("Wallet")
@allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703021', 'Manage a saved address')
@pytest.mark.case(703021)
@pytest.mark.parametrize('name, address, new_name', [
pytest.param('Saved address name before', '0x8397bc3c5a60a1883174f722403d63a8833312b7', 'Saved address name after'),
pytest.param('Ens name before', 'nastya.stateofus.eth', 'Ens name after')
])
def test_manage_saved_address(main_screen: MainWindow, name: str, address: str, new_name: str):
with step('Add new address'):
wallet = main_screen.left_panel.open_wallet()
SigningPhrasePopup().wait_until_appears().confirm_phrase()
wallet.left_panel.open_saved_addresses().open_add_address_popup().add_saved_address(name, address)
with step('Verify that saved address is in the list of saved addresses'):
assert driver.waitFor(
lambda: name in wallet.left_panel.open_saved_addresses().address_names,
configs.timeouts.UI_LOAD_TIMEOUT_MSEC), f'Address: {name} not found'
with step('Edit saved address to new name'):
wallet.left_panel.open_saved_addresses().open_edit_address_popup(name).edit_saved_address(new_name, address)
with step('Verify that saved address with new name is in the list of saved addresses'):
assert driver.waitFor(
lambda: new_name in wallet.left_panel.open_saved_addresses().address_names,
configs.timeouts.UI_LOAD_TIMEOUT_MSEC), f'Address: {new_name} not found'
with step('Delete address with new name'):
wallet.left_panel.open_saved_addresses().delete_saved_address(new_name)
with step('Verify that saved address with new name is not in the list of saved addresses'):
assert driver.waitFor(
lambda: new_name not in wallet.left_panel.open_saved_addresses().address_names,
configs.timeouts.UI_LOAD_TIMEOUT_MSEC), f'Address: {new_name} not found'
@allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703022', 'Edit default wallet account') @allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703022', 'Edit default wallet account')
@pytest.mark.case(703022) @pytest.mark.case(703022)
@pytest.mark.parametrize('name, new_name, new_color, new_emoji, new_emoji_unicode', [ @pytest.mark.parametrize('name, new_name, new_color, new_emoji, new_emoji_unicode', [
@ -77,7 +43,7 @@ def test_edit_default_wallet_account(main_screen: MainWindow, name: str, new_nam
@pytest.mark.case(703026) @pytest.mark.case(703026)
@pytest.mark.parametrize('address, name, color, emoji, emoji_unicode, new_name, new_color,' @pytest.mark.parametrize('address, name, color, emoji, emoji_unicode, new_name, new_color,'
'new_emoji, new_emoji_unicode', [ 'new_emoji, new_emoji_unicode', [
pytest.param('0xea123F7beFF45E3C9fdF54B324c29DBdA14a639A', 'AccWatch1', '#2a4af5', pytest.param('0xea123F7beFF45E3C9fdF54B324c29DBdA14a639A', 'AccWatch1', '#2a4af5',
'sunglasses', '1f60e', 'AccWatch1edited', '#216266', 'thumbsup', '1f44d') 'sunglasses', '1f60e', 'AccWatch1edited', '#216266', 'thumbsup', '1f44d')
]) ])
def test_manage_watch_only_account(main_screen: MainWindow, address: str, color: str, emoji: str, emoji_unicode: str, def test_manage_watch_only_account(main_screen: MainWindow, address: str, color: str, emoji: str, emoji_unicode: str,
@ -124,7 +90,7 @@ def test_manage_watch_only_account(main_screen: MainWindow, address: str, color:
@allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703033', 'Manage a generated account') @allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703033', 'Manage a generated account')
@pytest.mark.case(703033) @pytest.mark.case(703033)
@pytest.mark.parametrize('user_account', [constants.user.user_account_default]) @pytest.mark.parametrize('user_account', [constants.user.user_account_one])
@pytest.mark.parametrize('name, color, emoji, emoji_unicode, ' @pytest.mark.parametrize('name, color, emoji, emoji_unicode, '
'new_name, new_color, new_emoji, new_emoji_unicode', [ 'new_name, new_color, new_emoji, new_emoji_unicode', [
pytest.param('GenAcc1', '#2a4af5', 'sunglasses', '1f60e', pytest.param('GenAcc1', '#2a4af5', 'sunglasses', '1f60e',
@ -171,7 +137,7 @@ def test_manage_generated_account(main_screen: MainWindow, user_account,
@allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703028', 'Manage a custom generated account') @allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703028', 'Manage a custom generated account')
@pytest.mark.case(703028) @pytest.mark.case(703028)
@pytest.mark.parametrize('user_account', [constants.user.user_account_default]) @pytest.mark.parametrize('user_account', [constants.user.user_account_one])
@pytest.mark.parametrize('derivation_path, generated_address_index, name, color, emoji, emoji_unicode', [ @pytest.mark.parametrize('derivation_path, generated_address_index, name, color, emoji, emoji_unicode', [
pytest.param('Ethereum', '5', 'Ethereum', '#216266', 'sunglasses', '1f60e'), pytest.param('Ethereum', '5', 'Ethereum', '#216266', 'sunglasses', '1f60e'),
pytest.param('Ethereum Testnet (Ropsten)', '10', 'Ethereum Testnet ', '#7140fd', 'sunglasses', '1f60e'), pytest.param('Ethereum Testnet (Ropsten)', '10', 'Ethereum Testnet ', '#7140fd', 'sunglasses', '1f60e'),
@ -186,7 +152,9 @@ def test_manage_custom_generated_account(main_screen: MainWindow, user_account,
wallet = main_screen.left_panel.open_wallet() wallet = main_screen.left_panel.open_wallet()
SigningPhrasePopup().wait_until_appears().confirm_phrase() SigningPhrasePopup().wait_until_appears().confirm_phrase()
account_popup = wallet.left_panel.open_add_account_popup() account_popup = wallet.left_panel.open_add_account_popup()
account_popup.set_name(name).set_emoji(emoji).set_color(color).set_derivation_path(derivation_path, generated_address_index, user_account.password).save() account_popup.set_name(name).set_emoji(emoji).set_color(color).set_derivation_path(derivation_path,
generated_address_index,
user_account.password).save()
with step('Verify that the account is correctly displayed in accounts list'): with step('Verify that the account is correctly displayed in accounts list'):
expected_account = constants.user.account_list_item(name, color.lower(), emoji_unicode) expected_account = constants.user.account_list_item(name, color.lower(), emoji_unicode)
@ -206,7 +174,7 @@ def test_manage_custom_generated_account(main_screen: MainWindow, user_account,
@allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703029', 'Manage a private key imported account') @allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703029', 'Manage a private key imported account')
@pytest.mark.case(703029) @pytest.mark.case(703029)
@pytest.mark.parametrize('user_account', [constants.user.user_account_default]) @pytest.mark.parametrize('user_account', [constants.user.user_account_one])
@pytest.mark.parametrize('name, color, emoji, emoji_unicode, ' @pytest.mark.parametrize('name, color, emoji, emoji_unicode, '
'new_name, new_color, new_emoji, new_emoji_unicode, private_key', [ 'new_name, new_color, new_emoji, new_emoji_unicode, private_key', [
pytest.param('PrivKeyAcc1', '#2a4af5', 'sunglasses', '1f60e', pytest.param('PrivKeyAcc1', '#2a4af5', 'sunglasses', '1f60e',
@ -245,9 +213,132 @@ def test_private_key_imported_account(main_screen: MainWindow, user_account,
if time.monotonic() - started_at > 15: if time.monotonic() - started_at > 15:
raise LookupError(f'Account {expected_account} not found in {wallet.left_panel.accounts}') raise LookupError(f'Account {expected_account} not found in {wallet.left_panel.accounts}')
with step('Delete wallet account with agreement'): with step('Delete wallet account'):
wallet.left_panel.delete_account(new_name).confirm() wallet.left_panel.delete_account(new_name).confirm()
with step('Verify that the account is not displayed in accounts list'): with step('Verify that the account is not displayed in accounts list'):
assert driver.waitFor(lambda: new_name not in [account.name for account in wallet.left_panel.accounts], 10000), \ assert driver.waitFor(lambda: new_name not in [account.name for account in wallet.left_panel.accounts], 10000), \
f'Account with {new_name} is still displayed even it should not be' f'Account with {new_name} is still displayed even it should not be'
@allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703030', 'Manage a seed phrase imported account')
@pytest.mark.case(703030)
@pytest.mark.parametrize('user_account', [constants.user.user_account_one])
@pytest.mark.parametrize('name, color, emoji, emoji_unicode, '
'new_name, new_color, new_emoji, new_emoji_unicode, seed_phrase', [
pytest.param('SPAcc24', '#2a4af5', 'sunglasses', '1f60e',
'SPAcc24edited', '#216266', 'thumbsup', '1f44d',
'elite dinosaur flavor canoe garbage palace antique dolphin virtual mixed sand '
'impact solution inmate hair pipe affair cage vote estate gloom lamp robust like'),
pytest.param('SPAcc18', '#2a4af5', 'sunglasses', '1f60e',
'SPAcc18edited', '#216266', 'thumbsup', '1f44d',
'kitten tiny cup admit cactus shrug shuffle accident century faith roof plastic '
'beach police barely vacant sign blossom'),
pytest.param('SPAcc12', '#2a4af5', 'sunglasses', '1f60e',
'SPAcc12edited', '#216266', 'thumbsup', '1f44d',
'pelican chief sudden oval media rare swamp elephant lawsuit wheat knife initial')
])
def test_seed_phrase_imported_account(main_screen: MainWindow, user_account,
name: str, color: str, emoji: str, emoji_unicode: str,
new_name: str, new_color: str, new_emoji: str, new_emoji_unicode: str,
seed_phrase: str):
with step('Create imported seed phrase wallet account'):
wallet = main_screen.left_panel.open_wallet()
SigningPhrasePopup().wait_until_appears().confirm_phrase()
account_popup = wallet.left_panel.open_add_account_popup()
account_popup.set_name(name).set_emoji(emoji).set_color(color).set_origin_seed_phrase(
seed_phrase.split()).save()
AuthenticatePopup().wait_until_appears().authenticate(user_account.password)
account_popup.wait_until_hidden()
with step('Verify that the account is correctly displayed in accounts list'):
expected_account = constants.user.account_list_item(name, color.lower(), emoji_unicode)
started_at = time.monotonic()
while expected_account not in wallet.left_panel.accounts:
time.sleep(1)
if time.monotonic() - started_at > 15:
raise LookupError(f'Account {expected_account} not found in {wallet.left_panel.accounts}')
with step('Edit wallet account'):
account_popup = wallet.left_panel.open_edit_account_popup(name)
account_popup.set_name(new_name).set_emoji(new_emoji).set_color(new_color).save()
with step('Verify that the account is correctly displayed in accounts list'):
expected_account = constants.user.account_list_item(new_name, new_color.lower(), new_emoji_unicode)
started_at = time.monotonic()
while expected_account not in wallet.left_panel.accounts:
time.sleep(1)
if time.monotonic() - started_at > 15:
raise LookupError(f'Account {expected_account} not found in {wallet.left_panel.accounts}')
with step('Delete wallet account with agreement'):
wallet.left_panel.delete_account(new_name).agree_and_confirm()
with step('Verify that the account is not displayed in accounts list'):
assert driver.waitFor(lambda: new_name not in [account.name for account in wallet.left_panel.accounts], 10000), \
f'Account with {new_name} is still displayed even it should not be'
@allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703036',
'Manage an account created from the generated seed phrase')
@pytest.mark.case(703036)
@pytest.mark.parametrize('user_account', [constants.user.user_account_one])
@pytest.mark.parametrize('name, color, emoji, emoji_unicode, '
'new_name, new_color, new_emoji, new_emoji_unicode, keypair_name', [
pytest.param('SPAcc', '#2a4af5', 'sunglasses', '1f60e',
'SPAccedited', '#216266', 'thumbsup', '1f44d', 'SPKeyPair')])
def test_seed_phrase_generated_account(main_screen: MainWindow, user_account,
name: str, color: str, emoji: str, emoji_unicode: str,
new_name: str, new_color: str, new_emoji: str, new_emoji_unicode: str,
keypair_name: str):
with step('Create generated seed phrase wallet account'):
wallet = main_screen.left_panel.open_wallet()
SigningPhrasePopup().wait_until_appears().confirm_phrase()
account_popup = wallet.left_panel.open_add_account_popup()
account_popup.set_name(name).set_emoji(emoji).set_color(color).set_origin_new_seed_phrase(keypair_name).save()
AuthenticatePopup().wait_until_appears().authenticate(user_account.password)
account_popup.wait_until_hidden()
with step('Verify that the account is correctly displayed in accounts list'):
expected_account = constants.user.account_list_item(name, color.lower(), emoji_unicode)
started_at = time.monotonic()
while expected_account not in wallet.left_panel.accounts:
time.sleep(1)
if time.monotonic() - started_at > 15:
raise LookupError(f'Account {expected_account} not found in {wallet.left_panel.accounts}')
with step('Edit wallet account'):
account_popup = wallet.left_panel.open_edit_account_popup(name)
account_popup.set_name(new_name).set_emoji(new_emoji).set_color(new_color).save()
with step('Verify that the account is correctly displayed in accounts list'):
expected_account = constants.user.account_list_item(new_name, new_color.lower(), new_emoji_unicode)
started_at = time.monotonic()
while expected_account not in wallet.left_panel.accounts:
time.sleep(1)
if time.monotonic() - started_at > 15:
raise LookupError(f'Account {expected_account} not found in {wallet.left_panel.accounts}')
with step('Delete wallet account with agreement'):
wallet.left_panel.delete_account(new_name).agree_and_confirm()
with step('Verify that the account is not displayed in accounts list'):
assert driver.waitFor(lambda: new_name not in [account.name for account in wallet.left_panel.accounts], 10000), \
f'Account with {new_name} is still displayed even it should not be'
@allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703514',
'Choosing Use Keycard when adding account')
@pytest.mark.case(703514)
def test_use_keycard_when_adding_account(main_screen: MainWindow):
with step('Choose continue in keycard settings'):
wallet = main_screen.left_panel.open_wallet()
SigningPhrasePopup().wait_until_appears().confirm_phrase()
account_popup = wallet.left_panel.open_add_account_popup()
account_popup.continue_in_keycard_settings()
account_popup.wait_until_hidden()
with (step('Verify that keycard settings view opened and all keycard settings available')):
keycard_view = KeycardSettingsView()
keycard_view.check_keycard_screen_loaded()
keycard_view.all_keycard_options_available()

View File

@ -0,0 +1,44 @@
import allure
import pytest
from allure import step
import configs
import driver
from gui.components.signing_phrase_popup import SigningPhrasePopup
from gui.main_window import MainWindow
pytestmark = allure.suite("Wallet")
@allure.testcase('https://ethstatus.testrail.net/index.php?/cases/view/703021', 'Manage a saved address')
@pytest.mark.case(703021)
@pytest.mark.parametrize('name, address, new_name', [
pytest.param('Saved address name before', '0x8397bc3c5a60a1883174f722403d63a8833312b7', 'Saved address name after'),
pytest.param('Ens name before', 'nastya.stateofus.eth', 'Ens name after')
])
def test_manage_saved_address(main_screen: MainWindow, name: str, address: str, new_name: str):
with step('Add new address'):
wallet = main_screen.left_panel.open_wallet()
SigningPhrasePopup().wait_until_appears().confirm_phrase()
wallet.left_panel.open_saved_addresses().open_add_address_popup().add_saved_address(name, address)
with step('Verify that saved address is in the list of saved addresses'):
assert driver.waitFor(
lambda: name in wallet.left_panel.open_saved_addresses().address_names,
configs.timeouts.UI_LOAD_TIMEOUT_MSEC), f'Address: {name} not found'
with step('Edit saved address to new name'):
wallet.left_panel.open_saved_addresses().open_edit_address_popup(name).edit_saved_address(new_name, address)
with step('Verify that saved address with new name is in the list of saved addresses'):
assert driver.waitFor(
lambda: new_name in wallet.left_panel.open_saved_addresses().address_names,
configs.timeouts.UI_LOAD_TIMEOUT_MSEC), f'Address: {new_name} not found'
with step('Delete address with new name'):
wallet.left_panel.open_saved_addresses().delete_saved_address(new_name)
with step('Verify that saved address with new name is not in the list of saved addresses'):
assert driver.waitFor(
lambda: new_name not in wallet.left_panel.open_saved_addresses().address_names,
configs.timeouts.UI_LOAD_TIMEOUT_MSEC), f'Address: {new_name} not found'