[ci][issue] Fix external contributor assignment

This commit is contained in:
CYFS
2026-08-12 11:52:50 +08:00
committed by Rbb666
parent e59103373e
commit 9a12b2a7b9
2 changed files with 35 additions and 6 deletions
+8 -4
View File
@@ -228,12 +228,14 @@ class GitHubClient:
return {}
raise
def can_assign(self, repository, actor):
def can_assign(self, repository, issue_number, actor):
try:
self.request(
"GET",
"{}/assignees/{}".format(
self._repository_path(repository), quote(actor, safe="")
"{}/issues/{}/assignees/{}".format(
self._repository_path(repository),
issue_number,
quote(actor, safe=""),
),
expected=(204,),
)
@@ -462,7 +464,9 @@ def handle_claim(client, context, comments):
post_result(client, context, rejection_message("claim", latest))
return "race_{}".format(latest.reason)
assignable = client.can_assign(context.repository, context.actor)
assignable = client.can_assign(
context.repository, context.issue_number, context.actor
)
if assignable:
client.add_assignees(context.repository, context.issue_number, (context.actor,))
confirmed_issue = client.get_issue(context.repository, context.issue_number)
+27 -2
View File
@@ -75,8 +75,8 @@ class FakeClient:
self.calls.append(("get_permission", repository, actor))
return self.permission
def can_assign(self, repository, actor):
self.calls.append(("can_assign", repository, actor))
def can_assign(self, repository, issue_number, actor):
self.calls.append(("can_assign", repository, issue_number, actor))
return self.assignable
def get_label(self, repository, label):
@@ -91,6 +91,28 @@ class FakeClient:
class ClientTests(unittest.TestCase):
def test_assignability_is_checked_for_specific_issue(self):
class RecordingClient(issue_claim.GitHubClient):
def __init__(self):
self.call = None
def request(self, *args, **kwargs):
self.call = (args, kwargs)
client = RecordingClient()
self.assertTrue(
client.can_assign("RT-Thread/rt-thread", 42, "external-user")
)
self.assertEqual(
client.call[0],
(
"GET",
"/repos/RT-Thread/rt-thread/issues/42/assignees/external-user",
),
)
self.assertEqual(client.call[1]["expected"], (204,))
def test_comment_creation_disables_automatic_retries(self):
class RecordingClient(issue_claim.GitHubClient):
def __init__(self):
@@ -254,6 +276,9 @@ class HandlerTests(unittest.TestCase):
result = issue_claim.handle_event(make_event(), client)
self.assertEqual(result, "claimed")
self.assertIn(
("can_assign", "RT-Thread/rt-thread", 42, "alice"), client.calls
)
self.assertIn(
("add_assignees", "RT-Thread/rt-thread", 42, ("alice",)),
client.calls,