Skip to content

Commit

Permalink
Write more tests and improve coverage (GH-59)
Browse files Browse the repository at this point in the history
  • Loading branch information
Mariatta authored Feb 18, 2018
1 parent e835ab7 commit bb13588
Show file tree
Hide file tree
Showing 10 changed files with 667 additions and 35 deletions.
7 changes: 5 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@ python:
# - 3.7-dev
# - nightly

before_install:
- python3 -m pip install coverage
install:
- python3 -m pip install -U -r dev-requirements.txt
script:
- python3 -m pytest tests/

- python3 -m coverage run --branch -m pytest tests/
after_success:
- bash <(curl -s https://codecov.io/bash)
File renamed without changes.
2 changes: 1 addition & 1 deletion backport/backport_pr.py → miss_islington/backport_pr.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ async def backport_pr(event, gh, *args, **kwargs):
message = f"{thanks_to}. I'm working now to backport this PR to: {', '.join(branches)}."\
f"\n🐍🍒⛏🤖 {easter_egg}"

util.comment_on_pr(issue_number, message)
await util.leave_comment(gh, issue_number, message)

sorted_branches = sorted(branches,
reverse=True,
Expand Down
7 changes: 4 additions & 3 deletions backport/delete_branch.py → miss_islington/delete_branch.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@ async def delete_branch(event, gh, *args, **kwargs):
issue_number = event.data['pull_request']['number']
merged_by = event.data['pull_request']['merged_by']['login']
if merged_by != "miss-islington":
util.comment_on_pr(issue_number, f"Thanks, @{merged_by}!")
await util.leave_comment(gh, issue_number, f"Thanks, @{merged_by}!")
else:
util.comment_on_pr(issue_number, "Thanks!")
await util.leave_comment(gh, issue_number, "Thanks!")

branch_name = event.data['pull_request']['head']['ref']
util.delete_branch(branch_name)
url = f"/repos/miss-islington/cpython/git/refs/heads/{branch_name}"
await gh.delete(url)

12 changes: 2 additions & 10 deletions backport/status_change.py → miss_islington/status_change.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ async def check_ci_status_and_approval(gh, sha, leave_comment=False):
pr_author, committer)
emoji = "✅" if result['state'] == "success" else "❌"

await comment_on_pr(gh,
await util.leave_comment(gh,
pr_number=pr_number,
message=f"{participants}: Backport status check is done, and it's a {result['state']} {emoji} .")

Expand Down Expand Up @@ -91,12 +91,4 @@ async def merge_pr(gh, pr_number, sha):
break


async def comment_on_pr(gh, pr_number, message):
"""
Leave a comment on a PR/Issue
"""
issue_comment_url = f"/repos/python/cpython/issues/{pr_number}/comments"
data = {
"body": message,
}
await gh.post(issue_comment_url, data=data)

File renamed without changes.
27 changes: 10 additions & 17 deletions backport/util.py → miss_islington/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,15 @@ def comment_on_pr(issue_number, message):
print(response.text)


def user_login(item):
return item["user"]["login"]
async def leave_comment(gh, pr_number, message):
"""
Leave a comment on a PR/Issue
"""
issue_comment_url = f"/repos/python/cpython/issues/{pr_number}/comments"
data = {
"body": message,
}
await gh.post(issue_comment_url, data=data)


def is_cpython_repo():
Expand All @@ -50,21 +57,6 @@ def get_participants(created_by, merged_by):
return participants


def delete_branch(branch_name):
"""
Delete the branch on GitHub
"""
request_headers = sansio.create_headers(
"miss-islington",
oauth_token=os.environ.get('GH_AUTH'))
url = f"https://api.github.com/repos/miss-islington/cpython/git/refs/heads/{branch_name}"
response = requests.delete(url, headers=request_headers)
if response.status_code == 204:
print(f"{branch_name} branch deleted.")
else:
print(f"Couldn't delete the branch {branch_name}")


def normalize_title(title, body):
"""Normalize the title if it spills over into the PR's body."""
if not (title.endswith('…') and body.startswith('…')):
Expand All @@ -73,6 +65,7 @@ def normalize_title(title, body):
# Being paranoid in case \r\n is used.
return title[:-1] + body[1:].partition('\r\n')[0]


# Copied over from https://github.com/python/bedevere
async def is_core_dev(gh, username):
"""Check if the user is a CPython core developer."""
Expand Down
145 changes: 145 additions & 0 deletions tests/test_delete_branch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
from gidgethub import sansio

from miss_islington import delete_branch


class FakeGH:

def __init__(self):
self.post_data = None

async def post(self, url, *, data):
self.post_url = url
self.post_data = data

async def delete(self, url):
self.delete_url = url


async def test_branch_deleted_when_pr_merged():
data = {
"action": "closed",
"pull_request": {
"number": 5722,
"user": {
"login": "miss-islington",
},
"merged": True,
"merged_by": {
"login": "miss-islington",
},
"head": {
"ref": "backport-17ab8f0-3.7",
}
}
}
event = sansio.Event(data, event='pull_request',
delivery_id='1')

gh = FakeGH()
await delete_branch.router.dispatch(event, gh)
assert len(gh.post_data["body"]) is not None # leaves a comment
assert gh.delete_url == f"/repos/miss-islington/cpython/git/refs/heads/{data['pull_request']['head']['ref']}"


async def test_branch_deleted_and_thank_committer():
data = {
"action": "closed",
"pull_request": {
"number": 5722,
"user": {
"login": "miss-islington",
},
"merged": True,
"merged_by": {
"login": "Mariatta",
},
"head": {
"ref": "backport-17ab8f0-3.7",
}
}
}
event = sansio.Event(data, event='pull_request',
delivery_id='1')

gh = FakeGH()
await delete_branch.router.dispatch(event, gh)
assert gh.post_data["body"] == 'Thanks, @Mariatta!' # leaves a comment
assert gh.delete_url == f"/repos/miss-islington/cpython/git/refs/heads/{data['pull_request']['head']['ref']}"


async def test_branch_deleted_and_thanks():
data = {
"action": "closed",
"pull_request": {
"number": 5722,
"user": {
"login": "miss-islington",
},
"merged": True,
"merged_by": {
"login": "miss-islington",
},
"head": {
"ref": "backport-17ab8f0-3.7",
}
}
}
event = sansio.Event(data, event='pull_request',
delivery_id='1')

gh = FakeGH()
await delete_branch.router.dispatch(event, gh)
assert gh.post_data["body"] == "Thanks!" # leaves a comment
assert gh.delete_url == f"/repos/miss-islington/cpython/git/refs/heads/{data['pull_request']['head']['ref']}"


async def test_branch_deleted_when_pr_closed():
data = {
"action": "closed",
"pull_request": {
"number": 5722,
"user": {
"login": "miss-islington",
},
"merged": False,
"merged_by": {
"login": None,
},
"head": {
"ref": "backport-17ab8f0-3.7",
}
}
}
event = sansio.Event(data, event='pull_request',
delivery_id='1')

gh = FakeGH()
await delete_branch.router.dispatch(event, gh)
assert gh.post_data is None # does not leave a comment
assert gh.delete_url == f"/repos/miss-islington/cpython/git/refs/heads/{data['pull_request']['head']['ref']}"


async def test_ignore_non_miss_islingtons_prs():
data = {
"action": "closed",
"pull_request": {
"number": 5722,
"user": {
"login": "Mariatta",
},
"merged": True,
"merged_by": {
"login": "Mariatta",
},
"head": {
"ref": "backport-17ab8f0-3.7",
}
}
}
event = sansio.Event(data, event='pull_request',
delivery_id='1')
gh = FakeGH()
await delete_branch.router.dispatch(event, gh)
assert gh.post_data is None # does not leave a comment
assert not hasattr(gh, 'delete_url')
Loading

0 comments on commit bb13588

Please sign in to comment.