diff --git a/lib/workers/repository/onboarding/pr/index.spec.ts b/lib/workers/repository/onboarding/pr/index.spec.ts index f309b0d2b21143..e1f78727978925 100644 --- a/lib/workers/repository/onboarding/pr/index.spec.ts +++ b/lib/workers/repository/onboarding/pr/index.spec.ts @@ -1,3 +1,4 @@ +import type { RequestError, Response } from 'got'; import { RenovateConfig, defaultConfig, @@ -203,5 +204,38 @@ describe('workers/repository/onboarding/pr/index', () => { 'DRY-RUN: Would create onboarding PR' ); }); + + describe('ensureOnboardingPr() throws', () => { + const response = partial({ statusCode: 422 }); + const err = partial({ response }); + + beforeEach(() => { + jest.resetAllMocks(); + GlobalConfig.reset(); + git.deleteBranch.mockResolvedValue(); + }); + + it('throws when trying to create a new PR', async () => { + platform.createPr.mockRejectedValueOnce(err); + await expect( + ensureOnboardingPr(config, packageFiles, branches) + ).toReject(); + expect(git.deleteBranch).toHaveBeenCalledTimes(0); + }); + + it('deletes branch when PR already exists but cannot find it', async () => { + err.response.body = { + errors: [{ message: 'A pull request already exists' }], + }; + platform.createPr.mockRejectedValueOnce(err); + await expect( + ensureOnboardingPr(config, packageFiles, branches) + ).toResolve(); + expect(logger.warn).toHaveBeenCalledWith( + 'Onboarding PR already exists but cannot find it. It was probably created by a different user.' + ); + expect(git.deleteBranch).toHaveBeenCalledTimes(1); + }); + }); }); }); diff --git a/lib/workers/repository/onboarding/pr/index.ts b/lib/workers/repository/onboarding/pr/index.ts index 945d0644de7401..8952bf5936e466 100644 --- a/lib/workers/repository/onboarding/pr/index.ts +++ b/lib/workers/repository/onboarding/pr/index.ts @@ -152,14 +152,16 @@ If you need any further assistance then you can also [request help here](${confi logger.info({ pr: pr.displayNumber }, 'Onboarding PR created'); await addParticipants(config, pr); } - } catch (err) /* istanbul ignore next */ { + } catch (err) { if ( - err.statusCode === 422 && + err.response?.statusCode === 422 && err.response?.body?.errors?.[0]?.message?.startsWith( 'A pull request already exists' ) ) { - logger.debug('Onboarding PR already exists but cannot find it'); + logger.warn( + 'Onboarding PR already exists but cannot find it. It was probably created by a different user.' + ); await deleteBranch(config.onboardingBranch); return; }