From 45d0dcf4923504a8127ebe480d7ca2de84095e71 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Mon, 11 Jun 2018 05:52:46 +0200
Subject: [PATCH] =?UTF-8?q?fix:=20pass=20auto=E2=80=99d=20rangeStrategy=20?=
 =?UTF-8?q?to=20getNewValue?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #2111
---
 lib/versioning/pep440/range.js                |  6 +-
 lib/versioning/semver-composer/index.js       | 10 ++-
 lib/versioning/semver/range.js                |  8 +-
 .../repository/process/lookup/index.js        | 14 ++-
 .../repository/process/lookup/rollback.js     |  2 +-
 test/versioning/pep440.spec.js                | 12 +--
 test/versioning/semver-composer.spec.js       | 48 +++++------
 test/versioning/semver.spec.js                | 86 +++++--------------
 8 files changed, 76 insertions(+), 110 deletions(-)

diff --git a/lib/versioning/pep440/range.js b/lib/versioning/pep440/range.js
index 5e9cb17f5f..dbfa449b2a 100644
--- a/lib/versioning/pep440/range.js
+++ b/lib/versioning/pep440/range.js
@@ -2,10 +2,10 @@ module.exports = {
   getNewValue,
 };
 
-function getNewValue(config, fromVersion, toVersion) {
-  if (config.rangeStrategy === 'pin' || config.currentValue.startsWith('==')) {
+function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) {
+  if (rangeStrategy === 'pin' || currentValue.startsWith('==')) {
     return '==' + toVersion;
   }
-  logger.warn('Unsupported currentValue: ' + config.currentValue);
+  logger.warn('Unsupported currentValue: ' + currentValue);
   return toVersion;
 }
diff --git a/lib/versioning/semver-composer/index.js b/lib/versioning/semver-composer/index.js
index 0148e9f0b2..67d773c563 100644
--- a/lib/versioning/semver-composer/index.js
+++ b/lib/versioning/semver-composer/index.js
@@ -26,13 +26,17 @@ const maxSatisfyingVersion = (versions, range) =>
 const minSatisfyingVersion = (versions, range) =>
   semver.minSatisfyingVersion(versions, composer2npm(range));
 
-function getNewValue(config, fromVersion, toVersion) {
-  const { currentValue } = config;
+function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) {
   if (
     semver.isValid(currentValue) &&
     composer2npm(currentValue) === currentValue
   ) {
-    return semver.getNewValue(config, fromVersion, toVersion);
+    return semver.getNewValue(
+      currentValue,
+      rangeStrategy,
+      fromVersion,
+      toVersion
+    );
   }
   const toMajor = semver.getMajor(toVersion);
   const toMinor = semver.getMinor(toVersion);
diff --git a/lib/versioning/semver/range.js b/lib/versioning/semver/range.js
index 8a7bf46597..ce3e62b2ee 100644
--- a/lib/versioning/semver/range.js
+++ b/lib/versioning/semver/range.js
@@ -5,8 +5,7 @@ module.exports = {
   getNewValue,
 };
 
-function getNewValue(config, fromVersion, toVersion) {
-  const { currentValue, rangeStrategy } = config;
+function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) {
   if (rangeStrategy === 'pin' || isVersion(currentValue)) {
     return toVersion;
   }
@@ -14,7 +13,8 @@ function getNewValue(config, fromVersion, toVersion) {
   const element = parsedRange[parsedRange.length - 1];
   if (rangeStrategy === 'widen') {
     const newValue = getNewValue(
-      { ...config, rangeStrategy: 'replace' },
+      currentValue,
+      'replace',
       fromVersion,
       toVersion
     );
@@ -40,7 +40,7 @@ function getNewValue(config, fromVersion, toVersion) {
   }
   // console.log(range);
   // Simple range
-  if (config.rangeStrategy === 'bump') {
+  if (rangeStrategy === 'bump') {
     if (parsedRange.length === 1) {
       if (element.operator === '^') {
         const split = currentValue.split('.');
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index 3609e99e44..0b314fa1c0 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/lookup/index.js
@@ -74,7 +74,12 @@ async function lookupUpdates(config) {
     updates.push({
       type: 'pin',
       isPin: true,
-      newValue: getNewValue(config, fromVersion, fromVersion),
+      newValue: getNewValue(
+        currentValue,
+        rangeStrategy,
+        fromVersion,
+        fromVersion
+      ),
       newMajor: getMajor(fromVersion),
     });
   }
@@ -91,7 +96,12 @@ async function lookupUpdates(config) {
   const buckets = {};
   for (const toVersion of filteredVersions) {
     const update = { fromVersion, toVersion };
-    update.newValue = getNewValue(config, fromVersion, toVersion);
+    update.newValue = getNewValue(
+      currentValue,
+      rangeStrategy,
+      fromVersion,
+      toVersion
+    );
     if (!update.newValue || update.newValue === currentValue) {
       continue; // eslint-disable-line no-continue
     }
diff --git a/lib/workers/repository/process/lookup/rollback.js b/lib/workers/repository/process/lookup/rollback.js
index c62cef0a3c..91506c4016 100644
--- a/lib/workers/repository/process/lookup/rollback.js
+++ b/lib/workers/repository/process/lookup/rollback.js
@@ -35,7 +35,7 @@ function getRollbackUpdate(config, versions) {
   lessThanVersions.sort(sortVersions);
   const toVersion = lessThanVersions.pop();
   let fromVersion;
-  const newValue = getNewValue(config, fromVersion, toVersion);
+  const newValue = getNewValue(currentValue, 'replace', fromVersion, toVersion);
   return {
     type: 'rollback',
     branchName:
diff --git a/test/versioning/pep440.spec.js b/test/versioning/pep440.spec.js
index df6ec7d434..83998bb82f 100644
--- a/test/versioning/pep440.spec.js
+++ b/test/versioning/pep440.spec.js
@@ -80,13 +80,13 @@ describe('pep440.minSatisfyingVersion(versions, range)', () => {
 
 describe('pep440.getNewValue()', () => {
   it('returns double equals', () => {
-    expect(
-      pep440.getNewValue({ currentValue: '==1.0.0' }, '1.0.0', '1.0.1')
-    ).toBe('==1.0.1');
+    expect(pep440.getNewValue('==1.0.0', 'replace', '1.0.0', '1.0.1')).toBe(
+      '==1.0.1'
+    );
   });
   it('returns version', () => {
-    expect(
-      pep440.getNewValue({ currentValue: '>=1.0.0' }, '1.0.0', '1.0.1')
-    ).toBe('1.0.1');
+    expect(pep440.getNewValue('>=1.0.0', 'replace', '1.0.0', '1.0.1')).toBe(
+      '1.0.1'
+    );
   });
 });
diff --git a/test/versioning/semver-composer.spec.js b/test/versioning/semver-composer.spec.js
index 7cd77f7195..637818cade 100644
--- a/test/versioning/semver-composer.spec.js
+++ b/test/versioning/semver-composer.spec.js
@@ -62,41 +62,33 @@ describe('semver.matches()', () => {
 });
 describe('semver.getNewValue()', () => {
   it('bumps short caret to same', () => {
-    expect(
-      semver.getNewValue(
-        { currentValue: '^1.0', rangeStrategy: 'bump' },
-        '1.0.0',
-        '1.0.7'
-      )
-    ).toEqual('^1.0');
+    expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.0.7')).toEqual(
+      '^1.0'
+    );
   });
   it('handles tilde zero', () => {
-    expect(
-      semver.getNewValue({ currentValue: '~0.2' }, '0.2.0', '0.3.0')
-    ).toEqual('~0.3');
-    expect(
-      semver.getNewValue({ currentValue: '~0.2' }, '0.2.0', '1.1.0')
-    ).toEqual('~1.0');
+    expect(semver.getNewValue('~0.2', 'replace', '0.2.0', '0.3.0')).toEqual(
+      '~0.3'
+    );
+    expect(semver.getNewValue('~0.2', 'replace', '0.2.0', '1.1.0')).toEqual(
+      '~1.0'
+    );
   });
   it('handles tilde major', () => {
-    expect(
-      semver.getNewValue({ currentValue: '~4' }, '4.0.0', '4.2.0')
-    ).toEqual('~4');
-    expect(
-      semver.getNewValue({ currentValue: '~4' }, '4.0.0', '5.1.0')
-    ).toEqual('~5');
+    expect(semver.getNewValue('~4', 'replace', '4.0.0', '4.2.0')).toEqual('~4');
+    expect(semver.getNewValue('~4', 'replace', '4.0.0', '5.1.0')).toEqual('~5');
   });
   it('handles tilde minor', () => {
-    expect(
-      semver.getNewValue({ currentValue: '~4.0' }, '4.0.0', '4.2.0')
-    ).toEqual('~4.2');
-    expect(
-      semver.getNewValue({ currentValue: '~4.0' }, '4.0.0', '5.1.0')
-    ).toEqual('~5.1');
+    expect(semver.getNewValue('~4.0', 'replace', '4.0.0', '4.2.0')).toEqual(
+      '~4.2'
+    );
+    expect(semver.getNewValue('~4.0', 'replace', '4.0.0', '5.1.0')).toEqual(
+      '~5.1'
+    );
   });
   it('returns toVersion if unsupported', () => {
-    expect(
-      semver.getNewValue({ currentValue: '+4.0.0' }, '4.0.0', '4.2.0')
-    ).toEqual('4.2.0');
+    expect(semver.getNewValue('+4.0.0', 'replace', '4.0.0', '4.2.0')).toEqual(
+      '4.2.0'
+    );
   });
 });
diff --git a/test/versioning/semver.spec.js b/test/versioning/semver.spec.js
index 451a5a0126..2ee12a224e 100644
--- a/test/versioning/semver.spec.js
+++ b/test/versioning/semver.spec.js
@@ -41,84 +41,44 @@ describe('semver.isSingleVersion()', () => {
 });
 describe('semver.getNewValue()', () => {
   it('bumps equals', () => {
-    expect(
-      semver.getNewValue(
-        { currentValue: '=1.0.0', rangeStrategy: 'bump' },
-        '1.0.0',
-        '1.1.0'
-      )
-    ).toEqual('=1.1.0');
+    expect(semver.getNewValue('=1.0.0', 'bump', '1.0.0', '1.1.0')).toEqual(
+      '=1.1.0'
+    );
   });
   it('bumps short caret to same', () => {
-    expect(
-      semver.getNewValue(
-        { currentValue: '^1.0', rangeStrategy: 'bump' },
-        '1.0.0',
-        '1.0.7'
-      )
-    ).toEqual('^1.0');
+    expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.0.7')).toEqual(
+      '^1.0'
+    );
   });
   it('bumps short caret to new', () => {
-    expect(
-      semver.getNewValue(
-        { currentValue: '^1.0', rangeStrategy: 'bump' },
-        '1.0.0',
-        '1.1.7'
-      )
-    ).toEqual('^1.1');
+    expect(semver.getNewValue('^1.0', 'bump', '1.0.0', '1.1.7')).toEqual(
+      '^1.1'
+    );
   });
   it('bumps short tilde', () => {
-    expect(
-      semver.getNewValue(
-        { currentValue: '~1.0', rangeStrategy: 'bump' },
-        '1.0.0',
-        '1.1.7'
-      )
-    ).toEqual('~1.1');
+    expect(semver.getNewValue('~1.0', 'bump', '1.0.0', '1.1.7')).toEqual(
+      '~1.1'
+    );
   });
   it('updates naked caret', () => {
-    expect(
-      semver.getNewValue(
-        { currentValue: '^1', rangeStrategy: 'bump' },
-        '1.0.0',
-        '2.1.7'
-      )
-    ).toEqual('^2');
+    expect(semver.getNewValue('^1', 'bump', '1.0.0', '2.1.7')).toEqual('^2');
   });
   it('bumps naked tilde', () => {
-    expect(
-      semver.getNewValue(
-        { currentValue: '~1', rangeStrategy: 'bump' },
-        '1.0.0',
-        '1.1.7'
-      )
-    ).toEqual('~1');
+    expect(semver.getNewValue('~1', 'bump', '1.0.0', '1.1.7')).toEqual('~1');
   });
   it('replaces equals', () => {
-    expect(
-      semver.getNewValue(
-        { currentValue: '=1.0.0', rangeStrategy: 'replace' },
-        '1.0.0',
-        '1.1.0'
-      )
-    ).toEqual('=1.1.0');
+    expect(semver.getNewValue('=1.0.0', 'replace', '1.0.0', '1.1.0')).toEqual(
+      '=1.1.0'
+    );
   });
   it('handles long asterisk', () => {
-    expect(
-      semver.getNewValue(
-        { currentValue: '1.0.*', rangeStrategy: 'replace' },
-        '1.0.0',
-        '1.1.0'
-      )
-    ).toEqual('1.1.*');
+    expect(semver.getNewValue('1.0.*', 'replace', '1.0.0', '1.1.0')).toEqual(
+      '1.1.*'
+    );
   });
   it('handles short asterisk', () => {
-    expect(
-      semver.getNewValue(
-        { currentValue: '1.*', rangeStrategy: 'replace' },
-        '1.0.0',
-        '2.1.0'
-      )
-    ).toEqual('2.*');
+    expect(semver.getNewValue('1.*', 'replace', '1.0.0', '2.1.0')).toEqual(
+      '2.*'
+    );
   });
 });
-- 
GitLab