From 4a7315c5f4382a60a9724a9cb7e222dc5ce1399f Mon Sep 17 00:00:00 2001 From: Francesco Saltori Date: Fri, 5 Aug 2022 12:28:21 +0200 Subject: [PATCH] Add tests Signed-off-by: Francesco Saltori --- .../builtin/publish/githubPullRequest.test.ts | 95 +++++++++++++++++++ .../builtin/publish/githubPullRequest.ts | 2 +- 2 files changed, 96 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts index d030430924..bf857bc34f 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts @@ -62,6 +62,11 @@ describe('createPublishGithubPullRequestAction', () => { }, }; }), + rest: { + pulls: { + requestReviewers: jest.fn(async (_: any) => ({ data: {} })) + } + } }; clientFactory = jest.fn(async () => fakeClient); const githubCredentialsProvider: GithubCredentialsProvider = { @@ -273,6 +278,96 @@ describe('createPublishGithubPullRequestAction', () => { }); }); + describe('with reviewers and teamReviewers', () => { + let input: GithubPullRequestActionInput; + let ctx: ActionContext; + + beforeEach(() => { + input = { + repoUrl: 'github.com?owner=myorg&repo=myrepo', + title: 'Create my new app', + branchName: 'new-app', + description: 'This PR is really good', + reviewers: ['foobar'], + teamReviewers: ['team-foo'] + }; + + ctx = { + createTemporaryDirectory: jest.fn(), + output: jest.fn(), + logger: getRootLogger(), + logStream: new Writable(), + input, + workspacePath, + }; + }); + + it('creates a pull request and requests a review from the given reviewers', async () => { + await instance.handler(ctx); + + expect(fakeClient.createPullRequest).toBeCalled(); + expect(fakeClient.rest.pulls.requestReviewers).toBeCalledWith({ + owner: 'myorg', + repo: 'myrepo', + pull_number: 123, + reviewers: ['foobar'], + team_reviewers: ['team-foo'], + }) + }); + + it('creates outputs for the pull request url and number even if requesting reviewers fails', async () => { + fakeClient.rest.pulls.requestReviewers.mockImplementation(() => { throw new Error('a random error') }) + + await instance.handler(ctx); + + expect(ctx.output).toHaveBeenCalledWith( + 'remoteUrl', + 'https://github.com/myorg/myrepo/pull/123', + ); + expect(ctx.output).toHaveBeenCalledWith('pullRequestNumber', 123); + }); + + afterEach(() => { + mockFs.restore(); + jest.resetAllMocks(); + }); + }) + + describe('with no reviewers and teamReviewers', () => { + let input: GithubPullRequestActionInput; + let ctx: ActionContext; + + beforeEach(() => { + input = { + repoUrl: 'github.com?owner=myorg&repo=myrepo', + title: 'Create my new app', + branchName: 'new-app', + description: 'This PR is really good', + }; + + ctx = { + createTemporaryDirectory: jest.fn(), + output: jest.fn(), + logger: getRootLogger(), + logStream: new Writable(), + input, + workspacePath, + }; + }); + + it('does not call the API endpoint for requesting reviewers', async () => { + await instance.handler(ctx); + + expect(fakeClient.createPullRequest).toBeCalled(); + expect(fakeClient.rest.pulls.requestReviewers).not.toBeCalled(); + }); + + afterEach(() => { + mockFs.restore(); + jest.resetAllMocks(); + }); + }) + describe('with executable file mode 755', () => { let input: GithubPullRequestActionInput; let ctx: ActionContext; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.ts index cfaee62804..67379e8d70 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.ts @@ -280,7 +280,7 @@ export const createPublishGithubPullRequestAction = ({ } const pullRequestNumber = response.data.number; - if (reviewers !== null || teamReviewers !== null) { + if (reviewers || teamReviewers) { try { const result = await client.rest.pulls.requestReviewers({ owner,