fix: filter actual assignees before dispatching agents (#82)
This commit was merged in pull request #82.
This commit is contained in:
@@ -521,8 +521,17 @@ class GiteaClient:
|
||||
return result
|
||||
|
||||
def find_agent_issues(self, repo: str, agent: str, limit: int = 50) -> list[Issue]:
|
||||
"""Find open issues assigned to a specific agent."""
|
||||
return self.list_issues(repo, state="open", assignee=agent, limit=limit)
|
||||
"""Find open issues assigned to a specific agent.
|
||||
|
||||
Gitea's assignee query can return stale or misleading results, so we
|
||||
always post-filter on the actual assignee list in the returned issue.
|
||||
"""
|
||||
issues = self.list_issues(repo, state="open", assignee=agent, limit=limit)
|
||||
agent_lower = agent.lower()
|
||||
return [
|
||||
issue for issue in issues
|
||||
if any((assignee.login or "").lower() == agent_lower for assignee in issue.assignees)
|
||||
]
|
||||
|
||||
def find_agent_pulls(self, repo: str, agent: str) -> list[PullRequest]:
|
||||
"""Find open PRs created by a specific agent."""
|
||||
|
||||
44
tests/test_gitea_assignee_filter.py
Normal file
44
tests/test_gitea_assignee_filter.py
Normal file
@@ -0,0 +1,44 @@
|
||||
from gitea_client import GiteaClient, Issue, User
|
||||
|
||||
|
||||
def _issue(number: int, assignees: list[str]) -> Issue:
|
||||
return Issue(
|
||||
number=number,
|
||||
title=f"Issue {number}",
|
||||
body="",
|
||||
state="open",
|
||||
user=User(id=1, login="Timmy"),
|
||||
assignees=[User(id=i + 10, login=name) for i, name in enumerate(assignees)],
|
||||
labels=[],
|
||||
)
|
||||
|
||||
|
||||
def test_find_agent_issues_filters_actual_assignees(monkeypatch):
|
||||
client = GiteaClient(base_url="http://example.invalid", token="test-token")
|
||||
|
||||
returned = [
|
||||
_issue(73, ["Timmy"]),
|
||||
_issue(74, ["gemini"]),
|
||||
_issue(75, ["grok", "Timmy"]),
|
||||
_issue(76, []),
|
||||
]
|
||||
|
||||
monkeypatch.setattr(client, "list_issues", lambda *args, **kwargs: returned)
|
||||
|
||||
gemini_issues = client.find_agent_issues("Timmy_Foundation/timmy-config", "gemini")
|
||||
grok_issues = client.find_agent_issues("Timmy_Foundation/timmy-config", "grok")
|
||||
kimi_issues = client.find_agent_issues("Timmy_Foundation/timmy-config", "kimi")
|
||||
|
||||
assert [issue.number for issue in gemini_issues] == [74]
|
||||
assert [issue.number for issue in grok_issues] == [75]
|
||||
assert kimi_issues == []
|
||||
|
||||
|
||||
def test_find_agent_issues_is_case_insensitive(monkeypatch):
|
||||
client = GiteaClient(base_url="http://example.invalid", token="test-token")
|
||||
returned = [_issue(80, ["Gemini"])]
|
||||
monkeypatch.setattr(client, "list_issues", lambda *args, **kwargs: returned)
|
||||
|
||||
issues = client.find_agent_issues("Timmy_Foundation/the-nexus", "gemini")
|
||||
|
||||
assert [issue.number for issue in issues] == [80]
|
||||
Reference in New Issue
Block a user