35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
|
|
from tests.pipeline_setup_v4.core.artifacts import ArtifactLayout, ArtifactWriter
|
|
from tests.pipeline_setup_v4.core.case_loader import CaseDirectoryLoader
|
|
from tests.pipeline_setup_v4.core.models import V4CaseResult
|
|
from tests.pipeline_setup_v4.core.validators import CaseValidator
|
|
from tests.pipeline_setup_v4.executors.registry import ExecutorRegistry
|
|
|
|
|
|
class V4Runner:
|
|
def __init__(self, cases_dir: Path, *, run_name: str) -> None:
|
|
self._cases_dir = cases_dir
|
|
self._validator = CaseValidator()
|
|
self._executors = ExecutorRegistry()
|
|
self._writer = ArtifactWriter(ArtifactLayout(run_name=run_name, started_at=datetime.now()))
|
|
|
|
def run(self) -> tuple[list[V4CaseResult], list[Path]]:
|
|
results: list[V4CaseResult] = []
|
|
for case in CaseDirectoryLoader().load(self._cases_dir):
|
|
payload = self._executors.execute(case.component, case)
|
|
mismatches = self._validator.validate(case, payload.actual)
|
|
result = V4CaseResult(
|
|
case=case,
|
|
actual=payload.actual,
|
|
details=payload.details,
|
|
passed=not mismatches,
|
|
mismatches=mismatches,
|
|
)
|
|
self._writer.write_case(result)
|
|
results.append(result)
|
|
return results, self._writer.write_summaries(results)
|