From f83d000964bcb14a20269055d9b515c6a77b6ebc Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Fri, 13 Dec 2019 16:03:00 +0100
Subject: [PATCH] fix(master-issue): correctly classify more pending cases

---
 lib/workers/branch/index.ts       |  3 +++
 lib/workers/pr/index.ts           |  6 +++---
 test/workers/branch/index.spec.ts | 13 +++++++++++++
 test/workers/pr/index.spec.ts     |  4 ++--
 4 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index 6c27807825..ad9278d363 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -451,6 +451,9 @@ export async function processBranch(
     if (pr === 'needs-pr-approval') {
       return 'needs-pr-approval';
     }
+    if (pr === 'pending') {
+      return 'pending';
+    }
     if (pr) {
       const topic = emojify(':warning: Artifact update problem');
       if (config.artifactErrors && config.artifactErrors.length) {
diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts
index 8a08faf529..e8494a65fb 100644
--- a/lib/workers/pr/index.ts
+++ b/lib/workers/pr/index.ts
@@ -59,7 +59,7 @@ async function addAssigneesReviewers(config, pr: Pr): Promise<void> {
 // Ensures that PR exists with matching title/body
 export async function ensurePr(
   prConfig: BranchConfig
-): Promise<Pr | 'needs-pr-approval'> {
+): Promise<Pr | 'needs-pr-approval' | 'pending'> {
   const config: BranchConfig = { ...prConfig };
 
   logger.trace({ config }, 'ensurePr');
@@ -127,7 +127,7 @@ export async function ensurePr(
       logger.debug(
         `Branch status is "${await getBranchStatus()}" - not creating PR`
       );
-      return null;
+      return 'pending';
     }
     logger.debug('Branch status success');
   } else if (
@@ -159,7 +159,7 @@ export async function ensurePr(
         logger.debug(
           `Branch is ${elapsedHours} hours old - skipping PR creation`
         );
-        return null;
+        return 'pending';
       }
       logger.debug(
         `prNotPendingHours=${config.prNotPendingHours} threshold hit - creating PR`
diff --git a/test/workers/branch/index.spec.ts b/test/workers/branch/index.spec.ts
index cb198a68e1..0995ca9531 100644
--- a/test/workers/branch/index.spec.ts
+++ b/test/workers/branch/index.spec.ts
@@ -257,6 +257,19 @@ describe('workers/branch', () => {
         'needs-pr-approval'
       );
     });
+    it('returns if branch exists but pending', async () => {
+      getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce({
+        updatedPackageFiles: [{}],
+      } as never);
+      npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
+        artifactErrors: [],
+        updatedArtifacts: [{}],
+      } as never);
+      platform.branchExists.mockResolvedValueOnce(true);
+      automerge.tryBranchAutomerge.mockResolvedValueOnce('failed');
+      prWorker.ensurePr.mockResolvedValueOnce('pending');
+      expect(await branchWorker.processBranch(config)).toEqual('pending');
+    });
     it('ensures PR and tries automerge', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce({
         updatedPackageFiles: [{}],
diff --git a/test/workers/pr/index.spec.ts b/test/workers/pr/index.spec.ts
index 912ee3f025..dc5ba56748 100644
--- a/test/workers/pr/index.spec.ts
+++ b/test/workers/pr/index.spec.ts
@@ -155,7 +155,7 @@ describe('workers/pr', () => {
       platform.getBranchStatus.mockResolvedValueOnce('failed');
       config.prCreation = 'status-success';
       const pr = await prWorker.ensurePr(config);
-      expect(pr).toBeNull();
+      expect(pr).toEqual('pending');
     });
     it('should return needs-approval if prCreation set to approval', async () => {
       platform.getBranchStatus.mockResolvedValueOnce('success');
@@ -236,7 +236,7 @@ describe('workers/pr', () => {
       );
       config.prCreation = 'not-pending';
       const pr = await prWorker.ensurePr(config);
-      expect(pr).toBeNull();
+      expect(pr).toEqual('pending');
     });
     it('should create PR if pending timeout hit', async () => {
       platform.getBranchStatus.mockResolvedValueOnce('pending');
-- 
GitLab