status-desktop/test/e2e/gui/components/profile_popup.py

157 lines
6.1 KiB
Python

import allure
import pyperclip
import configs
import constants
import driver
from gui.components.base_popup import BasePopup
from gui.components.context_menu import ContextMenu
from gui.components.settings.block_user_popup import BlockUserPopup
from gui.components.settings.review_contact_request_popup import AcceptRequestFromProfile
from gui.components.settings.send_contact_request_popup import SendContactRequestFromProfile
from gui.components.settings.unblock_user_popup import UnblockUserPopup
from gui.components.share_profile_popup import ShareProfilePopup
from gui.elements.button import Button
from gui.elements.object import QObject
from gui.elements.text_label import TextLabel
from gui.objects_map import names
from gui.screens.settings_profile import ProfileSettingsView
class ProfilePopup(BasePopup):
def __init__(self):
super().__init__()
self._profile_popup_content_item = QObject(names.ProfileContentItem)
self._profile_image = QObject(names.ProfileHeader_userImage)
self._user_name_label = TextLabel(names.ProfilePopup_displayName)
self._edit_profile_button = Button(names.ProfilePopup_editButton)
self._share_profile_button = Button(names.share_Profile_StatusFlatButton)
self._chat_key_text_label = TextLabel(names.https_status_app_StatusBaseText)
self._emoji_hash = QObject(names.profileDialog_userEmojiHash_EmojiHash)
self._chat_key_copy_button = Button(names.copy_icon_CopyButton)
@allure.step('Wait until appears {0}')
def wait_until_appears(self, timeout_msec: int = configs.timeouts.UI_LOAD_TIMEOUT_MSEC):
self._profile_popup_content_item.wait_until_appears(timeout_msec)
return self
@property
@allure.step('Get profile image')
def profile_image(self):
return self._profile_image.image
@property
@allure.step('Get image without identicon_ring')
def cropped_profile_image(self):
# Profile image without identicon_ring
self._profile_image.image.update_view()
self._profile_image.image.crop(
driver.UiTypes.ScreenRectangle(
15, 15, self._profile_image.image.width - 30, self._profile_image.image.height - 30
))
return self._profile_image.image
@property
@allure.step('Get user name')
def user_name(self) -> str:
return self._user_name_label.text
@property
@allure.step('Get chat key')
def get_chat_key_from_profile_link(self) -> str:
chat_key = self._chat_key_text_label.text.split('https://status.app/u/')[1].strip()
if '#' in chat_key:
chat_key = chat_key.split('#')[1]
return chat_key
@property
@allure.step('Get emoji hash image')
def get_emoji_hash(self) -> str:
return str(getattr(self._emoji_hash.object, 'publicKey'))
@property
@allure.step('Copy chat key')
def copy_chat_key(self) -> str:
self._chat_key_copy_button.click()
return pyperclip.paste()
@allure.step('Verify: user image contains text')
def is_user_image_contains(self, text: str):
# To remove all artifacts, the image cropped.
crop = driver.UiTypes.ScreenRectangle(
15, 15, self._profile_image.image.width - 30, self._profile_image.image.height - 30
)
return self.profile_image.has_text(text, constants.tesseract.text_on_profile_image, crop=crop)
@allure.step('Click edit profile button')
def edit_profile(self):
self._edit_profile_button.click()
return ProfileSettingsView()
@allure.step('Click share profile button')
def share_profile(self):
self._share_profile_button.click()
return ShareProfilePopup()
@allure.step('Wait until appears {0}')
def wait_until_appears(self, timeout_msec: int = configs.timeouts.UI_LOAD_TIMEOUT_MSEC):
self._emoji_hash.wait_until_appears(timeout_msec)
return self
class ProfilePopupFromMembers(ProfilePopup):
def __init__(self):
super(ProfilePopupFromMembers, self).__init__()
self._send_request_button = Button(names.send_contact_request_StatusButton)
self._review_request_button = Button(names.review_contact_request_StatusButton)
self._send_message_button = Button(names.send_Message_StatusButton)
self._unblock_button = Button(names.unblock_user_StatusButton)
self._menu_button = Button(names.menuButton_StatusFlatButton)
self._block_user_menu_item = Button(names.block_user_StatusMenuItem)
self._add_nickname_menu_item = Button(names.add_nickname_StatusMenuItem)
@allure.step('Click send request button')
def send_request(self):
self._send_request_button.click()
return SendContactRequestFromProfile().wait_until_appears()
@allure.step('Get send request button visibilty state')
def is_send_request_button_visible(self):
return self._send_request_button.is_visible
@allure.step('Click review contact request button')
def review_contact_request(self):
assert driver.waitFor(lambda: self._review_request_button.is_visible, 15000)
self._review_request_button.click()
return AcceptRequestFromProfile().wait_until_appears()
@allure.step('Get send message button visibility state')
def is_send_message_button_visible(self):
return self._send_message_button.is_visible
@allure.step('Click menu button')
def click_menu_button(self):
self._menu_button.click()
@allure.step('Choose option from context menu')
def choose_context_menu_option(self, value: str):
self.click_menu_button()
ContextMenu().select(value)
@allure.step('Block user from menu')
def block_user(self):
self.click_menu_button()
self._block_user_menu_item.click()
return BlockUserPopup().wait_until_appears()
@allure.step('Get unblock button visibility state')
def is_unblock_button_visible(self):
return self._unblock_button.is_visible
@allure.step('Unblock user from menu')
def unblock_user(self):
self._unblock_button.click()
return UnblockUserPopup().wait_until_appears()