Skip to content

Commit bb29306

Browse files
committed
Fixes: #10 Change logic for add/remove awaiting reviews label
1 parent 19c6b3f commit bb29306

File tree

2 files changed

+65
-3
lines changed

2 files changed

+65
-3
lines changed

algorithms_keeper/pull_requests.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,15 @@ async def update_pr_label_for_review(
261261
label=Label.CHANGES_REQUESTED,
262262
pr_or_issue=pull_request,
263263
)
264+
# If a pull request is directly approved without asking for any changes,
265+
# remove the `awaiting reviews` label as well if present. (Issue #10)
266+
elif Label.AWAITING_REVIEW in pr_labels:
267+
await utils.remove_label_from_pr_or_issue(
268+
gh,
269+
installation_id,
270+
label=Label.AWAITING_REVIEW,
271+
pr_or_issue=pull_request,
272+
)
264273

265274

266275
@router.register("pull_request", action="labeled")
@@ -297,9 +306,9 @@ async def pr_awaiting_review_label(
297306
label=Label.AWAITING_REVIEW,
298307
)
299308
else:
300-
# This label is removed only when a PR is approved, so we don't want to add the
301-
# `awaiting_review` label.
302-
if label == Label.CHANGES_REQUESTED:
309+
# These labels are removed only when a PR is approved, so we don't want to add
310+
# the `awaiting_review` label back again. (Issue #10)
311+
if label == Label.CHANGES_REQUESTED or label == Label.AWAITING_REVIEW:
303312
return None
304313
# Add label only if none of the PR_NOT_READY_LABELS are present in `pr_labels`.
305314
if all(label not in pr_labels for label in PR_NOT_READY_LABELS):

tests/test_pull_requests.py

+53
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,37 @@ async def test_pr_review_approved(labels):
983983
assert gh.post_data == []
984984

985985

986+
@pytest.mark.asyncio
987+
@pytest.mark.parametrize("labels", ([], [{"name": Label.AWAITING_REVIEW}]))
988+
async def test_pr_review_approved_without_any_changes(labels):
989+
# Issue #10
990+
remove_label = urllib.parse.quote(Label.AWAITING_REVIEW)
991+
data = {
992+
"action": "submitted",
993+
"review": {
994+
"state": "approved",
995+
"author_association": "member",
996+
},
997+
"pull_request": {
998+
"labels": labels,
999+
"issue_url": issue_url,
1000+
},
1001+
"installation": {"id": MOCK_INSTALLATION_ID},
1002+
}
1003+
event = sansio.Event(data, event="pull_request_review", delivery_id="1")
1004+
delete = {f"{labels_url}/{remove_label}": {}}
1005+
gh = MockGitHubAPI(delete=delete)
1006+
await pull_requests.router.dispatch(event, gh)
1007+
if labels:
1008+
assert f"{labels_url}/{remove_label}" in gh.delete_url
1009+
assert gh.delete_data == [{}]
1010+
else:
1011+
assert gh.delete_url == []
1012+
assert gh.delete_data == []
1013+
assert gh.post_url == []
1014+
assert gh.post_data == []
1015+
1016+
9861017
# Test conditions for when to add and remove `Label.AWAITING_REVIEW` label:
9871018
# NOTE: All conditions assumes the PR has been already been labeled AWAITING_REVIEW when
9881019
# it was opened.
@@ -1126,3 +1157,25 @@ async def test_changes_requested_label_removed():
11261157
assert gh.post_data == []
11271158
assert gh.delete_url == []
11281159
assert gh.delete_data == []
1160+
1161+
1162+
@pytest.mark.asyncio
1163+
async def test_awaiting_review_label_removed():
1164+
# Issue #10
1165+
data = {
1166+
"action": "unlabeled",
1167+
"pull_request": {
1168+
"labels": [],
1169+
"issue_url": issue_url,
1170+
},
1171+
"label": {"name": Label.AWAITING_REVIEW},
1172+
"installation": {"id": MOCK_INSTALLATION_ID},
1173+
}
1174+
event = sansio.Event(data, event="pull_request", delivery_id="1")
1175+
gh = MockGitHubAPI()
1176+
await pull_requests.router.dispatch(event, gh)
1177+
# No label is added or removed.
1178+
assert gh.post_url == []
1179+
assert gh.post_data == []
1180+
assert gh.delete_url == []
1181+
assert gh.delete_data == []

0 commit comments

Comments
 (0)