91 lines
2.9 KiB
Python
91 lines
2.9 KiB
Python
"""Regression tests for pull-request exact-head validation fallback."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from uuid import UUID
|
|
|
|
import httpx
|
|
|
|
from packages.connector_kit import (
|
|
GiteaClient,
|
|
GiteaSettings,
|
|
RegisteredRepository,
|
|
StaticTokenProvider,
|
|
)
|
|
|
|
HEAD_SHA = "e" * 40
|
|
|
|
|
|
def _client(statuses: list[dict[str, str]]) -> tuple[GiteaClient, RegisteredRepository]:
|
|
def handler(request: httpx.Request) -> httpx.Response:
|
|
if request.url.path.endswith("/actions/runs"):
|
|
return httpx.Response(200, json={"workflow_runs": []}, request=request)
|
|
if "/branches/" in request.url.path:
|
|
return httpx.Response(
|
|
200,
|
|
json={"name": "codex/workflows", "commit": {"id": HEAD_SHA}},
|
|
request=request,
|
|
)
|
|
if request.url.path.endswith(f"/commits/{HEAD_SHA}/statuses"):
|
|
return httpx.Response(200, json=statuses, request=request)
|
|
return httpx.Response(404, json={"message": "not found"}, request=request)
|
|
|
|
settings = GiteaSettings(
|
|
base_url="https://gitea.example",
|
|
token_reference="docker-secret://gitea-token", # noqa: S106
|
|
)
|
|
client = GiteaClient(
|
|
settings,
|
|
StaticTokenProvider("fixture-token"),
|
|
transport=httpx.MockTransport(handler),
|
|
)
|
|
repository = RegisteredRepository(
|
|
repository_ref="hub",
|
|
project_id=UUID("11111111-1111-1111-1111-111111111111"),
|
|
owner="acme",
|
|
name="hub",
|
|
source_uri="itworx-git://hub/hub",
|
|
private=True,
|
|
)
|
|
return client, repository
|
|
|
|
|
|
def test_exact_head_status_fallback_treats_skipped_contexts_as_neutral() -> None:
|
|
client, repository = _client(
|
|
[
|
|
{"context": "required", "status": "success", "created_at": "2026-08-27T04:00:02Z"},
|
|
{
|
|
"context": "not-applicable",
|
|
"status": "skipped",
|
|
"created_at": "2026-08-27T04:00:01Z",
|
|
},
|
|
]
|
|
)
|
|
try:
|
|
runs = client.action_runs(repository, branch="codex/workflows", page=1, limit=25)
|
|
finally:
|
|
client.close()
|
|
|
|
assert len(runs) == 1
|
|
assert runs[0]["head_sha"] == HEAD_SHA
|
|
assert runs[0]["conclusion"] == "success"
|
|
assert runs[0]["validation_evidence"] == "commit-statuses"
|
|
|
|
|
|
def test_exact_head_status_fallback_rejects_pending_or_failed_contexts() -> None:
|
|
for blocked_state in ("pending", "failure"):
|
|
client, repository = _client(
|
|
[
|
|
{"context": "required", "status": "success", "created_at": "2026-08-27T04:00:02Z"},
|
|
{
|
|
"context": "blocked",
|
|
"status": blocked_state,
|
|
"created_at": "2026-08-27T04:00:01Z",
|
|
},
|
|
]
|
|
)
|
|
try:
|
|
assert client.action_runs(repository, branch="codex/workflows", page=1, limit=25) == []
|
|
finally:
|
|
client.close()
|