From e72bf85b1e52ce0ea81d758a160e49c95f8fbb8f Mon Sep 17 00:00:00 2001
From: Sourav Das <souravdasslg95@gmail.com>
Date: Tue, 7 Jan 2020 15:29:14 +0530
Subject: [PATCH] refactor: setBranchStatus Function (#4996) (#5112)

---
 lib/platform/azure/index.ts                   | 15 ++--
 lib/platform/bitbucket-server/index.ts        | 15 ++--
 lib/platform/bitbucket/index.ts               | 15 ++--
 lib/platform/common.ts                        | 16 ++---
 lib/platform/github/index.ts                  | 27 +++----
 lib/platform/gitlab/index.ts                  | 15 ++--
 lib/workers/branch/index.ts                   |  8 +--
 lib/workers/branch/status-checks.ts           |  6 +-
 lib/workers/repository/finalise/validate.ts   |  8 +--
 test/platform/azure/index.spec.ts             |  8 ++-
 test/platform/bitbucket-server/index.spec.ts  | 72 +++++++++----------
 test/platform/bitbucket/index.spec.ts         | 14 ++--
 test/platform/github/index.spec.ts            | 28 ++++----
 test/platform/gitlab/index.spec.ts            | 14 ++--
 .../repository/finalise/validate.spec.ts      | 12 +++-
 15 files changed, 145 insertions(+), 128 deletions(-)

diff --git a/lib/platform/azure/index.ts b/lib/platform/azure/index.ts
index dcaf802122..a7c1d7fea4 100644
--- a/lib/platform/azure/index.ts
+++ b/lib/platform/azure/index.ts
@@ -15,6 +15,7 @@ import {
   Pr,
   Issue,
   VulnerabilityAlert,
+  BranchStatusConfig,
 } from '../common';
 import { sanitize } from '../../util/sanitize';
 import { smartTruncate } from '../utils/pr-body';
@@ -520,13 +521,13 @@ export async function ensureCommentRemoval(
   }
 }
 
-export function setBranchStatus(
-  branchName: string,
-  context: string,
-  description: string,
-  state: string,
-  targetUrl: string
-): void {
+export function setBranchStatus({
+  branchName,
+  context,
+  description,
+  state,
+  url: targetUrl,
+}: BranchStatusConfig): void {
   logger.debug(
     `setBranchStatus(${branchName}, ${context}, ${description}, ${state}, ${targetUrl}) - Not supported by Azure DevOps (yet!)`
   );
diff --git a/lib/platform/bitbucket-server/index.ts b/lib/platform/bitbucket-server/index.ts
index baf6b0566c..51eeeffe95 100644
--- a/lib/platform/bitbucket-server/index.ts
+++ b/lib/platform/bitbucket-server/index.ts
@@ -14,6 +14,7 @@ import {
   Issue,
   VulnerabilityAlert,
   GotResponse,
+  BranchStatusConfig,
 } from '../common';
 import { sanitize } from '../../util/sanitize';
 import { smartTruncate } from '../utils/pr-body';
@@ -571,13 +572,13 @@ export async function getBranchStatusCheck(
   return null;
 }
 
-export async function setBranchStatus(
-  branchName: string,
-  context: string,
-  description: string,
-  state: string | null,
-  targetUrl?: string
-): Promise<void> {
+export async function setBranchStatus({
+  branchName,
+  context,
+  description,
+  state,
+  url: targetUrl,
+}: BranchStatusConfig): Promise<void> {
   logger.debug(`setBranchStatus(${branchName})`);
 
   const existingStatus = await getBranchStatusCheck(branchName, context);
diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts
index 3437f88601..260dc4946c 100644
--- a/lib/platform/bitbucket/index.ts
+++ b/lib/platform/bitbucket/index.ts
@@ -14,6 +14,7 @@ import {
   Pr,
   Issue,
   VulnerabilityAlert,
+  BranchStatusConfig,
 } from '../common';
 import { sanitize } from '../../util/sanitize';
 import { smartTruncate } from '../utils/pr-body';
@@ -433,13 +434,13 @@ export async function getBranchStatusCheck(
   );
 }
 
-export async function setBranchStatus(
-  branchName: string,
-  context: string,
-  description: string,
-  state: string,
-  targetUrl?: string
-): Promise<void> {
+export async function setBranchStatus({
+  branchName,
+  context,
+  description,
+  state,
+  url: targetUrl,
+}: BranchStatusConfig): Promise<void> {
   const sha = await getBranchCommit(branchName);
 
   // TargetUrl can not be empty so default to bitbucket
diff --git a/lib/platform/common.ts b/lib/platform/common.ts
index e0dbf2255e..632c23d2fb 100644
--- a/lib/platform/common.ts
+++ b/lib/platform/common.ts
@@ -108,7 +108,13 @@ export type PlatformPrOptions = {
   statusCheckVerify: boolean;
   gitLabAutomerge: boolean;
 };
-
+export interface BranchStatusConfig {
+  branchName: string;
+  context: string;
+  description: string;
+  state: string | null;
+  url?: string;
+}
 /**
  * TODO: Proper typing
  */
@@ -151,13 +157,7 @@ export interface Platform {
   isBranchStale(branchName: string): Promise<boolean>;
   getRepoForceRebase(): Promise<boolean>;
   deleteLabel(number: number, label: string): Promise<void>;
-  setBranchStatus(
-    branchName: string,
-    context: string,
-    description: string,
-    state: string | null,
-    url?: string
-  ): Promise<void>;
+  setBranchStatus(branchStatusConfig: BranchStatusConfig): Promise<void>;
   getBranchStatusCheck(branchName: string, context: string): Promise<string>;
   ensureCommentRemoval(number: number, subject: string): Promise<void>;
   deleteBranch(branchName: string, closePr?: boolean): Promise<void>;
diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts
index c1d9f0e54d..8212ed8f7c 100644
--- a/lib/platform/github/index.ts
+++ b/lib/platform/github/index.ts
@@ -13,6 +13,7 @@ import {
   RepoConfig,
   Issue,
   VulnerabilityAlert,
+  BranchStatusConfig,
 } from '../common';
 
 import { configFileNames } from '../../config/app-strings';
@@ -1134,13 +1135,13 @@ export async function getBranchStatusCheck(
   }
 }
 
-export async function setBranchStatus(
-  branchName: string,
-  context: string,
-  description: string,
-  state: string,
-  targetUrl?: string
-): Promise<void> {
+export async function setBranchStatus({
+  branchName,
+  context,
+  description,
+  state,
+  url: targetUrl,
+}: BranchStatusConfig): Promise<void> {
   // istanbul ignore if
   if (config.parentRepo) {
     logger.info('Cannot set branch status when in forking mode');
@@ -1608,13 +1609,13 @@ export async function createPr(
   await addLabels(pr.number, labels);
   if (platformOptions.statusCheckVerify) {
     logger.debug('Setting statusCheckVerify');
-    await setBranchStatus(
+    await setBranchStatus({
       branchName,
-      `renovate/verify`,
-      `Renovate verified pull request`,
-      'success',
-      'https://github.com/renovatebot/renovate'
-    );
+      context: `renovate/verify`,
+      description: `Renovate verified pull request`,
+      state: 'success',
+      url: 'https://github.com/renovatebot/renovate',
+    });
   }
   pr.isModified = false;
   return pr;
diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts
index 11105775f3..b5326a5d5b 100644
--- a/lib/platform/gitlab/index.ts
+++ b/lib/platform/gitlab/index.ts
@@ -13,6 +13,7 @@ import {
   Pr,
   Issue,
   VulnerabilityAlert,
+  BranchStatusConfig,
 } from '../common';
 import { configFileNames } from '../../config/app-strings';
 import { logger } from '../../logger';
@@ -599,13 +600,13 @@ export async function getBranchStatusCheck(
   return null;
 }
 
-export async function setBranchStatus(
-  branchName: string,
-  context: string,
-  description: string,
-  state: string,
-  targetUrl?: string
-): Promise<void> {
+export async function setBranchStatus({
+  branchName,
+  context,
+  description,
+  state,
+  url: targetUrl,
+}: BranchStatusConfig): Promise<void> {
   // First, get the branch commit SHA
   const branchSha = await config.storage.getBranchCommit(branchName);
   // Now, check the statuses for that commit
diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index 03998fe8a2..5c6767d5c3 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -512,12 +512,12 @@ export async function processBranch(
               'DRY-RUN: Would set branch status in ' + config.branchName
             );
           } else {
-            await platform.setBranchStatus(
-              config.branchName,
+            await platform.setBranchStatus({
+              branchName: config.branchName,
               context,
               description,
-              state
-            );
+              state,
+            });
           }
         }
       } else {
diff --git a/lib/workers/branch/status-checks.ts b/lib/workers/branch/status-checks.ts
index bfd0b3bc87..61c6d7b7c6 100644
--- a/lib/workers/branch/status-checks.ts
+++ b/lib/workers/branch/status-checks.ts
@@ -18,13 +18,13 @@ async function setStatusCheck(
     logger.debug(`Status check ${context} is already up-to-date`);
   } else {
     logger.debug(`Updating ${context} status check state to ${state}`);
-    await platform.setBranchStatus(
+    await platform.setBranchStatus({
       branchName,
       context,
       description,
       state,
-      url
-    );
+      url,
+    });
   }
 }
 
diff --git a/lib/workers/repository/finalise/validate.ts b/lib/workers/repository/finalise/validate.ts
index b651d49916..455285a3fe 100644
--- a/lib/workers/repository/finalise/validate.ts
+++ b/lib/workers/repository/finalise/validate.ts
@@ -105,12 +105,12 @@ export async function validatePrs(config: RenovateConfig): Promise<void> {
       if (pr.sourceRepo === config.repository) {
         logger.info({ status, description }, 'Setting PR validation status');
         const context = `renovate/validate`;
-        await platform.setBranchStatus(
-          pr.branchName,
+        await platform.setBranchStatus({
+          branchName: pr.branchName,
           context,
           description,
-          status
-        );
+          state: status,
+        });
       } else {
         logger.debug('Skipping branch status for forked PR');
       }
diff --git a/test/platform/azure/index.spec.ts b/test/platform/azure/index.spec.ts
index ac3a0935aa..f099c734ea 100644
--- a/test/platform/azure/index.spec.ts
+++ b/test/platform/azure/index.spec.ts
@@ -702,7 +702,13 @@ describe('platform/azure', () => {
 
   describe('Not supported by Azure DevOps (yet!)', () => {
     it('setBranchStatus', () => {
-      const res = azure.setBranchStatus('test', 'test', 'test', 'test', 'test');
+      const res = azure.setBranchStatus({
+        branchName: 'test',
+        context: 'test',
+        description: 'test',
+        state: 'test',
+        url: 'test',
+      });
       expect(res).toBeUndefined();
     });
 
diff --git a/test/platform/bitbucket-server/index.spec.ts b/test/platform/bitbucket-server/index.spec.ts
index c4ee1e6a4f..becf461850 100644
--- a/test/platform/bitbucket-server/index.spec.ts
+++ b/test/platform/bitbucket-server/index.spec.ts
@@ -919,51 +919,51 @@ Followed by some information.
           await initRepo();
           api.get.mockClear();
 
-          await bitbucket.setBranchStatus(
-            'somebranch',
-            'context-2',
-            null as any,
-            'success'
-          );
+          await bitbucket.setBranchStatus({
+            branchName: 'somebranch',
+            context: 'context-2',
+            description: null as any,
+            state: 'success',
+          });
 
-          await bitbucket.setBranchStatus(
-            'somebranch',
-            'context-2',
-            null as any,
-            'failed'
-          );
+          await bitbucket.setBranchStatus({
+            branchName: 'somebranch',
+            context: 'context-2',
+            description: null as any,
+            state: 'failed',
+          });
 
-          await bitbucket.setBranchStatus(
-            'somebranch',
-            'context-2',
-            null as any,
-            'failure'
-          );
+          await bitbucket.setBranchStatus({
+            branchName: 'somebranch',
+            context: 'context-2',
+            description: null as any,
+            state: 'failure',
+          });
 
-          await bitbucket.setBranchStatus(
-            'somebranch',
-            'context-2',
-            null as any,
-            'pending'
-          );
+          await bitbucket.setBranchStatus({
+            branchName: 'somebranch',
+            context: 'context-2',
+            description: null as any,
+            state: 'pending',
+          });
 
           api.post.mockImplementationOnce(() => {
             throw new Error('requst-failed');
           });
 
-          await bitbucket.setBranchStatus(
-            'somebranch',
-            'context-2',
-            null as any,
-            'success'
-          );
+          await bitbucket.setBranchStatus({
+            branchName: 'somebranch',
+            context: 'context-2',
+            description: null as any,
+            state: 'success',
+          });
 
-          await bitbucket.setBranchStatus(
-            'somebranch',
-            'context-1',
-            null as any,
-            'success'
-          );
+          await bitbucket.setBranchStatus({
+            branchName: 'somebranch',
+            context: 'context-1',
+            description: null as any,
+            state: 'success',
+          });
 
           expect(api.get.mock.calls).toMatchSnapshot();
           expect(api.post.mock.calls).toMatchSnapshot();
diff --git a/test/platform/bitbucket/index.spec.ts b/test/platform/bitbucket/index.spec.ts
index 8224c9402d..204dec5272 100644
--- a/test/platform/bitbucket/index.spec.ts
+++ b/test/platform/bitbucket/index.spec.ts
@@ -219,13 +219,13 @@ describe('platform/bitbucket', () => {
     it('posts status', async () => {
       await initRepo();
       await mocked(async () => {
-        await bitbucket.setBranchStatus(
-          'branch',
-          'context',
-          'description',
-          'failed',
-          'targetUrl'
-        );
+        await bitbucket.setBranchStatus({
+          branchName: 'branch',
+          context: 'context',
+          description: 'description',
+          state: 'failed',
+          url: 'targetUrl',
+        });
         expect(api.post.mock.calls).toMatchSnapshot();
       });
     });
diff --git a/test/platform/github/index.spec.ts b/test/platform/github/index.spec.ts
index 429ae70bfa..3a76f91873 100644
--- a/test/platform/github/index.spec.ts
+++ b/test/platform/github/index.spec.ts
@@ -803,13 +803,13 @@ describe('platform/github', () => {
             ],
           } as any)
       );
-      await github.setBranchStatus(
-        'some-branch',
-        'some-context',
-        'some-description',
-        'some-state',
-        'some-url'
-      );
+      await github.setBranchStatus({
+        branchName: 'some-branch',
+        context: 'some-context',
+        description: 'some-description',
+        state: 'some-state',
+        url: 'some-url',
+      });
       expect(api.post).toHaveBeenCalledTimes(0);
     });
     it('sets branch status', async () => {
@@ -852,13 +852,13 @@ describe('platform/github', () => {
       api.get.mockResolvedValueOnce({
         body: {},
       } as any);
-      await github.setBranchStatus(
-        'some-branch',
-        'some-context',
-        'some-description',
-        'some-state',
-        'some-url'
-      );
+      await github.setBranchStatus({
+        branchName: 'some-branch',
+        context: 'some-context',
+        description: 'some-description',
+        state: 'some-state',
+        url: 'some-url',
+      });
       expect(api.post).toHaveBeenCalledTimes(1);
     });
   });
diff --git a/test/platform/gitlab/index.spec.ts b/test/platform/gitlab/index.spec.ts
index 28cb51a858..13bdb93bb7 100644
--- a/test/platform/gitlab/index.spec.ts
+++ b/test/platform/gitlab/index.spec.ts
@@ -498,13 +498,13 @@ describe('platform/gitlab', () => {
   describe('setBranchStatus', () => {
     it('sets branch status', async () => {
       await initRepo();
-      await gitlab.setBranchStatus(
-        'some-branch',
-        'some-context',
-        'some-description',
-        'some-state',
-        'some-url'
-      );
+      await gitlab.setBranchStatus({
+        branchName: 'some-branch',
+        context: 'some-context',
+        description: 'some-description',
+        state: 'some-state',
+        url: 'some-url',
+      });
       expect(api.post).toHaveBeenCalledTimes(1);
     });
   });
diff --git a/test/workers/repository/finalise/validate.spec.ts b/test/workers/repository/finalise/validate.spec.ts
index 3676ee7f49..c573379374 100644
--- a/test/workers/repository/finalise/validate.spec.ts
+++ b/test/workers/repository/finalise/validate.spec.ts
@@ -49,7 +49,9 @@ describe('workers/repository/validate', () => {
       platform.getFile.mockResolvedValue('not JSON');
       await validate.validatePrs({});
       expect(platform.setBranchStatus).toHaveBeenCalledTimes(1);
-      expect(platform.setBranchStatus.mock.calls[0][3]).toEqual('failure');
+      expect(platform.setBranchStatus.mock.calls[0][0].state).toEqual(
+        'failure'
+      );
       expect(platform.ensureComment).toHaveBeenCalledTimes(1);
       expect(platform.ensureCommentRemoval).toHaveBeenCalledTimes(0);
     });
@@ -65,7 +67,9 @@ describe('workers/repository/validate', () => {
       platform.getFile.mockResolvedValue('{"foo":1}');
       await validate.validatePrs({});
       expect(platform.setBranchStatus).toHaveBeenCalledTimes(1);
-      expect(platform.setBranchStatus.mock.calls[0][3]).toEqual('failure');
+      expect(platform.setBranchStatus.mock.calls[0][0].state).toEqual(
+        'failure'
+      );
       expect(platform.ensureComment).toHaveBeenCalledTimes(1);
       expect(platform.ensureCommentRemoval).toHaveBeenCalledTimes(0);
     });
@@ -81,7 +85,9 @@ describe('workers/repository/validate', () => {
       platform.getFile.mockResolvedValue('{}');
       await validate.validatePrs({});
       expect(platform.setBranchStatus).toHaveBeenCalledTimes(1);
-      expect(platform.setBranchStatus.mock.calls[0][3]).toEqual('success');
+      expect(platform.setBranchStatus.mock.calls[0][0].state).toEqual(
+        'success'
+      );
       expect(platform.ensureComment).toHaveBeenCalledTimes(0);
       expect(platform.ensureCommentRemoval).toHaveBeenCalledTimes(1);
     });
-- 
GitLab