mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-10-02 14:23:19 +08:00
[ci][issue] Fix external contributor assignment
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user