status-desktop/test/e2e/gui/screens/settings_communities.py

76 lines
3.2 KiB
Python

import logging
import time
import typing
import allure
import configs.timeouts
import driver
from constants import UserCommunityInfo
from driver import objects_access
from gui.elements.button import Button
from gui.elements.object import QObject
from gui.elements.text_label import TextLabel
from gui.screens.community_settings import CommunitySettingsScreen
_logger = logging.getLogger(__name__)
class CommunitiesSettingsView(QObject):
def __init__(self):
super().__init__('mainWindow_CommunitiesView')
self._community_item = QObject('settingsContentBaseScrollView_listItem_StatusListItem')
self._community_template_image = QObject('settings_iconOrImage_StatusSmartIdenticon')
self._community_template_name = TextLabel('settings_Name_StatusTextWithLoadingState')
self._community_template_description = TextLabel('settings_statusListItemSubTitle')
self._community_template_members = TextLabel('settings_member_StatusTextWithLoadingState')
self._community_template_button = Button('settings_StatusFlatButton')
@property
@allure.step('Get communities')
def communities(self) -> typing.List[UserCommunityInfo]:
_communities = []
for obj in driver.findAllObjects(self._community_item.real_name):
container = driver.objectMap.realName(obj)
self._community_template_image.real_name['container'] = container
self._community_template_name.real_name['container'] = container
self._community_template_description.real_name['container'] = container
self._community_template_members.real_name['container'] = container
name = self._community_template_name.text
description = self._community_template_description.text
try:
members = self._community_template_members.text
except LookupError as err:
_logger.info(err)
members = 0
image = self._community_template_image.image
_communities.append(UserCommunityInfo(name, description, members, image))
return _communities
def _get_community_item(self, name: str):
for obj in driver.findAllObjects(self._community_item.real_name):
for item in objects_access.walk_children(obj):
if getattr(item, 'text', '') == name:
return obj
raise LookupError(f'Community item: {name} not found')
@allure.step('Open community info')
def get_community_info(
self, name: str, timeout_msec: int = configs.timeouts.UI_LOAD_TIMEOUT_MSEC) -> UserCommunityInfo:
started_at = time.monotonic()
while True:
communities = self.communities
for community in communities:
if community.name == name:
return community
if time.monotonic() - started_at > timeout_msec:
raise LookupError(f'Community item: {name} not found in {communities}')
@allure.step('Open community overview settings')
def open_community_overview_settings(self, name: str):
driver.mouseClick(self._get_community_item(name))
return CommunitySettingsScreen().wait_until_appears()