From bc684c7b292c0c7faab99b0e7d3b8d22fef5435f Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Tue, 27 Feb 2018 14:50:09 +0100
Subject: [PATCH] fix: implicit patch-only upgrade
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Use type ‘patch’ only when patch automerge is true AND minor automerge is not true.
---
 lib/workers/package/versions.js               |  7 ++++--
 .../__snapshots__/versions.spec.js.snap       | 25 +++++++++++++++++++
 test/workers/package/versions.spec.js         | 16 +++++++++++-
 3 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/lib/workers/package/versions.js b/lib/workers/package/versions.js
index 413ae1e450..4ee2386388 100644
--- a/lib/workers/package/versions.js
+++ b/lib/workers/package/versions.js
@@ -108,13 +108,16 @@ function determineUpgrades(npmDep, config) {
       // Group by major versions
       const newVersionMajor = semver.major(newVersion);
       const newVersionMinor = semver.minor(newVersion);
-      const hasPatchAutomerge = config.patch && config.patch.automerge === true;
+      const hasPatchOnlyAutomerge =
+        config.patch &&
+        config.patch.automerge === true &&
+        (config.minor && config.minor.automerge !== true);
       let type;
       if (newVersionMajor > semver.major(changeLogFromVersion)) {
         type = 'major';
       } else if (
         newVersionMinor === semver.minor(changeLogFromVersion) &&
-        (config.separatePatchReleases || hasPatchAutomerge)
+        (config.separatePatchReleases || hasPatchOnlyAutomerge)
       ) {
         // Only use patch if configured to
         type = 'patch';
diff --git a/test/workers/package/__snapshots__/versions.spec.js.snap b/test/workers/package/__snapshots__/versions.spec.js.snap
index 997c2f2d81..1bd86b1f0a 100644
--- a/test/workers/package/__snapshots__/versions.spec.js.snap
+++ b/test/workers/package/__snapshots__/versions.spec.js.snap
@@ -158,6 +158,31 @@ Array [
 ]
 `;
 
+exports[`workers/package/versions .determineUpgrades(npmDep, config) returns minor update if automerging both patch and minor 1`] = `
+Array [
+  Object {
+    "changeLogFromVersion": "0.9.0",
+    "changeLogToVersion": "0.9.7",
+    "isMinor": true,
+    "newVersion": "0.9.7",
+    "newVersionMajor": 0,
+    "newVersionMinor": 9,
+    "type": "minor",
+    "unpublishable": false,
+  },
+  Object {
+    "changeLogFromVersion": "0.9.0",
+    "changeLogToVersion": "1.4.1",
+    "isMajor": true,
+    "newVersion": "1.4.1",
+    "newVersionMajor": 1,
+    "newVersionMinor": 4,
+    "type": "major",
+    "unpublishable": false,
+  },
+]
+`;
+
 exports[`workers/package/versions .determineUpgrades(npmDep, config) returns minor update if separate patches not configured 1`] = `
 Array [
   Object {
diff --git a/test/workers/package/versions.spec.js b/test/workers/package/versions.spec.js
index b6525ed0ba..c883196065 100644
--- a/test/workers/package/versions.spec.js
+++ b/test/workers/package/versions.spec.js
@@ -69,7 +69,21 @@ describe('workers/package/versions', () => {
         automerge: true,
       };
       config.currentVersion = '0.9.0';
-      expect(versions.determineUpgrades(qJson, config)).toMatchSnapshot();
+      const res = versions.determineUpgrades(qJson, config);
+      expect(res).toMatchSnapshot();
+      expect(res[0].type).toEqual('patch');
+    });
+    it('returns minor update if automerging both patch and minor', () => {
+      config.patch = {
+        automerge: true,
+      };
+      config.minor = {
+        automerge: true,
+      };
+      config.currentVersion = '0.9.0';
+      const res = versions.determineUpgrades(qJson, config);
+      expect(res).toMatchSnapshot();
+      expect(res[0].type).toEqual('minor');
     });
     it('returns patch update if separatePatchReleases', () => {
       config.separatePatchReleases = true;
-- 
GitLab