diff --git a/lib/config/templates/default/pr-body.hbs b/lib/config/templates/default/pr-body.hbs index 92971dffb1c9461bef01c92b511d5ee4ab52b327..ff1571cdcddeb6dc9286d5c8780a2c828f92d8f3 100644 --- a/lib/config/templates/default/pr-body.hbs +++ b/lib/config/templates/default/pr-body.hbs @@ -15,6 +15,33 @@ This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request updates dependency [{{depN </details> {{/if}} -<br /> + +{{#if hasErrors}} + +--- + +### Errors + +Renovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR. + +{{#each errors as |error|}} +- `{{error.depName}}`: {{error.message}} +{{/each}} +{{/if}} + +{{#if hasWarnings}} + +--- + +### Warnings + +Please make sure the following warnings are safe to ignore: + +{{#each warnings as |warning|}} +- `{{warning.depName}}`: {{warning.message}} +{{/each}} +{{/if}} + +--- This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://keylocation.sg/our-tech/renovate). diff --git a/lib/config/templates/group/pr-body.hbs b/lib/config/templates/group/pr-body.hbs index 5097c99c400048b86e3b0029d0852f609d9049f7..766b35a328f6bbdc99f6fba95cfacd6809a37357 100644 --- a/lib/config/templates/group/pr-body.hbs +++ b/lib/config/templates/group/pr-body.hbs @@ -25,4 +25,30 @@ This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request renovates the package grou {{/unless}} <br /> +--- + +### Errors + +Renovate encountered some errors when processing your repository, so you are being notified here even if they do not directly apply to this PR. + +{{#each errors as |error|}} +- `{{error.depName}}`: {{error.message}} +{{/each}} +{{/if}} + +{{#if hasWarnings}} + +--- + +### Warnings + +Please make sure the following warnings are safe to ignore: + +{{#each warnings as |warning|}} +- `{{warning.depName}}`: {{warning.message}} +{{/each}} +{{/if}} + +--- + This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://keylocation.sg/our-tech/renovate). diff --git a/lib/workers/branch/index.js b/lib/workers/branch/index.js index b34b37bd3d5acb09670aa631ed7016ac230872a7..02c97d3de9b6ddac14bbf32e97d227602364f95f 100644 --- a/lib/workers/branch/index.js +++ b/lib/workers/branch/index.js @@ -224,7 +224,7 @@ async function generateConfig(branchUpgrades) { return Object.assign(config, config.upgrades[0]); } -async function processBranchUpgrades(branchUpgrades) { +async function processBranchUpgrades(branchUpgrades, errors, warnings) { logger.trace({ config: branchUpgrades }, 'processBranchUpgrades'); const config = await module.exports.generateConfig(branchUpgrades); logger.trace({ config }, 'generateConfig'); @@ -259,7 +259,12 @@ async function processBranchUpgrades(branchUpgrades) { } const branchCreated = await module.exports.ensureBranch(config); if (branchCreated) { - const pr = await prWorker.ensurePr(config.upgrades, logger); + const pr = await prWorker.ensurePr( + config.upgrades, + logger, + errors, + warnings + ); if (pr) { await prWorker.checkAutoMerge(pr, config, logger); } diff --git a/lib/workers/pr/index.js b/lib/workers/pr/index.js index b35913529023d27d9c15305eaf021953285c009e..3bad4d5a848640407a183b3a3fda4e8bc183036e 100644 --- a/lib/workers/pr/index.js +++ b/lib/workers/pr/index.js @@ -11,7 +11,7 @@ module.exports = { }; // Ensures that PR exists with matching title/body -async function ensurePr(upgrades, logger) { +async function ensurePr(upgrades, logger, errors, warnings) { logger.trace({ config: upgrades }, 'ensurePr'); // If there is a group, it will use the config of the first upgrade in the array const config = Object.assign({}, upgrades[0]); @@ -96,6 +96,14 @@ async function ensurePr(upgrades, logger) { // Update the config object Object.assign(config, upgrades[0]); + if (errors && errors.length) { + config.hasErrors = true; + config.errors = errors; + } + if (warnings && warnings.length) { + config.hasWarnings = true; + config.warnings = warnings; + } const prTitle = handlebars.compile(config.prTitle)(config); const prBodyMarkdown = handlebars.compile(config.prBody)(config); diff --git a/lib/workers/repository/index.js b/lib/workers/repository/index.js index f5854ce6a6de5abf7326cfa6eaf5460fc1b37417..0f2671ed4563c489542ec213f2466fd81c268ce4 100644 --- a/lib/workers/repository/index.js +++ b/lib/workers/repository/index.js @@ -50,7 +50,11 @@ async function renovateRepository(packageFileConfig) { ); if (config.repoIsOnboarded) { for (const branchName of Object.keys(branchUpgrades)) { - await branchWorker.processBranchUpgrades(branchUpgrades[branchName]); + await branchWorker.processBranchUpgrades( + branchUpgrades[branchName], + res.errors, + res.warnings + ); } } else { await onboarding.ensurePr(config, res); diff --git a/test/workers/branch/__snapshots__/index.spec.js.snap b/test/workers/branch/__snapshots__/index.spec.js.snap index b968d6c5247127a7e7a6acebf2d9a877fee69c4b..61d37a092e30d350b49c5656402d8cc4cf25713e 100644 --- a/test/workers/branch/__snapshots__/index.spec.js.snap +++ b/test/workers/branch/__snapshots__/index.spec.js.snap @@ -41,293 +41,3 @@ Object { ], } `; - -exports[`workers/branch generateConfig(branchUpgrades) uses group settings 1`] = ` -Object { - "assignees": Array [], - "autodiscover": false, - "automerge": "none", - "automergeType": "pr", - "branchName": "some-group-branchname", - "commitMessage": "{{semanticPrefix}}Renovate {{groupName}} packages", - "depTypes": Array [ - Object { - "depType": "dependencies", - "semanticPrefix": "fix: ", - }, - "devDependencies", - "optionalDependencies", - ], - "enabled": true, - "endpoint": null, - "githubAppId": undefined, - "githubAppKey": null, - "groupName": "some-group", - "groupSlug": null, - "ignoreDeps": Array [], - "ignoreFuture": true, - "ignoreUnstable": true, - "labels": Array [], - "lazyGrouping": true, - "lockFileMaintenance": Object { - "branchName": "renovate/lock-files", - "commitMessage": "{{semanticPrefix}}Update lock file", - "enabled": true, - "prBody": "This PR regenerates lock files to keep them up-to-date.", - "prTitle": "{{semanticPrefix}}Lock file maintenance", - "recreateClosed": true, - "schedule": "before 5am on monday", - }, - "logFile": null, - "logFileLevel": "debug", - "logLevel": "info", - "logger": Object { - "child": [Function], - "debug": [Function], - "error": [Function], - "fatal": [Function], - "info": [Function], - "trace": [Function], - "warn": [Function], - }, - "onboarding": true, - "packageFiles": Array [], - "packages": Array [], - "pinVersions": true, - "platform": "github", - "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request renovates the package group \\"{{groupName}}\\". - -{{#each upgrades as |upgrade|}} -- [{{upgrade.depName}}]({{upgrade.repositoryUrl}}): from \`{{upgrade.currentVersion}}\` to \`{{upgrade.newVersion}}\` -{{/each}} - -{{#unless isPin}} -### Commits - -{{#each upgrades as |upgrade|}} -{{#if upgrade.releases.length}} -<details> -<summary>{{upgrade.githubName}}</summary> -{{#each upgrade.releases as |release|}} - -#### {{release.version}} -{{#each release.commits as |commit|}} -- [\`{{commit.shortSha}}\`]({{commit.url}}){{commit.message}} -{{/each}} -{{/each}} - -</details> -{{/if}} -{{/each}} -{{/unless}} -<br /> - -This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://keylocation.sg/our-tech/renovate).", - "prCreation": "immediate", - "prTitle": "{{semanticPrefix}}Renovate {{groupName}} packages", - "rebaseStalePrs": false, - "recreateClosed": true, - "repositories": Array [], - "respectLatest": true, - "reviewers": Array [], - "schedule": Array [], - "semanticCommits": false, - "semanticPrefix": "chore: ", - "separateMajorReleases": true, - "timezone": null, - "token": null, - "upgrades": Array [ - Object { - "assignees": Array [], - "autodiscover": false, - "automerge": "none", - "automergeType": "pr", - "branchName": "some-group-branchname", - "commitMessage": "{{semanticPrefix}}Renovate {{groupName}} packages", - "depTypes": Array [ - Object { - "depType": "dependencies", - "semanticPrefix": "fix: ", - }, - "devDependencies", - "optionalDependencies", - ], - "enabled": true, - "endpoint": null, - "githubAppId": undefined, - "githubAppKey": null, - "groupName": "some-group", - "groupSlug": null, - "ignoreDeps": Array [], - "ignoreFuture": true, - "ignoreUnstable": true, - "labels": Array [], - "lazyGrouping": true, - "lockFileMaintenance": Object { - "branchName": "renovate/lock-files", - "commitMessage": "{{semanticPrefix}}Update lock file", - "enabled": true, - "prBody": "This PR regenerates lock files to keep them up-to-date.", - "prTitle": "{{semanticPrefix}}Lock file maintenance", - "recreateClosed": true, - "schedule": "before 5am on monday", - }, - "logFile": null, - "logFileLevel": "debug", - "logLevel": "info", - "logger": Object { - "child": [Function], - "debug": [Function], - "error": [Function], - "fatal": [Function], - "info": [Function], - "trace": [Function], - "warn": [Function], - }, - "onboarding": true, - "packageFiles": Array [], - "packages": Array [], - "pinVersions": true, - "platform": "github", - "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request renovates the package group \\"{{groupName}}\\". - -{{#each upgrades as |upgrade|}} -- [{{upgrade.depName}}]({{upgrade.repositoryUrl}}): from \`{{upgrade.currentVersion}}\` to \`{{upgrade.newVersion}}\` -{{/each}} - -{{#unless isPin}} -### Commits - -{{#each upgrades as |upgrade|}} -{{#if upgrade.releases.length}} -<details> -<summary>{{upgrade.githubName}}</summary> -{{#each upgrade.releases as |release|}} - -#### {{release.version}} -{{#each release.commits as |commit|}} -- [\`{{commit.shortSha}}\`]({{commit.url}}){{commit.message}} -{{/each}} -{{/each}} - -</details> -{{/if}} -{{/each}} -{{/unless}} -<br /> - -This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://keylocation.sg/our-tech/renovate).", - "prCreation": "immediate", - "prTitle": "{{semanticPrefix}}Renovate {{groupName}} packages", - "rebaseStalePrs": false, - "recreateClosed": true, - "repositories": Array [], - "respectLatest": true, - "reviewers": Array [], - "schedule": Array [], - "semanticCommits": false, - "semanticPrefix": "chore: ", - "separateMajorReleases": true, - "timezone": null, - "token": null, - "yarnCacheFolder": "/tmp/yarn-cache", - }, - Object { - "assignees": Array [], - "autodiscover": false, - "automerge": "none", - "automergeType": "pr", - "branchName": "some-group-branchname", - "commitMessage": "{{semanticPrefix}}Renovate {{groupName}} packages", - "depTypes": Array [ - Object { - "depType": "dependencies", - "semanticPrefix": "fix: ", - }, - "devDependencies", - "optionalDependencies", - ], - "enabled": true, - "endpoint": null, - "githubAppId": undefined, - "githubAppKey": null, - "groupName": "some-group", - "groupSlug": null, - "ignoreDeps": Array [], - "ignoreFuture": true, - "ignoreUnstable": true, - "labels": Array [], - "lazyGrouping": true, - "lockFileMaintenance": Object { - "branchName": "renovate/lock-files", - "commitMessage": "{{semanticPrefix}}Update lock file", - "enabled": true, - "prBody": "This PR regenerates lock files to keep them up-to-date.", - "prTitle": "{{semanticPrefix}}Lock file maintenance", - "recreateClosed": true, - "schedule": "before 5am on monday", - }, - "logFile": null, - "logFileLevel": "debug", - "logLevel": "info", - "logger": Object { - "child": [Function], - "debug": [Function], - "error": [Function], - "fatal": [Function], - "info": [Function], - "trace": [Function], - "warn": [Function], - }, - "onboarding": true, - "packageFiles": Array [], - "packages": Array [], - "pinVersions": true, - "platform": "github", - "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request renovates the package group \\"{{groupName}}\\". - -{{#each upgrades as |upgrade|}} -- [{{upgrade.depName}}]({{upgrade.repositoryUrl}}): from \`{{upgrade.currentVersion}}\` to \`{{upgrade.newVersion}}\` -{{/each}} - -{{#unless isPin}} -### Commits - -{{#each upgrades as |upgrade|}} -{{#if upgrade.releases.length}} -<details> -<summary>{{upgrade.githubName}}</summary> -{{#each upgrade.releases as |release|}} - -#### {{release.version}} -{{#each release.commits as |commit|}} -- [\`{{commit.shortSha}}\`]({{commit.url}}){{commit.message}} -{{/each}} -{{/each}} - -</details> -{{/if}} -{{/each}} -{{/unless}} -<br /> - -This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://keylocation.sg/our-tech/renovate).", - "prCreation": "immediate", - "prTitle": "{{semanticPrefix}}Renovate {{groupName}} packages", - "rebaseStalePrs": false, - "recreateClosed": true, - "repositories": Array [], - "respectLatest": true, - "reviewers": Array [], - "schedule": Array [], - "semanticCommits": false, - "semanticPrefix": "chore: ", - "separateMajorReleases": true, - "timezone": null, - "token": null, - "yarnCacheFolder": "/tmp/yarn-cache", - }, - ], - "yarnCacheFolder": "/tmp/yarn-cache", -} -`; diff --git a/test/workers/branch/index.spec.js b/test/workers/branch/index.spec.js index 8dfaadc457ad4cf992776f5181c1251d8fed712b..f2eb5506a70002621ccc500608245150516f1b64 100644 --- a/test/workers/branch/index.spec.js +++ b/test/workers/branch/index.spec.js @@ -382,7 +382,6 @@ describe('workers/branch', () => { config.group.branchName = 'some-group-branchname'; const branchUpgrades = [config, config]; const res = await branchWorker.generateConfig(branchUpgrades); - expect(res).toMatchSnapshot(); expect(res.branchName).toEqual(config.group.branchName); }); }); diff --git a/test/workers/package/__snapshots__/index.spec.js.snap b/test/workers/package/__snapshots__/index.spec.js.snap index 28ae93077fee838cc877179cab2396730e2c0a05..7c7e3242ee49867c6d0041b6b43002c78883514f 100644 --- a/test/workers/package/__snapshots__/index.spec.js.snap +++ b/test/workers/package/__snapshots__/index.spec.js.snap @@ -24,165 +24,3 @@ Array [ "repositoryUrl", ] `; - -exports[`lib/workers/package/index findUpgrades(config) returns error if no npm dep found 1`] = ` -Array [ - Object { - "assignees": Array [], - "automerge": "none", - "automergeType": "pr", - "branchName": "renovate/{{depName}}-{{newVersionMajor}}.x", - "commitMessage": "{{semanticPrefix}}Update dependency {{depName}} to version {{newVersion}}", - "depName": "foo", - "group": Object { - "branchName": "renovate/{{groupSlug}}", - "commitMessage": "{{semanticPrefix}}Renovate {{groupName}} packages", - "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request renovates the package group \\"{{groupName}}\\". - -{{#each upgrades as |upgrade|}} -- [{{upgrade.depName}}]({{upgrade.repositoryUrl}}): from \`{{upgrade.currentVersion}}\` to \`{{upgrade.newVersion}}\` -{{/each}} - -{{#unless isPin}} -### Commits - -{{#each upgrades as |upgrade|}} -{{#if upgrade.releases.length}} -<details> -<summary>{{upgrade.githubName}}</summary> -{{#each upgrade.releases as |release|}} - -#### {{release.version}} -{{#each release.commits as |commit|}} -- [\`{{commit.shortSha}}\`]({{commit.url}}){{commit.message}} -{{/each}} -{{/each}} - -</details> -{{/if}} -{{/each}} -{{/unless}} -<br /> - -This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://keylocation.sg/our-tech/renovate).", - "prTitle": "{{semanticPrefix}}Renovate {{groupName}} packages", - "recreateClosed": true, - }, - "groupName": null, - "groupSlug": null, - "labels": Array [], - "lazyGrouping": true, - "message": "Failed to look up dependency", - "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request updates dependency [{{depName}}]({{repositoryUrl}}) from version \`{{currentVersion}}\` to \`{{newVersion}}\` -{{#if releases.length}} - -### Commits - -<details> -<summary>{{githubName}}</summary> - -{{#each releases as |release|}} -#### {{release.version}} -{{#each release.commits as |commit|}} -- [\`{{commit.shortSha}}\`]({{commit.url}}) {{commit.message}} -{{/each}} -{{/each}} - -</details> -{{/if}} -<br /> - -This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://keylocation.sg/our-tech/renovate).", - "prCreation": "immediate", - "prTitle": "{{semanticPrefix}}{{#if isPin}}Pin{{else}}Update{{/if}} dependency {{depName}} to version {{#if isRange}}{{newVersion}}{{else}}{{#if isMajor}}{{newVersionMajor}}.x{{else}}{{newVersion}}{{/if}}{{/if}}", - "rebaseStalePrs": false, - "recreateClosed": false, - "repositoryUrl": "", - "reviewers": Array [], - "semanticCommits": false, - "semanticPrefix": "chore: ", - "upgradeType": "error", - }, -] -`; - -exports[`lib/workers/package/index findUpgrades(config) returns warning if warning found 1`] = ` -Array [ - Object { - "assignees": Array [], - "automerge": "none", - "automergeType": "pr", - "branchName": "renovate/{{depName}}-{{newVersionMajor}}.x", - "commitMessage": "{{semanticPrefix}}Update dependency {{depName}} to version {{newVersion}}", - "depName": "foo", - "group": Object { - "branchName": "renovate/{{groupSlug}}", - "commitMessage": "{{semanticPrefix}}Renovate {{groupName}} packages", - "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request renovates the package group \\"{{groupName}}\\". - -{{#each upgrades as |upgrade|}} -- [{{upgrade.depName}}]({{upgrade.repositoryUrl}}): from \`{{upgrade.currentVersion}}\` to \`{{upgrade.newVersion}}\` -{{/each}} - -{{#unless isPin}} -### Commits - -{{#each upgrades as |upgrade|}} -{{#if upgrade.releases.length}} -<details> -<summary>{{upgrade.githubName}}</summary> -{{#each upgrade.releases as |release|}} - -#### {{release.version}} -{{#each release.commits as |commit|}} -- [\`{{commit.shortSha}}\`]({{commit.url}}){{commit.message}} -{{/each}} -{{/each}} - -</details> -{{/if}} -{{/each}} -{{/unless}} -<br /> - -This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://keylocation.sg/our-tech/renovate).", - "prTitle": "{{semanticPrefix}}Renovate {{groupName}} packages", - "recreateClosed": true, - }, - "groupName": null, - "groupSlug": null, - "labels": Array [], - "lazyGrouping": true, - "message": "bad version", - "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request updates dependency [{{depName}}]({{repositoryUrl}}) from version \`{{currentVersion}}\` to \`{{newVersion}}\` -{{#if releases.length}} - -### Commits - -<details> -<summary>{{githubName}}</summary> - -{{#each releases as |release|}} -#### {{release.version}} -{{#each release.commits as |commit|}} -- [\`{{commit.shortSha}}\`]({{commit.url}}) {{commit.message}} -{{/each}} -{{/each}} - -</details> -{{/if}} -<br /> - -This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](https://keylocation.sg/our-tech/renovate).", - "prCreation": "immediate", - "prTitle": "{{semanticPrefix}}{{#if isPin}}Pin{{else}}Update{{/if}} dependency {{depName}} to version {{#if isRange}}{{newVersion}}{{else}}{{#if isMajor}}{{newVersionMajor}}.x{{else}}{{newVersion}}{{/if}}{{/if}}", - "rebaseStalePrs": false, - "recreateClosed": false, - "repositoryUrl": undefined, - "reviewers": Array [], - "semanticCommits": false, - "semanticPrefix": "chore: ", - "upgradeType": "warning", - }, -] -`; diff --git a/test/workers/package/index.spec.js b/test/workers/package/index.spec.js index fafbe18f4c13fca94724aca9ce46609aeaa6760e..f01f6c4e044062b713ecd134c3ce91970f9bd0a2 100644 --- a/test/workers/package/index.spec.js +++ b/test/workers/package/index.spec.js @@ -32,8 +32,8 @@ describe('lib/workers/package/index', () => { config.schedule = 'some schedule'; schedule.isScheduledNow.mockReturnValueOnce(true); const res = await pkgWorker.findUpgrades(config); + expect(res).toHaveLength(1); expect(res[0].upgradeType).toEqual('error'); - expect(res).toMatchSnapshot(); expect(npmApi.getDependency.mock.calls.length).toBe(1); }); it('returns warning if warning found', async () => { @@ -45,7 +45,7 @@ describe('lib/workers/package/index', () => { }, ]); const res = await pkgWorker.findUpgrades(config); - expect(res).toMatchSnapshot(); + expect(res[0].upgradeType).toEqual('warning'); }); it('returns array if upgrades found', async () => { npmApi.getDependency.mockReturnValueOnce({}); diff --git a/test/workers/pr/index.spec.js b/test/workers/pr/index.spec.js index fc1d6ad1c2f52943e3cf4469d68c5a2f40c91f47..e8a515674a5cb217bdfda52a89cbd542016bd19e 100644 --- a/test/workers/pr/index.spec.js +++ b/test/workers/pr/index.spec.js @@ -95,8 +95,8 @@ describe('workers/pr', () => { <ul> <li><a href="https://github.com/renovateapp/dummy/commit/abcdefghijklmnopqrstuvwxyz"><code>abcdefg</code></a> foo <a href="https://github.com/renovateapp/dummy/issues/3">#3</a></li> </ul> -<p></details><br /> -<br /></p> +<p></details></p> +<hr /> <p>This PR has been generated by <a href="https://keylocation.sg/our-tech/renovate">Renovate Bot</a>.</p>`, displayNumber: 'Existing PR', }; @@ -138,6 +138,12 @@ describe('workers/pr', () => { config.api.getBranchPr = jest.fn(); const pr = await prWorker.ensurePr([config], logger); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); + expect( + config.api.createPr.mock.calls[0][2].indexOf('Errors</h3>') + ).toEqual(-1); + expect( + config.api.createPr.mock.calls[0][2].indexOf('Warnings</h3>') + ).toEqual(-1); }); it('should add labels to new PR', async () => { config.api.getBranchPr = jest.fn(); @@ -166,6 +172,17 @@ describe('workers/pr', () => { expect(config.api.addAssignees.mock.calls.length).toBe(1); expect(config.api.addReviewers.mock.calls.length).toBe(1); }); + it('should display errors and warnings', async () => { + config.api.getBranchPr = jest.fn(); + const pr = await prWorker.ensurePr([config], logger, [{}], [{}]); + expect( + config.api.createPr.mock.calls[0][2].indexOf('Errors</h3>') + ).not.toEqual(-1); + expect( + config.api.createPr.mock.calls[0][2].indexOf('Warnings</h3>') + ).not.toEqual(-1); + expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); + }); it('should not add assignees and reviewers to new PR if automerging enabled', async () => { config.api.getBranchPr = jest.fn(); config.api.addAssignees = jest.fn();