[WIP] Add new automated test framework (#1)

Co-authored-by: Daniel <d.brummerloh@gmail.com>
Co-committed-by: Daniel <d.brummerloh@gmail.com>
This commit is contained in:
Daniel 2023-11-22 21:40:13 +01:00 committed by dan
parent 859bd57006
commit 97ed87c79f
31 changed files with 769 additions and 6 deletions

76
src/main.py Normal file
View file

@ -0,0 +1,76 @@
from datetime import datetime
from pathlib import Path
from typing import Protocol
from dirmanager import DirManager
from dotenv import dotenv_values
from icecream import ic
from tests_authentik.runner_authentik import RunnerAuthentik
from tests_wordpress.runner_wordpress import RunnerWordpress
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
]
class TestRunner(Protocol):
def __init__(self, dotenv_path: Path, tests_dir: Path, session_id: str):
...
def run_tests(self):
...
# 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], session_id: str):
self.env_files = env_files
self.check_env_files(self.env_files)
self.session_id = session_id
def setup_test(self):
self.dir_manager = DirManager(tests_dir=TESTS_DIR, session_id=self.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)
def load_runners(self, env_files: list[Path]) -> list[TestRunner]:
runners = []
for env_file in env_files:
config: dict[str, str] = dotenv_values(env_file)
RunnerClass = RUNNER_DICT[config["TYPE"]]
runners.append(RunnerClass(dotenv_path=env_file, tests_dir=TESTS_DIR, session_id=self.session_id))
return runners
def run_tests(self, runners: list[TestRunner]):
for runner in runners:
runner.run_tests()
@staticmethod
def check_env_files(env_files: list[Path]):
"""checks if file exist for every file in list"""
for env_file in env_files:
assert env_file.is_file()
@staticmethod
def get_session_id() -> str:
current_datetime = datetime.now()
return current_datetime.strftime("%Y-%m-%d-%H-%M-%S")
if __name__ == "__main__":
session_id = Wrapper.get_session_id()
wrapper = Wrapper(ENV_FILES, session_id=session_id)
wrapper.setup_test()
wrapper.run_test()