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

216 lines
8.3 KiB
Python

import typing
import allure
from allure_commons._allure import step
import driver
from constants import UserChannel
from gui.components.community.community_channel_popups import EditChannelPopup, NewChannelPopup
from gui.components.community.welcome_community import WelcomeCommunityPopup
from gui.components.delete_popup import DeletePopup
from gui.elements.button import Button
from gui.elements.list import List
from gui.elements.object import QObject
from gui.elements.text_label import TextLabel
from gui.screens.community_settings import CommunitySettingsScreen
from scripts.tools import image
from scripts.tools.image import Image
class CommunityScreen(QObject):
def __init__(self):
super().__init__('mainWindow_communityLoader_Loader')
self.left_panel = LeftPanel()
self.tool_bar = ToolBar()
self.chat = Chat()
self.right_panel = Members()
@allure.step('Create channel')
def create_channel(self, name: str, description: str, emoji: str = None):
self.left_panel.open_create_channel_popup().create(name, description, emoji)
@allure.step('Create channel')
def edit_channel(self, channel, name: str, description: str, emoji: str = None):
self.left_panel.select_channel(channel)
self.tool_bar.open_edit_channel_popup().edit(name, description, emoji)
@allure.step('Delete channel')
def delete_channel(self, name: str):
self.left_panel.select_channel(name)
self.tool_bar.open_delete_channel_popup().delete()
@allure.step('Verify channel')
def verify_channel(
self, name: str, description: str, icon_in_list: str, icon_in_toolbar: str, icon_in_chat: str):
with step('Channel is correct in channels list'):
channel = self.left_panel.get_channel_parameters(name)
image.compare(channel.image, icon_in_list, timout_sec=5)
assert channel.name == name
assert channel.selected
with step('Channel is correct in community toolbar'):
assert self.tool_bar.channel_name == name
assert self.tool_bar.channel_description == description
image.compare(self.tool_bar.channel_icon, icon_in_toolbar, timout_sec=5)
with step('Verify channel in chat'):
assert self.chat.channel_name == name
image.compare(self.chat.channel_icon, icon_in_chat, timout_sec=5)
class ToolBar(QObject):
def __init__(self):
super().__init__('mainWindow_statusToolBar_StatusToolBar')
self._more_options_button = Button('statusToolBar_chatToolbarMoreOptionsButton')
self._options_list = List('o_StatusListView')
self._edit_channel_context_item = QObject('edit_Channel_StatusMenuItem')
self._channel_icon = QObject('statusToolBar_statusSmartIdenticonLetter_StatusLetterIdenticon')
self._channel_name = TextLabel('statusToolBar_statusChatInfoButtonNameText_TruncatedTextWithTooltip')
self._channel_description = TextLabel('statusToolBar_TruncatedTextWithTooltip')
self._delete_channel_context_item = QObject('delete_Channel_StatusMenuItem')
@property
@allure.step('Get channel icon')
def channel_icon(self) -> Image:
return self._channel_icon.image
@property
@allure.step('Get channel name')
def channel_name(self) -> str:
return self._channel_name.text
@property
@allure.step('Get channel description')
def channel_description(self) -> str:
return self._channel_description.text
@allure.step('Open edit channel popup')
def open_edit_channel_popup(self):
self._more_options_button.click()
self._edit_channel_context_item.click()
return EditChannelPopup().wait_until_appears()
@allure.step('Open delete channel popup')
def open_delete_channel_popup(self):
self._more_options_button.click()
self._delete_channel_context_item.click()
return DeletePopup().wait_until_appears()
class LeftPanel(QObject):
def __init__(self):
super().__init__('mainWindow_communityColumnView_CommunityColumnView')
self._community_info_button = Button('mainWindow_communityHeaderButton_StatusChatInfoButton')
self._community_logo = QObject('mainWindow_identicon_StatusSmartIdenticon')
self._name_text_label = TextLabel('mainWindow_statusChatInfoButtonNameText_TruncatedTextWithTooltip')
self._members_text_label = TextLabel('mainWindow_Members_TruncatedTextWithTooltip')
self._channel_list_item = QObject('channel_listItem')
self._channel_icon_template = QObject('channel_identicon_StatusSmartIdenticon')
self._channel_or_category_button = Button('mainWindow_createChannelOrCategoryBtn_StatusBaseText')
self._create_channel_menu_item = Button('create_channel_StatusMenuItem')
self._join_community_button = Button('mainWindow_Join_Community_StatusButton')
@property
@allure.step('Get community logo')
def logo(self) -> Image:
return self._community_logo.image
@property
@allure.step('Get community name')
def name(self) -> str:
return self._name_text_label.text
@property
@allure.step('Get community members label')
def members(self) -> str:
return self._members_text_label.text
@property
@allure.step('Get Join button visible attribute')
def is_join_community_visible(self) -> bool:
return self._join_community_button.is_visible
@property
@allure.step('Get channels')
def channels(self) -> typing.List[UserChannel]:
channels_list = []
for obj in driver.findAllObjects(self._channel_list_item.real_name):
container = driver.objectMap.realName(obj)
self._channel_icon_template.real_name['container'] = container
channels_list.append(UserChannel(
str(obj.objectName),
self._channel_icon_template.image,
obj.item.selected
))
return channels_list
@allure.step('Get channel params')
def get_channel_parameters(self, name) -> UserChannel:
for channal in self.channels:
if channal.name == name:
return channal
raise LookupError(f'Channel not found in {self.channels}')
@allure.step('Open community settings')
def open_community_settings(self):
self._community_info_button.click()
return CommunitySettingsScreen().wait_until_appears()
@allure.step('Open create channel popup')
def open_create_channel_popup(self) -> NewChannelPopup:
self._channel_or_category_button.click()
self._create_channel_menu_item.click()
return NewChannelPopup().wait_until_appears()
@allure.step('Select channel')
def select_channel(self, name: str):
for obj in driver.findAllObjects(self._channel_list_item.real_name):
if str(obj.objectName) == name:
driver.mouseClick(obj)
return
raise LookupError('Channel not found')
@allure.step('Open join community popup')
def open_welcome_community_popup(self):
self._join_community_button.click()
return WelcomeCommunityPopup().wait_until_appears()
class Chat(QObject):
def __init__(self):
super().__init__('mainWindow_ChatColumnView')
self._channel_icon = QObject('chatMessageViewDelegate_channelIdentifierSmartIdenticon_StatusSmartIdenticon')
self._channel_name_label = TextLabel('chatMessageViewDelegate_channelIdentifierNameText_StyledText')
self._channel_welcome_label = TextLabel('chatMessageViewDelegate_Welcome')
@property
@allure.step('Get channel icon')
def channel_icon(self) -> Image:
return self._channel_icon.image
@property
@allure.step('Get channel name')
def channel_name(self) -> str:
return self._channel_name_label.text
@property
@allure.step('Get channel welcome note')
def channel_welcome_note(self) -> str:
return self._channel_welcome_label.text
class Members(QObject):
def __init__(self):
super().__init__('mainWindow_UserListPanel')
self._member_item = QObject('userListPanel_StatusMemberListItem')
@property
@allure.step('Get all members')
def members(self) -> typing.List[str]:
return [str(member.statusListItemTitle.text) for member in driver.findAllObjects(self._member_item.real_name)]