new test framework #1

Merged
dan merged 47 commits from wip-new-framework into dev 2023-11-22 21:40:14 +01:00
Showing only changes of commit 9da2f2526d - Show all commits

View file

@ -11,12 +11,9 @@ TESTS_DIR = Path("../tests")
ENV_FILES = [
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):
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:
def __init__(self, env_files: list[Path]):
self.env_files = env_files
self.setup_test_dir()
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.run_tests(self.runners)
@ -57,42 +66,47 @@ class Wrapper:
for env_file in env_files:
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
def get_session_id() -> str:
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
def create_test_dir(session_id: str) -> Path:
TESTS_DIR.mkdir(exist_ok=True)
test_dir = TESTS_DIR / Path(f"test_{session_id}")
test_dir.mkdir()
return test_dir
@staticmethod
def create_records_dir(test_dir: Path) -> Path:
records = test_dir / Path("records")
records.mkdir()
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
def create_dirs(dirs: Path | list[Path] | dict[str, Path], exist_ok=False):
match dirs:
case Path():
dirs.mkdir(exist_ok=exist_ok)
case list():
for d in dirs:
d.mkdir(exist_ok=exist_ok)
case dict():
for d in dirs.values():
d.mkdir(exist_ok=exist_ok)
if __name__ == "__main__":