Skip to content

Commit 80c6341

Browse files
authored
Merge pull request #35 from actualbudget/matiss/skip-autoassign-for-pr-author
Skip auto-assign when commenter/reviewer is the PR author
2 parents 666abc3 + 4702ab1 commit 80c6341

File tree

9 files changed

+133
-2
lines changed

9 files changed

+133
-2
lines changed

src/handlers/issueComment.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ export default (app: Probot) => {
1515
context.payload.issue.number,
1616
);
1717

18+
// Don't auto-assign if the commenter is the PR author
19+
const prAuthor = pr.data.user?.login;
20+
if (commenter === prAuthor) return;
21+
1822
const isMember = await pr.isOrgMember(commenter);
1923
if (!isMember) return;
2024

src/handlers/pullRequestReview.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ export default (app: Probot) => {
66
app.on(['pull_request_review'], async context => {
77
const pr = new PullRequest(context);
88

9-
// Auto-assign reviewer if they are an org member
9+
// Auto-assign reviewer if they are an org member and not the PR author
1010
const reviewer = context.payload.review.user?.login;
11-
if (reviewer) {
11+
const prAuthor = pr.data.user?.login;
12+
if (reviewer && reviewer !== prAuthor) {
1213
const isMember = await pr.isOrgMember(reviewer);
1314
if (isMember) {
1415
try {

src/handlers/pullRequestReviewComment.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ export default (app: Probot) => {
99

1010
const pr = new PullRequest(context);
1111

12+
// Don't auto-assign if the commenter is the PR author
13+
const prAuthor = pr.data.user?.login;
14+
if (commenter === prAuthor) return;
15+
1216
const isMember = await pr.isOrgMember(commenter);
1317
if (!isMember) return;
1418

test/autoAssign/issueComment.test.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,44 @@ describe('Issue Comment Auto-Assign', () => {
111111

112112
expect(errorMock.isDone()).toBe(false);
113113
});
114+
115+
test('does not assign commenter when they are the PR author', async () => {
116+
const prAuthorPayload = {
117+
...issueCommentPayload,
118+
comment: {
119+
...issueCommentPayload.comment,
120+
user: {
121+
login: 'pr-author',
122+
id: 456,
123+
},
124+
},
125+
};
126+
127+
const mock = nock('https://api.github.com')
128+
.post('/app/installations/2/access_tokens')
129+
.reply(200, {
130+
token: 'test',
131+
permissions: {
132+
pull_requests: 'write',
133+
},
134+
})
135+
.get('/repos/your-repo/your-repo-name/pulls/1')
136+
.reply(200, pullRequestPayload.pull_request);
137+
138+
const errorMock = nock('https://api.github.com')
139+
.post('/repos/your-repo/your-repo-name/issues/1/assignees')
140+
.reply(() => {
141+
throw new Error(
142+
'Assignee should not be called when commenter is PR author',
143+
);
144+
});
145+
146+
await probot.receive({
147+
name: 'issue_comment',
148+
payload: prAuthorPayload,
149+
});
150+
151+
expect(mock.pendingMocks()).toStrictEqual([]);
152+
expect(errorMock.isDone()).toBe(false);
153+
});
114154
});

test/autoAssign/pullRequestReview.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,46 @@ describe('Pull Request Review Auto-Assign', () => {
8585
expect(mock.pendingMocks()).toStrictEqual([]);
8686
expect(errorMock.isDone()).toBe(false);
8787
});
88+
89+
test('does not assign reviewer when they are the PR author', async () => {
90+
const prAuthorPayload = {
91+
...pullRequestReviewPayload,
92+
review: {
93+
...pullRequestReviewPayload.review,
94+
user: {
95+
login: 'pr-author',
96+
id: 456,
97+
},
98+
},
99+
};
100+
101+
const mock = nock('https://api.github.com')
102+
.post('/app/installations/2/access_tokens')
103+
.reply(200, {
104+
token: 'test',
105+
permissions: {
106+
pull_requests: 'write',
107+
},
108+
})
109+
.get('/repos/your-repo/your-repo-name/pulls/1/reviews')
110+
.reply(200, [])
111+
.put('/repos/your-repo/your-repo-name/issues/1/labels')
112+
.reply(200);
113+
114+
const errorMock = nock('https://api.github.com')
115+
.post('/repos/your-repo/your-repo-name/issues/1/assignees')
116+
.reply(() => {
117+
throw new Error(
118+
'Assignee should not be called when reviewer is PR author',
119+
);
120+
});
121+
122+
await probot.receive({
123+
name: 'pull_request_review',
124+
payload: prAuthorPayload,
125+
});
126+
127+
expect(mock.pendingMocks()).toStrictEqual([]);
128+
expect(errorMock.isDone()).toBe(false);
129+
});
88130
});

test/autoAssign/pullRequestReviewComment.test.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,32 @@ describe('Pull Request Review Comment Auto-Assign', () => {
7777
expect(mock.pendingMocks()).toStrictEqual([]);
7878
expect(errorMock.isDone()).toBe(false);
7979
});
80+
81+
test('does not assign commenter when they are the PR author', async () => {
82+
const prAuthorPayload = {
83+
...pullRequestReviewCommentPayload,
84+
comment: {
85+
...pullRequestReviewCommentPayload.comment,
86+
user: {
87+
login: 'pr-author',
88+
id: 456,
89+
},
90+
},
91+
};
92+
93+
const errorMock = nock('https://api.github.com')
94+
.post('/repos/your-repo/your-repo-name/issues/1/assignees')
95+
.reply(() => {
96+
throw new Error(
97+
'Assignee should not be called when commenter is PR author',
98+
);
99+
});
100+
101+
await probot.receive({
102+
name: 'pull_request_review_comment',
103+
payload: prAuthorPayload,
104+
});
105+
106+
expect(errorMock.isDone()).toBe(false);
107+
});
80108
});

test/fixtures/pull_request.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
"number": 1,
55
"state": "open",
66
"draft": false,
7+
"user": {
8+
"login": "pr-author",
9+
"id": 456
10+
},
711
"head": {
812
"sha": "abc123"
913
},

test/fixtures/pull_request_review.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
"number": 1,
1414
"state": "open",
1515
"draft": false,
16+
"user": {
17+
"login": "pr-author",
18+
"id": 456
19+
},
1620
"head": {
1721
"sha": "abc123"
1822
},

test/fixtures/pull_request_review_comment.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
"number": 1,
1414
"state": "open",
1515
"draft": false,
16+
"user": {
17+
"login": "pr-author",
18+
"id": 456
19+
},
1620
"head": {
1721
"sha": "abc123"
1822
},

0 commit comments

Comments
 (0)