e2e_tests/tests/test_cli_full_integration.py
2023-12-15 16:11:07 +01:00

81 lines
2.5 KiB
Python

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