diff --git a/main.py b/main.py index 00a451c..aa809bc 100644 --- a/main.py +++ b/main.py @@ -42,6 +42,7 @@ subprocess.run( RECIPES_DIR, "--output_dir", OUTPUT_DIR, + "--resume", # "--debug", ] ) diff --git a/pytest_abra/cli.py b/pytest_abra/cli.py index 0d82951..8658dbb 100644 --- a/pytest_abra/cli.py +++ b/pytest_abra/cli.py @@ -29,9 +29,9 @@ def run(): session_id = "test-" + get_datetime_string() if args.resume: - # look for previous session_id - pass - # session_id = "abc" + latest_session_id = DirManager.get_latest_session_id(args.output_dir) + if latest_session_id: + session_id = DirManager.get_latest_session_id(args.output_dir) # ------------------------------- setup logging ------------------------------ # diff --git a/pytest_abra/coordinator.py b/pytest_abra/coordinator.py index 74c4ea2..66e953a 100644 --- a/pytest_abra/coordinator.py +++ b/pytest_abra/coordinator.py @@ -14,7 +14,12 @@ from pytest_abra.utils import rmtree class Coordinator: def __init__( - self, env_paths_list: list[Path], output_dir: Path, session_id: str, recipes_dir: Path, timeout: int + self, + env_paths_list: list[Path], + output_dir: Path, + session_id: str, + recipes_dir: Path, + timeout: int, ) -> None: # logging out_string = "".join([e.name + "\n" for e in env_paths_list]) diff --git a/pytest_abra/dir_manager.py b/pytest_abra/dir_manager.py index 0125522..fb29e4d 100644 --- a/pytest_abra/dir_manager.py +++ b/pytest_abra/dir_manager.py @@ -1,4 +1,5 @@ from pathlib import Path +from typing import Optional from dotenv import dotenv_values @@ -76,3 +77,13 @@ class DirManager: env_file = next(self.ENV_FILES.glob(f"*{search_string}*")) config: dict[str, str] = dotenv_values(env_file) # type: ignore return config + + @staticmethod + def get_latest_session_id(output_dir: Path) -> Optional[str]: + """returns the name of the newest dir inside of output_dir""" + all_dirs = [d for d in output_dir.iterdir() if d.is_dir()] + if all_dirs: + newest_dir: Path = max(all_dirs, key=lambda x: x.stat().st_ctime) + return newest_dir.name + else: + return None diff --git a/pytest_abra/pytest_abra.py b/pytest_abra/pytest_abra.py index 21350af..33a74ae 100644 --- a/pytest_abra/pytest_abra.py +++ b/pytest_abra/pytest_abra.py @@ -23,6 +23,12 @@ def pytest_addoption(parser: Parser): parser.addoption("--timeout", action="store", type=int, default=20_000) +@pytest.fixture(autouse=True) +def set_expect_timeout(request): + TIMEOUT = request.config.getoption("--timeout") + expect.set_options(timeout=TIMEOUT) + + @pytest.fixture def context(context: BrowserContext, request) -> BrowserContext: # note: because this has the existing context fixture as an argument, it is ensured @@ -33,7 +39,6 @@ def context(context: BrowserContext, request) -> BrowserContext: context.set_default_timeout(TIMEOUT) context.set_extra_http_headers(LOCALE) - expect.set_options(timeout=TIMEOUT) return context diff --git a/recipes/nextcloud/tests_nextcloud/setup_nextcloud.py b/recipes/nextcloud/tests_nextcloud/setup_nextcloud.py index f400ce3..64c8e94 100644 --- a/recipes/nextcloud/tests_nextcloud/setup_nextcloud.py +++ b/recipes/nextcloud/tests_nextcloud/setup_nextcloud.py @@ -1,3 +1,5 @@ +import re + from playwright.sync_api import Page, expect from pytest_abra.dir_manager import DirManager @@ -16,6 +18,9 @@ def setup_nextcloud_admin_session(authentik_admin_page: Page, DIR: DirManager, U page_nextcloud = event_context.value context = page_nextcloud.context + # expect quota stats on files page to confirm successful login page_nextcloud.goto(URL.get("/apps/files")) - expect(page_nextcloud.get_by_role("link", name="Name")).to_be_visible() + quota_pattern = re.compile(r"\d*,\d .* (\d*,\d).") + expect(page_nextcloud.get_by_text(quota_pattern)).to_be_visible() + context.storage_state(path=DIR.STATES / "nextcloud_admin_state.json")