from __future__ import annotations import json from pathlib import Path from engine.devops_agent.providers.gitea import GiteaProvider class FakeTransport: def __init__(self) -> None: self.calls: list[dict[str, object]] = [] def __call__( self, *, method: str, url: str, headers: dict[str, str], body: dict[str, object] | None, ) -> dict[str, object]: self.calls.append( { "method": method, "url": url, "headers": headers, "body": body, } ) if url.endswith("/comments"): return {"id": 999, "body": body["body"] if body else ""} return json.loads(Path("tests/fixtures/gitea/issue.json").read_text(encoding="utf-8")) def test_gitea_provider_fetches_issue() -> None: transport = FakeTransport() provider = GiteaProvider( base_url="https://fun-md.com", token="test-token", transport=transport, ) issue = provider.get_issue("Fun_MD/devops-skills", 48) assert issue["number"] == 48 assert transport.calls[0]["method"] == "GET" assert str(transport.calls[0]["url"]).endswith("/api/v1/repos/Fun_MD/devops-skills/issues/48") def test_gitea_provider_posts_issue_comment() -> None: transport = FakeTransport() provider = GiteaProvider( base_url="https://fun-md.com", token="test-token", transport=transport, ) response = provider.post_issue_comment("Fun_MD/devops-skills", 48, "Evidence posted") assert response["id"] == 999 assert transport.calls[0]["method"] == "POST" assert transport.calls[0]["body"] == {"body": "Evidence posted"} def test_gitea_provider_parses_comment_event() -> None: provider = GiteaProvider(base_url="https://fun-md.com", token="test-token") payload = json.loads(Path("tests/fixtures/gitea/comment_event.json").read_text(encoding="utf-8")) event = provider.parse_issue_comment_event(payload) assert event["repo"] == "Fun_MD/devops-skills" assert event["issue_number"] == 48 assert "@devops-agent" in event["comment_body"]