status-desktop/test/e2e/gui/mocked_keycard_controller.py

129 lines
5.4 KiB
Python

import time
import typing
import allure
import configs
import driver
from gui.elements.button import Button
from gui.elements.object import QObject
from gui.elements.scroll import Scroll
from gui.elements.window import Window
from gui.objects_map import names
class MockedKeycardController(Window):
def __init__(self):
super(MockedKeycardController, self).__init__(names.QQuickApplicationWindow)
self._plugin_reader_button = Button(names.plugin_Reader_StatusButton)
self._unplug_reader_button = Button(names.unplug_Reader_StatusButton)
self._insert_keycard_1_button = Button(names.insert_Keycard_1_StatusButton)
self._insert_keycard_2_button = Button(names.insert_Keycard_2_StatusButton)
self._remove_keycard_button = Button(names.remove_Keycard_StatusButton)
self._reader_state_button = Button(names.set_initial_reader_state_StatusButton)
self._keycard_state_button = Button(names.set_initial_keycard_state_StatusButton)
self._register_keycard_button = Button(names.register_Keycard_StatusButton)
self._reader_unplugged_item = QObject(names.reader_Unplugged_StatusMenuItem)
self._keycard_not_inserted_item = QObject(names.keycard_Not_Inserted_StatusMenuItem)
self._keycard_inserted_item = QObject(names.keycard_Inserted_StatusMenuItem)
self._custom_keycard_item = QObject(names.custom_Keycard_StatusMenuItem)
self._not_status_keycard_item = QObject(names.not_Status_Keycard_StatusMenuItem)
self._empty_keycard_item = QObject(names.empty_Keycard_StatusMenuItem)
self._max_slots_reached_item = QObject(names.max_Pairing_Slots_Reached_StatusMenuItem)
self._mnemonic_metadata_item = QObject(names.keycard_With_Mnemonic_Metadata_StatusMenuItem)
self._field_object = QObject(names.keycard_edit_TextEdit)
self._scroll = Scroll(names.keycardFlickable)
def wait_until_appears(self, timeout_msec: int = configs.timeouts.UI_LOAD_TIMEOUT_MSEC):
driver.waitFor(lambda: self._plugin_reader_button.exists, timeout_msec)
return self
@property
@allure.step('Get text fields')
def get_text_fields(self) -> typing.List[str]:
return driver.findAllObjects(self._field_object.real_name)
@allure.step('Click Plug in reader')
def plugin_reader(self):
time.sleep(1)
self._plugin_reader_button.click()
time.sleep(2)
return self
@allure.step('Click Register keycard')
def register_keycard(self):
time.sleep(1)
if not self._register_keycard_button.is_visible:
self._scroll.vertical_down_to(self._register_keycard_button)
self._register_keycard_button.click()
time.sleep(1)
return self
@allure.step('Click Remove keycard')
def remove_keycard(self):
time.sleep(1)
if not self._remove_keycard_button.is_visible:
self._scroll.vertical_down_to(self._remove_keycard_button)
self._remove_keycard_button.click()
time.sleep(1)
return self
@allure.step('Click Insert Keycard 1')
def insert_keycard_1(self):
self._insert_keycard_1_button.click()
time.sleep(1)
return self
@allure.step('Choose custom keycard from initial keycard state dropdown')
def choose_custom_keycard(self):
if not self._keycard_state_button.is_visible:
self._scroll.vertical_scroll_to(self._keycard_state_button)
self._keycard_state_button.click()
self._custom_keycard_item.click()
time.sleep(1)
return self
@allure.step('Input custom keycard details to custom text field')
def input_custom_keycard_details(self, details: str, index: int):
fields = self.get_text_fields
self._scroll.vertical_scroll_to(QObject(real_name=driver.objectMap.realName(fields[index])))
driver.type(fields[index], details)
time.sleep(1)
@allure.step('Choose not Status keycard from initial keycard state dropdown')
def choose_not_status_keycard(self):
if not self._keycard_state_button.is_visible:
self._scroll.vertical_scroll_to(self._keycard_state_button)
self._keycard_state_button.click()
self._not_status_keycard_item.click()
time.sleep(1)
return self
@allure.step('Choose empty keycard from initial keycard state dropdown')
def choose_empty_keycard(self):
if not self._keycard_state_button.is_visible:
self._scroll.vertical_scroll_to(self._keycard_state_button)
self._keycard_state_button.click()
self._empty_keycard_item.click()
time.sleep(1)
return self
@allure.step('Choose keycard with MAX pairing slots reached from initial keycard state dropdown')
def choose_max_slots_reached_keycard(self):
if not self._keycard_state_button.is_visible:
self._scroll.vertical_scroll_to(self._keycard_state_button)
self._keycard_state_button.click()
self._max_slots_reached_item.click()
time.sleep(1)
return self
@allure.step('Choose keycard with mnemonic and metadata from initial keycard state dropdown')
def choose_mnemonic_metadata_keycard(self):
if not self._keycard_state_button.is_visible:
self._scroll.vertical_scroll_to(self._keycard_state_button)
self._keycard_state_button.click()
self._mnemonic_metadata_item.click()
time.sleep(1)
return self