96 lines
3.7 KiB
Python
96 lines
3.7 KiB
Python
|
import time
|
||
|
import typing
|
||
|
|
||
|
import allure
|
||
|
|
||
|
import configs.timeouts
|
||
|
import driver
|
||
|
from driver.objects_access import walk_children
|
||
|
from gui.components.base_popup import BasePopup
|
||
|
from gui.elements.button import Button
|
||
|
from gui.elements.list import List
|
||
|
from gui.elements.object import QObject
|
||
|
from gui.elements.scroll import Scroll
|
||
|
from gui.objects_map import names
|
||
|
from scripts.tools.image import Image
|
||
|
|
||
|
|
||
|
class ContactRequest:
|
||
|
|
||
|
def __init__(self, obj):
|
||
|
self.object = obj
|
||
|
self.contact_request: typing.Optional[Image] = None
|
||
|
self._accept_button: typing.Optional[Button] = None
|
||
|
self._decline_button: typing.Optional[Button] = None
|
||
|
self._notification_request_state: typing.Optional[Image] = None
|
||
|
self.init_ui()
|
||
|
|
||
|
def __repr__(self):
|
||
|
return self.contact_request
|
||
|
|
||
|
def init_ui(self):
|
||
|
for child in walk_children(self.object):
|
||
|
if str(getattr(child, 'objectName', '')) == 'checkmark-circle-icon':
|
||
|
self._accept_button = Button(real_name=driver.objectMap.realName(child))
|
||
|
elif str(getattr(child, 'objectName', '')) == 'close-circle-icon':
|
||
|
self._decline_button = Button(real_name=driver.objectMap.realName(child))
|
||
|
elif str(getattr(child, 'objectName', '')) == 'StatusMessageHeader_DisplayName':
|
||
|
self.contact_request = str(child.text)
|
||
|
elif str(getattr(child, 'id', '')) == 'textItem':
|
||
|
self._notification_request_state = str(child.text)
|
||
|
|
||
|
@allure.step('Accept request')
|
||
|
def accept(self):
|
||
|
assert self._accept_button is not None, 'Button not found'
|
||
|
self._accept_button.click()
|
||
|
|
||
|
@allure.step('Decline request')
|
||
|
def decline(self):
|
||
|
assert self._decline_button is not None, 'Button not found'
|
||
|
self._decline_button.click()
|
||
|
|
||
|
|
||
|
class ActivityCenter(BasePopup):
|
||
|
|
||
|
def __init__(self):
|
||
|
super(ActivityCenter, self).__init__()
|
||
|
self._activity_center_button = Scroll(names.activityCenterStatusFlatButton)
|
||
|
self._notification_contact_request = QObject(names.o_ActivityNotificationContactRequest)
|
||
|
self._activity_center_panel = QObject(names.activityCenterTopBar_ActivityCenterPopupTopBarPanel)
|
||
|
self._contact_request_list = List(names.contacts_StatusListView)
|
||
|
|
||
|
@property
|
||
|
@allure.step('Get contact items')
|
||
|
def contact_items(self) -> typing.List[ContactRequest]:
|
||
|
return [ContactRequest(item) for item in self._contact_request_list.items]
|
||
|
|
||
|
@allure.step('Wait until appears {0}')
|
||
|
def wait_until_appears(self, timeout_msec: int = configs.timeouts.UI_LOAD_TIMEOUT_MSEC):
|
||
|
self._activity_center_panel.wait_until_appears(timeout_msec)
|
||
|
return self
|
||
|
|
||
|
@allure.step('Click activity center button')
|
||
|
def click_activity_center_button(self, text: str):
|
||
|
for button in driver.findAllObjects(self._activity_center_button.real_name):
|
||
|
if str(getattr(button, 'text', '')) == str(text):
|
||
|
driver.mouseClick(button)
|
||
|
break
|
||
|
return self
|
||
|
|
||
|
@allure.step('Find contact request')
|
||
|
def find_contact_request_in_list(
|
||
|
self, contact: str, timeout_sec: int = configs.timeouts.MESSAGING_TIMEOUT_SEC):
|
||
|
started_at = time.monotonic()
|
||
|
request = None
|
||
|
while request is None:
|
||
|
requests = self.contact_items
|
||
|
for _request in requests:
|
||
|
if _request.contact_request == contact:
|
||
|
request = _request
|
||
|
assert time.monotonic() - started_at < timeout_sec, f'Contact: {contact} not found in {requests}'
|
||
|
return request
|
||
|
|
||
|
@allure.step('Accept contact request')
|
||
|
def accept_contact_request(self, request):
|
||
|
return request.accept()
|