104 lines
2.9 KiB
Python
104 lines
2.9 KiB
Python
import allure
|
|
import os
|
|
|
|
import pytest
|
|
import logging
|
|
import configs
|
|
import constants
|
|
from configs import get_platform
|
|
from constants import UserAccount
|
|
from driver.aut import AUT
|
|
from gui.main_window import MainWindow
|
|
from scripts.utils import system_path
|
|
from scripts.utils.local_system import get_pid_by_process_name, kill_process
|
|
from scripts.utils.system_path import SystemPath
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
@pytest.fixture
|
|
def options(request):
|
|
if hasattr(request, 'param'):
|
|
return request.param
|
|
return ''
|
|
|
|
@pytest.fixture
|
|
def keycard_controller(request):
|
|
if 'settings_keycard' in str(getattr(request, 'fspath')):
|
|
os.environ['STATUS_RUNTIME_USE_MOCKED_KEYCARD'] = 'True'
|
|
|
|
@pytest.fixture
|
|
def application_logs():
|
|
yield
|
|
if configs.testpath.STATUS_DATA.exists():
|
|
for app_data in configs.testpath.STATUS_DATA.iterdir():
|
|
for log_dir in ['logs', 'data']:
|
|
log_path = app_data / log_dir
|
|
for log in log_path.glob('*.log'):
|
|
allure.attach.file(log, name=str(log.name), attachment_type=allure.attachment_type.TEXT)
|
|
try:
|
|
log.unlink() # FIXME: it does not work on Windows, permission error
|
|
except PermissionError:
|
|
print(f"Permission error: {log} could not be deleted.")
|
|
|
|
|
|
@pytest.fixture
|
|
def user_data(request) -> system_path.SystemPath:
|
|
if hasattr(request, 'param'):
|
|
fp = request.param
|
|
assert fp.is_dir()
|
|
return fp
|
|
|
|
|
|
@pytest.fixture
|
|
def aut(user_data) -> AUT:
|
|
if not configs.AUT_PATH.exists():
|
|
pytest.exit(f"Application not found: {configs.AUT_PATH}")
|
|
_aut = AUT(user_data=user_data)
|
|
yield _aut
|
|
|
|
|
|
@pytest.fixture()
|
|
def multiple_instances(user_data):
|
|
def _aut(user_data: SystemPath = None) -> AUT:
|
|
if not configs.AUT_PATH.exists():
|
|
pytest.exit(f"Application not found: {configs.AUT_PATH}")
|
|
return AUT(user_data=user_data)
|
|
|
|
yield _aut
|
|
|
|
|
|
@pytest.fixture
|
|
def main_window(aut: AUT, user_data):
|
|
aut.launch()
|
|
LOG.debug('Waiting for main window...')
|
|
yield MainWindow().wait_until_appears().prepare()
|
|
aut.stop()
|
|
|
|
|
|
@pytest.fixture
|
|
def user_account(request) -> UserAccount:
|
|
if hasattr(request, 'param'):
|
|
user_account = request.param
|
|
assert isinstance(user_account, UserAccount)
|
|
else:
|
|
user_account = constants.user.user_account_one
|
|
yield user_account
|
|
|
|
|
|
@pytest.fixture
|
|
def main_screen(user_account: UserAccount, main_window: MainWindow) -> MainWindow:
|
|
main_window.authorize_user(user_account)
|
|
return main_window
|
|
|
|
@pytest.fixture(scope="session")
|
|
def close_apps_before_start():
|
|
if get_platform() == "Windows":
|
|
name = 'Status.exe'
|
|
else:
|
|
name = 'nim_status_client'
|
|
running_pids = get_pid_by_process_name(name)
|
|
if running_pids is not None:
|
|
for pid in running_pids:
|
|
kill_process(pid)
|