import shutil import subprocess from pathlib import Path import pytest from pytest_abra import DirManager from pytest_abra.utils import load_json_to_environ @pytest.fixture(scope="session") def tmp_recipes(tmp_path_factory: pytest.TempPathFactory) -> Path: tmp_recipes_target = tmp_path_factory.mktemp("recipes") recipes_dir_source = Path("recipes") shutil.copytree(recipes_dir_source, tmp_recipes_target, dirs_exist_ok=True) return tmp_recipes_target @pytest.fixture(scope="session") def tmp_output(tmp_path_factory: pytest.TempPathFactory) -> Path: return tmp_path_factory.mktemp("output") @pytest.mark.slow def test_abratest_cli_full_integration(tmp_output: Path, tmp_recipes: Path): """Full integration test of abratest against the dev instance. Recipes dir not in path this test is hard to debug as the output dir is in tmp. If required, try pytest -s or find the tmp dir to look into test outputs""" # --------------------- load credentials to env variables -------------------- # cred_file = Path("credentials.json") load_json_to_environ(cred_file) # --------------------------------- env files -------------------------------- # ENV_FILES_ROOT = Path("./envfiles").resolve() ENV_FILES = [ ENV_FILES_ROOT / "login.test.dev.local-it.cloud.env", # authentik ENV_FILES_ROOT / "blog.test.dev.local-it.cloud.env", # wordpress ENV_FILES_ROOT / "files.test.dev.local-it.cloud.env", # nextcloud ] ENV_PATHS = ";".join([x.as_posix() for x in ENV_FILES]) # ----------------------------------- dirs ----------------------------------- # RECIPES_DIR = tmp_recipes.resolve() # RECIPES_DIR = Path("recipes") OUTPUT_DIR = tmp_output.resolve() # ------------------------------------ run ----------------------------------- # result = subprocess.run( [ "abratest", "--env_paths", ENV_PATHS, "--recipes_dir", RECIPES_DIR, "--output_dir", OUTPUT_DIR, "--session_id", "abc", ] ) assert result.returncode == 0 @pytest.mark.slow def test_full_integration_results(tmp_output: Path): OUTPUT_DIR = tmp_output.resolve() DIR = DirManager(output_dir=OUTPUT_DIR, session_id="abc") all_files = [f.name for f in DIR.STATUS.rglob("*")] passed_files = [f.name for f in DIR.STATUS.rglob("passed-*")] failed_files = set(all_files) - set(passed_files) assert len(all_files) > 0 assert not failed_files, failed_files