From 8c9a8f2c48e466c3ee3217a33e09ee9d3c3b5106 Mon Sep 17 00:00:00 2001
From: Ryan Murfitt <rmurfitt@gmail.com>
Date: Tue, 17 Sep 2019 17:48:16 +1000
Subject: [PATCH] feat(bitbucket-cloud): Default reviewers (#4501)

---
 docs/usage/configuration-options.md            |  2 +-
 lib/config/definitions.ts                      |  2 +-
 lib/platform/bitbucket/index.ts                | 18 ++++++++++++++++++
 lib/platform/bitbucket/utils.ts                |  1 +
 renovate-schema.json                           |  2 +-
 .../bitbucket/__snapshots__/index.spec.ts.snap |  5 +++++
 test/platform/bitbucket/index.spec.ts          |  5 +++++
 7 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md
index b6213e2991..ccf99b2355 100644
--- a/docs/usage/configuration-options.md
+++ b/docs/usage/configuration-options.md
@@ -110,7 +110,7 @@ It's possible to add this setting into the `renovate.json` file as part of the "
 
 ## bbUseDefaultReviewers
 
-Apply the default reviewers rules to PR's (Bitbucket server only).
+Apply the default reviewers rules to PR's (Bitbucket only).
 
 ## branchName
 
diff --git a/lib/config/definitions.ts b/lib/config/definitions.ts
index 8d11806bdc..e139a3876c 100644
--- a/lib/config/definitions.ts
+++ b/lib/config/definitions.ts
@@ -1024,7 +1024,7 @@ const options: RenovateOptions[] = [
   },
   {
     name: 'bbUseDefaultReviewers',
-    description: 'Use the default reviewers (Bitbucket server only).',
+    description: 'Use the default reviewers (Bitbucket only).',
     type: 'boolean',
     default: true,
   },
diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts
index 063d80bc70..f4a1c88692 100644
--- a/lib/platform/bitbucket/index.ts
+++ b/lib/platform/bitbucket/index.ts
@@ -58,6 +58,7 @@ export async function initRepo({
   repository,
   localDir,
   optimizeForDisabled,
+  bbUseDefaultReviewers,
 }: RepoParams) {
   logger.debug(`initRepo("${repository}")`);
   const opts = hostRules.find({
@@ -67,6 +68,7 @@ export async function initRepo({
   config = {
     repository,
     username: opts!.username,
+    bbUseDefaultReviewers: bbUseDefaultReviewers !== false,
   } as any;
   let info;
   try {
@@ -530,6 +532,17 @@ export async function createPr(
 
   logger.debug({ repository: config.repository, title, base }, 'Creating PR');
 
+  let reviewers = [];
+
+  if (config.bbUseDefaultReviewers) {
+    const reviewersResponse = (await api.get<utils.PagedResult<Reviewer>>(
+      `/2.0/repositories/${config.repository}/default-reviewers`
+    )).body;
+    reviewers = reviewersResponse.values.map((reviewer: Reviewer) => ({
+      uuid: reviewer.uuid,
+    }));
+  }
+
   const body = {
     title,
     description: sanitize(description),
@@ -544,6 +557,7 @@ export async function createPr(
       },
     },
     close_source_branch: true,
+    reviewers,
   };
 
   const prInfo = (await api.post(
@@ -571,6 +585,10 @@ async function isPrConflicted(prNo: number) {
   return utils.isConflicted(parseDiff(diff));
 }
 
+interface Reviewer {
+  uuid: { raw: string };
+}
+
 interface Commit {
   author: { raw: string };
 }
diff --git a/lib/platform/bitbucket/utils.ts b/lib/platform/bitbucket/utils.ts
index a4814c2d90..8ab90f46b9 100644
--- a/lib/platform/bitbucket/utils.ts
+++ b/lib/platform/bitbucket/utils.ts
@@ -14,6 +14,7 @@ export interface Config {
   prList: any[];
   repository: string;
   storage: Storage;
+  bbUseDefaultReviewers: boolean;
 
   username: string;
 }
diff --git a/renovate-schema.json b/renovate-schema.json
index 0465567906..04b676f41c 100644
--- a/renovate-schema.json
+++ b/renovate-schema.json
@@ -625,7 +625,7 @@
       "default": 0
     },
     "bbUseDefaultReviewers": {
-      "description": "Use the default reviewers (Bitbucket server only).",
+      "description": "Use the default reviewers (Bitbucket only).",
       "type": "boolean",
       "default": true
     },
diff --git a/test/platform/bitbucket/__snapshots__/index.spec.ts.snap b/test/platform/bitbucket/__snapshots__/index.spec.ts.snap
index 6f095e089f..4a6998fbd5 100644
--- a/test/platform/bitbucket/__snapshots__/index.spec.ts.snap
+++ b/test/platform/bitbucket/__snapshots__/index.spec.ts.snap
@@ -34,6 +34,11 @@ Array [
             "name": "master",
           },
         },
+        "reviewers": Array [
+          Object {
+            "uuid": "{1234-5678}",
+          },
+        ],
         "source": Object {
           "branch": Object {
             "name": "branch",
diff --git a/test/platform/bitbucket/index.spec.ts b/test/platform/bitbucket/index.spec.ts
index a097eeaf56..7d4768201f 100644
--- a/test/platform/bitbucket/index.spec.ts
+++ b/test/platform/bitbucket/index.spec.ts
@@ -388,6 +388,11 @@ describe('platform/bitbucket', () => {
   describe('createPr()', () => {
     it('posts PR', async () => {
       await initRepo();
+      api.get.mockReturnValueOnce({
+        body: {
+          values: [{ uuid: '{1234-5678}' }],
+        },
+      } as any);
       api.post.mockReturnValueOnce({
         body: { id: 5 },
       } as any);
-- 
GitLab