diff --git a/src/coordinator.py b/src/coordinator.py index 509aa3e..676c490 100644 --- a/src/coordinator.py +++ b/src/coordinator.py @@ -39,14 +39,17 @@ class Coordinator: def _load_runners(self, env_files: list[EnvFile]) -> list[Runner]: """Creates an instance of the correct Runner class for each given env file""" - runners = [] + runners: list[Runner] = [] for env_file in env_files: RunnerClass = RUNNER_DICT[env_file.config["TYPE"]] - runners.append( - RunnerClass( - dotenv_path=env_file.env_path, output_dir=self.DIR.output_dir, session_id=self.DIR.session_id - ) + dependency_classes: list[type[Runner]] = [] + for dependency in RunnerClass.dependencies: + dependency_classes.append(RUNNER_DICT[dependency]) + runner_instance = RunnerClass( + dotenv_path=env_file.env_path, output_dir=self.DIR.output_dir, session_id=self.DIR.session_id ) + runner_instance._dependency_runners = dependency_classes + runners.append(runner_instance) return runners def combine_html(self) -> None: diff --git a/src/env_manager.py b/src/env_manager.py index cfc81fb..d53f742 100644 --- a/src/env_manager.py +++ b/src/env_manager.py @@ -6,6 +6,7 @@ from dotenv import dotenv_values from src.dir_manager import DirManager from src.runner_dict import RUNNER_DICT +from src.runner_manager import RunnerManager class EnvFile(NamedTuple): @@ -25,6 +26,7 @@ class DependencyRule(NamedTuple): class EnvManager: def __init__(self, env_paths_list: list[Path]): self.env_files: list[EnvFile] = self._get_env_files(env_paths_list) + self.runner_manager = RunnerManager(self.env_files) self.dependency_rules: list[DependencyRule] = self._get_dependency_rules(self.env_files) self.env_files = self.sort_env_files_by_rule(self.env_files, self.dependency_rules) @@ -46,7 +48,7 @@ class EnvManager: for env_file in env_files: child_runner_class = RUNNER_DICT[env_file.env_type] for dependency in child_runner_class.dependencies: - dependency_rule = DependencyRule(child=child_runner_class.name, dependency=dependency.name) + dependency_rule = DependencyRule(child=child_runner_class.name, dependency=dependency) dependency_rules.append(dependency_rule) return dependency_rules diff --git a/src/runner.py b/src/runner.py index a2b3f82..3bdd085 100644 --- a/src/runner.py +++ b/src/runner.py @@ -23,6 +23,7 @@ class Runner: tests: list[Test] = [] cleanups: list[Test] = [] dependencies: list[str] = [] + _dependency_runners: list[type["Runner"]] = [] def __init__(self, dotenv_path: Path, output_dir: Path, session_id: str): self.dotenv_path = dotenv_path @@ -167,9 +168,9 @@ class Runner: passed_tests = [r.name for r in self.DIRS.RESULTS.glob("*") if "passed" in r.name] results = [] - for dependencie_runner in self.dependencies: - for setup_name in dependencie_runner.setups: - dependencie_identifier = self.combine_names(dependencie_runner.name, setup_name.test_file) + for dependency_runner in self._dependency_runners: + for setup_name in dependency_runner.setups: + dependencie_identifier = self.combine_names(dependency_runner.name, setup_name.test_file) results.append(any(dependencie_identifier in f for f in passed_tests)) return all(results)