Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: add try catch to reviewer #279

Merged
merged 9 commits into from
Apr 10, 2024
77 changes: 77 additions & 0 deletions spec/utils.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import * as logUtils from '../src/utils/log-util';
import { LogLevel } from '../src/enums';
import { tagBackportReviewers } from '../src/utils';

const backportPROpenedEvent = require('./fixtures/backport_pull_request.opened.json');

jest.mock('../src/constants', () => ({
...jest.requireActual('../src/constants'),
DEFAULT_BACKPORT_REVIEW_TEAM: 'electron/wg-releases',
}));

describe('utils', () => {
describe('tagBackportReviewers()', () => {
const octokit = {
pulls: {
requestReviewers: jest.fn(),
},
repos: {
getCollaboratorPermissionLevel: jest.fn().mockReturnValue(
Promise.resolve({
data: {
permission: 'admin',
},
}),
),
},
};

const context = {
octokit,
repo: jest.fn((obj) => obj),
...backportPROpenedEvent,
};

beforeEach(() => jest.clearAllMocks());

it('correctly tags team reviewers when user is undefined', async () => {
await tagBackportReviewers({ context, targetPrNumber: 1234 });
expect(octokit.pulls.requestReviewers).toHaveBeenCalled();
expect(octokit.pulls.requestReviewers).toHaveBeenCalledWith({
pull_number: 1234,
team_reviewers: ['wg-releases'],
reviewers: [],
});
});

it('correctly tags team reviewers and reviewers when user is defined', async () => {
const user = 'abc';
await tagBackportReviewers({ context, targetPrNumber: 1234, user });
expect(octokit.pulls.requestReviewers).toHaveBeenCalled();
expect(octokit.pulls.requestReviewers).toHaveBeenCalledWith({
pull_number: 1234,
team_reviewers: ['wg-releases'],
reviewers: [user],
});
});

it('logs an error if requestReviewers throws an error', async () => {
const error = new Error('Request failed');
context.octokit.pulls.requestReviewers = jest
.fn()
.mockRejectedValue(error);

const logSpy = jest.spyOn(logUtils, 'log');
await tagBackportReviewers({ context, targetPrNumber: 1234 });

expect(octokit.pulls.requestReviewers).toHaveBeenCalled();

expect(logSpy).toHaveBeenCalledWith(
'tagBackportReviewers',
LogLevel.ERROR,
`Failed to request reviewers for PR #1234`,
error,
);
});
});
});
23 changes: 16 additions & 7 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -425,13 +425,22 @@ export const tagBackportReviewers = async ({
}

if (Math.max(reviewers.length, teamReviewers.length) > 0) {
await context.octokit.pulls.requestReviewers(
context.repo({
pull_number: targetPrNumber,
reviewers,
team_reviewers: teamReviewers,
}),
);
try {
await context.octokit.pulls.requestReviewers(
context.repo({
pull_number: targetPrNumber,
reviewers,
team_reviewers: teamReviewers,
}),
);
} catch (error) {
log(
'tagBackportReviewers',
LogLevel.ERROR,
`Failed to request reviewers for PR #${targetPrNumber}`,
error,
);
}
}
};

Expand Down
Loading