use DirManager

This commit is contained in:
Daniel 2023-11-22 14:02:29 +01:00
parent c794d330ab
commit 9da2f2526d

View file

@ -11,12 +11,9 @@ TESTS_DIR = Path("../tests")
ENV_FILES = [ ENV_FILES = [
Path("../envfiles/login.test.dev.local-it.cloud.env"), # authentik Path("../envfiles/login.test.dev.local-it.cloud.env"), # authentik
Path("../envfiles/blog.test.dev.local-it.cloud.env"), # wordpress # Path("../envfiles/blog.test.dev.local-it.cloud.env"), # wordpress
] ]
ic(ENV_FILES[0].is_file())
ic(ENV_FILES[1].is_file())
class TestRunner(Protocol): class TestRunner(Protocol):
def __init__(self, dotenv_path: Path): def __init__(self, dotenv_path: Path):
@ -26,16 +23,28 @@ class TestRunner(Protocol):
... ...
RUNNER_DICT: dict[str, type[TestRunner]] = {"wordpress": RunnerWordpress} # Register all runners here. A .env file with TYPE=authentik will be ran with RunnerAuthentik
RUNNER_DICT: dict[str, type[TestRunner]] = {
"authentik": RunnerAuthentik,
"wordpress": RunnerWordpress,
}
class Wrapper: class Wrapper:
def __init__(self, env_files: list[Path]): def __init__(self, env_files: list[Path]):
self.env_files = env_files self.env_files = env_files
self.setup_test_dir()
self.check_env_files(self.env_files) self.check_env_files(self.env_files)
session_id = self.get_session_id()
self.setup_test(session_id)
self.run_test()
def setup_test(self, session_id: str):
self.dir_manager = DirManager(root_tests_dir=TESTS_DIR, session_id=session_id)
self.dir_manager.create_all_dirs()
def run_test(self):
self.runners: list[TestRunner] = self.load_runners(self.env_files) self.runners: list[TestRunner] = self.load_runners(self.env_files)
self.run_tests(self.runners) self.run_tests(self.runners)
@ -57,42 +66,47 @@ class Wrapper:
for env_file in env_files: for env_file in env_files:
assert env_file.is_file() assert env_file.is_file()
def setup_test_dir(self):
session_id = self.get_session_id()
test_dir = self.create_test_dir(session_id)
self.create_records_dir(test_dir)
self.create_states_dir(test_dir)
self.create_results_dir(test_dir)
@staticmethod @staticmethod
def get_session_id() -> str: def get_session_id() -> str:
current_datetime = datetime.now() current_datetime = datetime.now()
return current_datetime.strftime("%Y-%m-%d-%H-%M") return current_datetime.strftime("%Y-%m-%d-%H-%M-%S")
class DirManager:
def __init__(self, root_tests_dir: Path, session_id: str):
# root test dir
self.root_tests_dir = root_tests_dir
self.session_id = session_id
self.get_all_dirs()
def get_all_dirs(self):
self.session_dir = self.root_tests_dir / f"test-{self.session_id}"
self.session_sub_dirs = self.get_subdirs(self.session_dir)
def create_all_dirs(self):
self.create_dirs(self.root_tests_dir, exist_ok=True)
self.create_dirs(self.session_dir)
self.create_dirs(self.session_sub_dirs)
def get_subdirs(self, session_dir: Path):
return {
"records": session_dir / Path("records"),
"states": session_dir / Path("states"),
"results": session_dir / Path("results"),
}
@staticmethod @staticmethod
def create_test_dir(session_id: str) -> Path: def create_dirs(dirs: Path | list[Path] | dict[str, Path], exist_ok=False):
TESTS_DIR.mkdir(exist_ok=True) match dirs:
test_dir = TESTS_DIR / Path(f"test_{session_id}") case Path():
test_dir.mkdir() dirs.mkdir(exist_ok=exist_ok)
return test_dir case list():
for d in dirs:
@staticmethod d.mkdir(exist_ok=exist_ok)
def create_records_dir(test_dir: Path) -> Path: case dict():
records = test_dir / Path("records") for d in dirs.values():
records.mkdir() d.mkdir(exist_ok=exist_ok)
return records
@staticmethod
def create_states_dir(test_dir: Path) -> Path:
states = test_dir / Path("states")
states.mkdir()
return states
@staticmethod
def create_results_dir(test_dir: Path) -> Path:
results = test_dir / Path("results")
results.mkdir()
return results
if __name__ == "__main__": if __name__ == "__main__":