fix(ci): scope OpenAPI evidence to required tests
This commit is contained in:
@@ -90,26 +90,52 @@ def playwright_verdict(report: dict[str, Any], required_titles: list[str]) -> tu
|
||||
return "fail", counts
|
||||
tests = list(iter_tests(report))
|
||||
if not tests:
|
||||
if required_titles:
|
||||
counts["failed"] = len(set(required_titles))
|
||||
return "fail", counts
|
||||
counts["not_run"] = 1
|
||||
return "not_run", counts
|
||||
required = {title: False for title in required_titles}
|
||||
for test, title in tests:
|
||||
if required and title not in required:
|
||||
continue
|
||||
status = test.get("status")
|
||||
results = test.get("results") if isinstance(test.get("results"), list) else []
|
||||
result_statuses = [result.get("status") for result in results if isinstance(result, dict)]
|
||||
retries = [result.get("retry", 0) for result in results if isinstance(result, dict)]
|
||||
if len(result_statuses) != len(results):
|
||||
results = test.get("results")
|
||||
if not isinstance(results, list):
|
||||
counts["not_run"] += 1
|
||||
continue
|
||||
if status == "flaky" or any(isinstance(retry, int) and retry > 0 for retry in retries):
|
||||
counts["flaky"] += 1
|
||||
result_statuses: list[Any] = []
|
||||
retries: list[int] = []
|
||||
malformed = False
|
||||
for result in results:
|
||||
if not isinstance(result, dict):
|
||||
malformed = True
|
||||
break
|
||||
result_status = result.get("status")
|
||||
retry = result.get("retry", 0)
|
||||
if result_status not in ("passed", "failed", "timedOut", "skipped", "interrupted") \
|
||||
or type(retry) is not int or retry < 0:
|
||||
malformed = True
|
||||
break
|
||||
result_statuses.append(result_status)
|
||||
retries.append(retry)
|
||||
if malformed:
|
||||
counts["not_run"] += 1
|
||||
continue
|
||||
final_status = result_statuses[-1] if result_statuses else None
|
||||
if status in ("unexpected", "failed", "timedOut", "interrupted") \
|
||||
or final_status in ("failed", "timedOut", "interrupted"):
|
||||
counts["failed"] += 1
|
||||
elif status == "flaky":
|
||||
if final_status == "passed" and any(retry > 0 for retry in retries):
|
||||
counts["flaky"] += 1
|
||||
else:
|
||||
counts["not_run"] += 1
|
||||
elif status == "skipped" or (not results and status in ("skipped", "expected")):
|
||||
counts["skipped"] += 1
|
||||
elif status in ("unexpected", "failed", "timedOut", "interrupted") or any(
|
||||
result_status in ("failed", "timedOut", "interrupted") for result_status in result_statuses
|
||||
):
|
||||
counts["failed"] += 1
|
||||
elif results and all(result_status == "passed" for result_status in result_statuses):
|
||||
elif any(retry > 0 for retry in retries):
|
||||
counts["flaky"] += 1
|
||||
elif status == "expected" and results and all(result_status == "passed" for result_status in result_statuses):
|
||||
counts["passed"] += 1
|
||||
if title in required:
|
||||
required[title] = True
|
||||
|
||||
Reference in New Issue
Block a user