test(suite_onboarding): fix tests (#10260)

#9285
This commit is contained in:
Vladimir Druzhinin 2023-05-04 18:18:19 +02:00 committed by GitHub
parent 7e4419d239
commit 219eb04da9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 157 additions and 86 deletions

View File

@ -19,7 +19,6 @@ class BaseElement:
def object(self): def object(self):
return squish.waitForObject(self.object_name) return squish.waitForObject(self.object_name)
@property @property
def existent(self): def existent(self):
return squish.waitForObjectExists(self.object_name) return squish.waitForObjectExists(self.object_name)

View File

@ -7,9 +7,9 @@
# * \date February 2022 # * \date February 2022
# * \brief It defines the status login screen behavior and properties. # * \brief It defines the status login screen behavior and properties.
# *****************************************************************************/ # *****************************************************************************/
from enum import Enum from enum import Enum
import configs
from drivers.SquishDriver import * from drivers.SquishDriver import *
from drivers.SquishDriverVerification import * from drivers.SquishDriverVerification import *
from screens.StatusAccountsScreen import StatusAccountsScreen from screens.StatusAccountsScreen import StatusAccountsScreen
@ -62,6 +62,7 @@ class StatusLoginScreen():
click_obj_by_name(SLoginComponents.SUBMIT_BTN.value) click_obj_by_name(SLoginComponents.SUBMIT_BTN.value)
def verify_error_message_is_displayed(self): def verify_error_message_is_displayed(self):
SplashScreen().wait_until_appears().wait_until_hidden(configs.squish.APP_LOAD_TIMEOUT_MSEC)
verify_object_enabled(SLoginComponents.ERR_MSG_LABEL.value) verify_object_enabled(SLoginComponents.ERR_MSG_LABEL.value)
def get_accounts_selector_popup(self): def get_accounts_selector_popup(self):

View File

@ -8,13 +8,68 @@
# * \brief Sign Up and Login for new users to the app. # * \brief Sign Up and Login for new users to the app.
# *****************************************************************************/ # *****************************************************************************/
from array import array
from enum import Enum
import sys import sys
from abc import abstractmethod
from enum import Enum
import common.Common as common
from common.SeedUtils import *
from drivers.SquishDriver import * from drivers.SquishDriver import *
from drivers.SquishDriverVerification import * from drivers.SquishDriverVerification import *
from common.SeedUtils import *
import common.Common as common
class OnboardingBaseScreen(BaseElement):
def __init__(self, object_name):
super(OnboardingBaseScreen, self).__init__(object_name)
self._back_button = Button('onboarding_back_button')
@abstractmethod
def back(self):
pass
class CreatePasswordView(OnboardingBaseScreen):
def __init__(self):
super(CreatePasswordView, self).__init__('mainWindow_CreatePasswordView')
self._new_password_text_field = TextEdit('onboarding_newPsw_Input')
self._confirm_password_text_field = TextEdit('onboarding_confirmPsw_Input')
self._create_button = Button('onboarding_create_password_button')
self._password_strength_indicator = BaseElement('onboarding_strengthInditactor')
@property
def new_password(self) -> str:
return self._new_password_text_field.text
@new_password.setter
def new_password(self, value: str):
self._new_password_text_field.text = value
@property
def confirm_password(self) -> str:
return self._new_password_text_field.text
@confirm_password.setter
def confirm_password(self, value: str):
self._new_password_text_field.text = value
@property
def password_strength_indicator(self):
return self._password_strength_indicator.image
def is_password_strength_indicator_equal(self, indicator : str):
verify_text_matching(self._password_strength_indicator.symbolic_name, indicator)
def create_password(self, value: str):
self.new_password.text = value
self.confirm_password.text = value
self._create_button.click()
# TODO: return Confirm Password View
def back(self):
self._back_button.click()
# TODO: return Details View
class AgreementPopUp(Enum): class AgreementPopUp(Enum):
@ -23,6 +78,7 @@ class AgreementPopUp(Enum):
TERMS_OF_USE_CHECK_BOX: str = "termsOfUseCheckBox_StatusCheckBox" TERMS_OF_USE_CHECK_BOX: str = "termsOfUseCheckBox_StatusCheckBox"
GET_STARTED_BUTTON: str = "getStartedStatusButton_StatusButton" GET_STARTED_BUTTON: str = "getStartedStatusButton_StatusButton"
class SignUpComponents(Enum): class SignUpComponents(Enum):
NEW_TO_STATUS: str = "mainWindow_I_am_new_to_Status_StatusBaseText" NEW_TO_STATUS: str = "mainWindow_I_am_new_to_Status_StatusBaseText"
GENERATE_NEW_KEYS: str = "keysMainView_PrimaryAction_Button" GENERATE_NEW_KEYS: str = "keysMainView_PrimaryAction_Button"
@ -44,6 +100,7 @@ class SignUpComponents(Enum):
WELCOME_SCREEN_CHAT_KEY_TEXT: str = "mainWindow_WelcomeScreen_ChatKeyText" WELCOME_SCREEN_CHAT_KEY_TEXT: str = "mainWindow_WelcomeScreen_ChatKeyText"
BACK_BTN: str = "onboarding_back_button" BACK_BTN: str = "onboarding_back_button"
class SeedPhraseComponents(Enum): class SeedPhraseComponents(Enum):
IMPORT_A_SEED_TEXT: str = "import_a_seed_phrase_StatusBaseText" IMPORT_A_SEED_TEXT: str = "import_a_seed_phrase_StatusBaseText"
INVALID_SEED_TEXT: str = "onboarding_InvalidSeed_Text" INVALID_SEED_TEXT: str = "onboarding_InvalidSeed_Text"
@ -54,6 +111,7 @@ class SeedPhraseComponents(Enum):
SEEDS_WORDS_TEXTFIELD_template: str = "onboarding_SeedPhrase_Input_TextField_" SEEDS_WORDS_TEXTFIELD_template: str = "onboarding_SeedPhrase_Input_TextField_"
SUBMIT_BUTTON: str = "seedPhraseView_Submit_Button" SUBMIT_BUTTON: str = "seedPhraseView_Submit_Button"
class PasswordStrengthPossibilities(Enum): class PasswordStrengthPossibilities(Enum):
LOWER_VERY_WEAK = "lower_very_weak" LOWER_VERY_WEAK = "lower_very_weak"
UPPER_VERY_WEAK = "upper_very_weak" UPPER_VERY_WEAK = "upper_very_weak"
@ -64,14 +122,17 @@ class PasswordStrengthPossibilities(Enum):
NUMBERS_SYMBOLS_LOWER_UPPER_GOOD = "numbers_symbols_lower_upper_good" NUMBERS_SYMBOLS_LOWER_UPPER_GOOD = "numbers_symbols_lower_upper_good"
NUMBERS_SYMBOLS_LOWER_UPPER_GREAT = "numbers_symbols_lower_upper_great" NUMBERS_SYMBOLS_LOWER_UPPER_GREAT = "numbers_symbols_lower_upper_great"
class MainScreen(Enum): class MainScreen(Enum):
SETTINGS_BUTTON = "settings_navbar_settings_icon_StatusIcon" SETTINGS_BUTTON = "settings_navbar_settings_icon_StatusIcon"
class LoginView(Enum): class LoginView(Enum):
LOGIN_VIEW_USER_IMAGE: str = "loginView_userImage" LOGIN_VIEW_USER_IMAGE: str = "loginView_userImage"
PASSWORD_INPUT = "loginView_passwordInput" PASSWORD_INPUT = "loginView_passwordInput"
SUBMIT_BTN = "loginView_submitBtn" SUBMIT_BTN = "loginView_submitBtn"
class StatusWelcomeScreen: class StatusWelcomeScreen:
def __init__(self): def __init__(self):

View File

@ -3,9 +3,14 @@ from scripts.global_names import *
# Main: # Main:
mainWindow_Welcome_to_Status_StyledText = {"container": statusDesktop_mainWindow, "text": "Welcome to Status", "type": "StyledText", "unnamed": 1, "visible": True} mainWindow_Welcome_to_Status_StyledText = {"container": statusDesktop_mainWindow, "text": "Welcome to Status", "type": "StyledText", "unnamed": 1, "visible": True}
mainWindow_startupOnboarding_OnboardingLayout = {"container": statusDesktop_mainWindow, "objectName": "startupOnboardingLayout", "type": "OnboardingLayout", "visible": True} mainWindow_startupOnboarding_OnboardingLayout = {"container": statusDesktop_mainWindow, "objectName": "startupOnboardingLayout", "type": "OnboardingLayout", "visible": True}
onboarding_newPsw_Input = {"container": statusDesktop_mainWindow, "objectName": "passwordViewNewPassword", "type": "StatusPasswordInput", "visible": True}
onboarding_confirmPsw_Input = {"container": statusDesktop_mainWindow, "objectName": "passwordViewNewPasswordConfirm", "type": "StatusPasswordInput", "visible": True} # Create Password View
onboarding_create_password_button = {"container": statusDesktop_mainWindow, "objectName": "onboardingCreatePasswordButton", "type": "StatusButton"} mainWindow_CreatePasswordView = {"container": statusDesktop_mainWindow, "type": "CreatePasswordView", "unnamed": 1, "visible": True}
onboarding_newPsw_Input = {"container": mainWindow_CreatePasswordView, "objectName": "passwordViewNewPassword", "type": "StatusPasswordInput", "visible": True}
onboarding_confirmPsw_Input = {"container": mainWindow_CreatePasswordView, "objectName": "passwordViewNewPasswordConfirm", "type": "StatusPasswordInput", "visible": True}
onboarding_create_password_button = {"container": mainWindow_CreatePasswordView, "objectName": "onboardingCreatePasswordButton", "type": "StatusButton"}
onboarding_strengthInditactor = {"container": mainWindow_CreatePasswordView, "type": "StatusPasswordStrengthIndicator", "unnamed": 1, "visible": True}
onboarding_confirmPswAgain_Input = {"container": statusDesktop_mainWindow, "objectName": "confirmAgainPasswordInput", "type": "StatusPasswordInput", "visible": True} onboarding_confirmPswAgain_Input = {"container": statusDesktop_mainWindow, "objectName": "confirmAgainPasswordInput", "type": "StatusPasswordInput", "visible": True}
onboarding_finalise_password_button = {"container": statusDesktop_mainWindow, "objectName": "confirmPswSubmitBtn", "type": "StatusButton"} onboarding_finalise_password_button = {"container": statusDesktop_mainWindow, "objectName": "confirmPswSubmitBtn", "type": "StatusButton"}
acknowledge_checkbox = {"checkable": True, "container": statusDesktop_mainWindow_overlay, "objectName": "acknowledgeCheckBox", "type": "StatusCheckBox", "visible": True} acknowledge_checkbox = {"checkable": True, "container": statusDesktop_mainWindow_overlay, "objectName": "acknowledgeCheckBox", "type": "StatusCheckBox", "visible": True}

View File

@ -55,7 +55,6 @@ communities_StatusNavigationListItem = {"container": mainWindow_ScrollView, "obj
profile_StatusNavigationListItem = {"container": mainWindow_ScrollView, "objectName": SettingsSubsection.PROFILE.value, "type": "StatusNavigationListItem", "visible": True} profile_StatusNavigationListItem = {"container": mainWindow_ScrollView, "objectName": SettingsSubsection.PROFILE.value, "type": "StatusNavigationListItem", "visible": True}
messaging_StatusNavigationListItem = {"container": mainWindow_ScrollView, "objectName": SettingsSubsection.MESSAGING.value, "type": "StatusNavigationListItem", "visible": True} messaging_StatusNavigationListItem = {"container": mainWindow_ScrollView, "objectName": SettingsSubsection.MESSAGING.value, "type": "StatusNavigationListItem", "visible": True}
# Profile Settings: # Profile Settings:
mainWindow_MyProfileView = {"container": statusDesktop_mainWindow, "type": "MyProfileView", "unnamed": 1, "visible": True} mainWindow_MyProfileView = {"container": statusDesktop_mainWindow, "type": "MyProfileView", "unnamed": 1, "visible": True}
displayName_StatusInput = {"container": statusDesktop_mainWindow, "objectName": "displayNameInput", "type": "StatusInput", "visible": True} displayName_StatusInput = {"container": statusDesktop_mainWindow, "objectName": "displayNameInput", "type": "StatusInput", "visible": True}
@ -86,7 +85,6 @@ add_StatusButton = {"checkable": False, "container": statusDesktop_mainWindow_ov
linksView = {"container": statusDesktop_mainWindow, "id": "linksView", "type": "StatusListView", "unnamed": 1, "visible": True} linksView = {"container": statusDesktop_mainWindow, "id": "linksView", "type": "StatusListView", "unnamed": 1, "visible": True}
edit_TextEdit = {"container": statusDesktop_mainWindow_overlay, "id": "edit", "type": "TextEdit", "unnamed": 1, "visible": True} edit_TextEdit = {"container": statusDesktop_mainWindow_overlay, "id": "edit", "type": "TextEdit", "unnamed": 1, "visible": True}
# Wallet Settings: # Wallet Settings:
settings_Wallet_MainView_GeneratedAccounts = {"container": statusDesktop_mainWindow, "objectName":'generatedAccounts', "type": 'ListView'} settings_Wallet_MainView_GeneratedAccounts = {"container": statusDesktop_mainWindow, "objectName":'generatedAccounts', "type": 'ListView'}
settings_Wallet_AccountView_DeleteAccount = {"container": statusDesktop_mainWindow, "type": "StatusButton", "objectName": "deleteAccountButton"} settings_Wallet_AccountView_DeleteAccount = {"container": statusDesktop_mainWindow, "type": "StatusButton", "objectName": "deleteAccountButton"}
@ -170,4 +168,3 @@ change_password_menu_new_password = {"container": statusDesktop_mainWindow_overl
change_password_menu_new_password_confirm = {"container": statusDesktop_mainWindow_overlay, "objectName": "passwordViewNewPasswordConfirm", "type": "StatusPasswordInput", "visible": True} change_password_menu_new_password_confirm = {"container": statusDesktop_mainWindow_overlay, "objectName": "passwordViewNewPasswordConfirm", "type": "StatusPasswordInput", "visible": True}
change_password_menu_submit_button = {"container": statusDesktop_mainWindow_overlay, "objectName": "changePasswordModalSubmitButton", "type": "StatusButton", "visible": True} change_password_menu_submit_button = {"container": statusDesktop_mainWindow_overlay, "objectName": "changePasswordModalSubmitButton", "type": "StatusButton", "visible": True}
change_password_success_menu_sign_out_quit_button = {"container": statusDesktop_mainWindow_overlay, "objectName": "changePasswordSuccessModalSignOutAndQuitButton", "type": "StatusButton", "visible": True} change_password_success_menu_sign_out_quit_button = {"container": statusDesktop_mainWindow_overlay, "objectName": "changePasswordSuccessModalSignOutAndQuitButton", "type": "StatusButton", "visible": True}

View File

@ -1,5 +1,8 @@
import configs
from screens.StatusLoginScreen import StatusLoginScreen from screens.StatusLoginScreen import StatusLoginScreen
_loginScreen = StatusLoginScreen() _loginScreen = StatusLoginScreen()
######################### #########################
@ -23,8 +26,6 @@ def step(context, username, password):
@Then("the user is NOT able to login to Status Desktop application") @Then("the user is NOT able to login to Status Desktop application")
def step(context): def step(context):
_main_screen = StatusMainScreen()
_main_screen.wait_for_splash_animation_ends()
_loginScreen.verify_error_message_is_displayed() _loginScreen.verify_error_message_is_displayed()
########################################################################### ###########################################################################

View File

@ -1,6 +1,14 @@
from screens.StatusWelcomeScreen import StatusWelcomeScreen from pathlib import Path
import sys
from screens.StatusWelcomeScreen import CreatePasswordView
_welcome_screen = CreatePasswordView()
@When('the user inputs the password \"|any|\"')
def step(context, password):
_welcome_screen.new_password = str(password)
_welcomeScreen = StatusWelcomeScreen()
@Then("the password strength indicator is \"|any|\"") @Then("the password strength indicator is \"|any|\"")
def step(context, strength): def step(context, strength):

View File

@ -6,7 +6,6 @@ Feature: Status Desktop Sign Up with seed phrase, negative cases
The feature start sequence follows the global one (setup on global `bdd_hooks`): No additional steps The feature start sequence follows the global one (setup on global `bdd_hooks`): No additional steps
@mayfail
Scenario: User signs up with wrong imported seed phrase Scenario: User signs up with wrong imported seed phrase
Given A first time user lands on the status desktop and navigates to import seed phrase Given A first time user lands on the status desktop and navigates to import seed phrase

View File

@ -29,7 +29,6 @@ Feature: Status Desktop login
| username | password | | username | password |
| Athletic_Prime | TesTEr16843/!@00 | | Athletic_Prime | TesTEr16843/!@00 |
@mayfail
Scenario Outline: User tries to login with an invalid password Scenario Outline: User tries to login with an invalid password
Given A first time user lands on the status desktop and generates new key Given A first time user lands on the status desktop and generates new key
And the user signs up with username "<username>" and password "<password>" And the user signs up with username "<username>" and password "<password>"

View File

@ -23,7 +23,6 @@ Feature: Status Desktop Sign Up
Then the user lands on the signed in app Then the user lands on the signed in app
And the user is online And the user is online
@mayfail
Scenario Outline: The user signs up with imported seed phrase and and its state is online Scenario Outline: The user signs up with imported seed phrase and and its state is online
Given A first time user lands on the status desktop and navigates to import seed phrase Given A first time user lands on the status desktop and navigates to import seed phrase
When the user inputs the seed phrase "<seed>" When the user inputs the seed phrase "<seed>"
@ -39,6 +38,7 @@ Feature: Status Desktop Sign Up
| provide between target maze travel enroll edge churn random sight grass lion diet sugar cable fiction reflect reason gaze camp tone maximum task unlock | 0xCb59031d11D233112CB57DFd667fE1FF6Cd7b6Da | | provide between target maze travel enroll edge churn random sight grass lion diet sugar cable fiction reflect reason gaze camp tone maximum task unlock | 0xCb59031d11D233112CB57DFd667fE1FF6Cd7b6Da |
@mayfail @mayfail
# https://github.com/status-im/status-desktop/issues/10069
Scenario: The user signs up with a profile image Scenario: The user signs up with a profile image
Given A first time user lands on the status desktop and generates new key Given A first time user lands on the status desktop and generates new key
And the user signs up with profileImage "doggo.jpeg", username "tester123" and password "TesTEr16843/!@00" And the user signs up with profileImage "doggo.jpeg", username "tester123" and password "TesTEr16843/!@00"

View File

@ -153,6 +153,7 @@ StatusWindow {
if(state === Constants.appState.startup) { if(state === Constants.appState.startup) {
// we're here only in case of error when we're returning from the app loading state // we're here only in case of error when we're returning from the app loading state
loader.sourceComponent = undefined loader.sourceComponent = undefined
appLoadingAnimation.active = false
startupOnboarding.visible = true startupOnboarding.visible = true
} }
else if(state === Constants.appState.appLoading) { else if(state === Constants.appState.appLoading) {