From 1c115ae6b67ae75f61f92a63c1833039ef55a0ef Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Mon, 28 May 2018 13:25:54 +0200
Subject: [PATCH] refactor: move getRangeStrategy into npm/lookup

---
 lib/manager/npm/lookup/index.js       |  6 ++--
 lib/manager/npm/lookup/range.js       | 45 +++++++++++++++++++++++++
 lib/manager/npm/package.js            | 48 +--------------------------
 test/manager/npm/lookup/range.spec.js | 46 +++++++++++++++++++++++++
 test/manager/npm/package.spec.js      | 42 -----------------------
 5 files changed, 95 insertions(+), 92 deletions(-)
 create mode 100644 lib/manager/npm/lookup/range.js
 create mode 100644 test/manager/npm/lookup/range.spec.js

diff --git a/lib/manager/npm/lookup/index.js b/lib/manager/npm/lookup/index.js
index 2e25482e8b..5bf108c9a6 100644
--- a/lib/manager/npm/lookup/index.js
+++ b/lib/manager/npm/lookup/index.js
@@ -1,7 +1,7 @@
 const versioning = require('../../../versioning/semver');
 const moment = require('moment');
 const { getRollbackUpdate } = require('./rollback');
-
+const { getRangeStrategy } = require('./range');
 const { filterVersions } = require('./filter');
 
 const {
@@ -20,7 +20,7 @@ module.exports = {
 };
 
 function lookupUpdates(dependency, config) {
-  const { currentVersion, lockedVersion, rangeStrategy } = config;
+  const { currentVersion, lockedVersion } = config;
   const { latestVersion } = dependency;
   const allVersions = Object.keys(dependency.versions);
   if (allVersions.length === 0) {
@@ -41,7 +41,7 @@ function lookupUpdates(dependency, config) {
   }
   const fromVersion = getFromVersion(
     currentVersion,
-    rangeStrategy,
+    getRangeStrategy(config),
     lockedVersion,
     allVersions
   );
diff --git a/lib/manager/npm/lookup/range.js b/lib/manager/npm/lookup/range.js
new file mode 100644
index 0000000000..7962267887
--- /dev/null
+++ b/lib/manager/npm/lookup/range.js
@@ -0,0 +1,45 @@
+const { parseRange } = require('semver-utils');
+
+module.exports = {
+  getRangeStrategy,
+};
+
+function getRangeStrategy(config) {
+  const {
+    depType,
+    depName,
+    packageJsonType,
+    currentVersion,
+    rangeStrategy,
+  } = config;
+  const isComplexRange = parseRange(currentVersion).length > 1;
+  if (rangeStrategy === 'bump' && isComplexRange) {
+    logger.info(
+      { currentVersion },
+      'Replacing bump strategy for complex range with widen'
+    );
+    return 'widen';
+  }
+  if (rangeStrategy !== 'auto') {
+    return rangeStrategy;
+  }
+  if (depType === 'devDependencies') {
+    // Always pin devDependencies
+    logger.debug({ depName }, 'Pinning devDependency');
+    return 'pin';
+  }
+  if (depType === 'dependencies' && packageJsonType === 'app') {
+    // Pin dependencies if we're pretty sure it's not a browser library
+    logger.debug('Pinning app dependency');
+    return 'pin';
+  }
+  if (depType === 'peerDependencies') {
+    // Widen peer dependencies
+    logger.debug('Widening peer dependencies');
+    return 'widen';
+  }
+  if (isComplexRange) {
+    return 'widen';
+  }
+  return 'replace';
+}
diff --git a/lib/manager/npm/package.js b/lib/manager/npm/package.js
index d6cae10aa6..19963ff9ec 100644
--- a/lib/manager/npm/package.js
+++ b/lib/manager/npm/package.js
@@ -2,53 +2,11 @@ const npmApi = require('../../datasource/npm');
 const lookup = require('./lookup');
 const { isValid } = require('../../versioning/semver');
 const nodeManager = require('../_helpers/node/package');
-const { parseRange } = require('semver-utils');
 
 module.exports = {
-  getRangeStrategy,
   getPackageUpdates,
 };
 
-function getRangeStrategy(config) {
-  const {
-    depType,
-    depName,
-    packageJsonType,
-    currentVersion,
-    rangeStrategy,
-  } = config;
-  const isComplexRange = parseRange(currentVersion).length > 1;
-  if (rangeStrategy === 'bump' && isComplexRange) {
-    logger.info(
-      { currentVersion },
-      'Replacing bump strategy for complex range with widen'
-    );
-    return 'widen';
-  }
-  if (rangeStrategy !== 'auto') {
-    return rangeStrategy;
-  }
-  if (depType === 'devDependencies') {
-    // Always pin devDependencies
-    logger.debug({ depName }, 'Pinning devDependency');
-    return 'pin';
-  }
-  if (depType === 'dependencies' && packageJsonType === 'app') {
-    // Pin dependencies if we're pretty sure it's not a browser library
-    logger.debug('Pinning app dependency');
-    return 'pin';
-  }
-  if (depType === 'peerDependencies') {
-    // Widen peer dependencies
-    logger.debug('Widening peer dependencies');
-    return 'widen';
-  }
-  if (isComplexRange) {
-    return 'widen';
-  }
-  return 'replace';
-}
-
 async function getPackageUpdates(config) {
   logger.trace({ config }, `npm.getPackageUpdates()`);
   const { depType, depName, currentVersion } = config;
@@ -76,17 +34,13 @@ async function getPackageUpdates(config) {
     logger.debug(results[0].message);
     return results;
   }
-  const rangeStrategy = getRangeStrategy(config);
   npmApi.setNpmrc(
     config.npmrc,
     config.global ? config.global.exposeEnv : false
   );
   const npmDep = await npmApi.getDependency(depName);
   if (npmDep) {
-    results = lookup.lookupUpdates(npmDep, {
-      ...config,
-      rangeStrategy,
-    });
+    results = lookup.lookupUpdates(npmDep, config);
     if (results.length > 0) {
       logger.info(
         { dependency: depName },
diff --git a/test/manager/npm/lookup/range.spec.js b/test/manager/npm/lookup/range.spec.js
new file mode 100644
index 0000000000..3891f1778b
--- /dev/null
+++ b/test/manager/npm/lookup/range.spec.js
@@ -0,0 +1,46 @@
+const {
+  getRangeStrategy,
+} = require('../../../../lib/manager/npm/lookup/range');
+
+describe('getRangeStrategy', () => {
+  it('returns same if not auto', () => {
+    const config = { rangeStrategy: 'widen' };
+    expect(getRangeStrategy(config)).toEqual('widen');
+  });
+  it('pins devDependencies', () => {
+    const config = { rangeStrategy: 'auto', depType: 'devDependencies' };
+    expect(getRangeStrategy(config)).toEqual('pin');
+  });
+  it('pins app dependencies', () => {
+    const config = {
+      rangeStrategy: 'auto',
+      depType: 'dependencies',
+      packageJsonType: 'app',
+    };
+    expect(getRangeStrategy(config)).toEqual('pin');
+  });
+  it('widens peerDependencies', () => {
+    const config = { rangeStrategy: 'auto', depType: 'peerDependencies' };
+    expect(getRangeStrategy(config)).toEqual('widen');
+  });
+  it('widens complex ranges', () => {
+    const config = {
+      rangeStrategy: 'auto',
+      depType: 'dependencies',
+      currentVersion: '^1.6.0 || ^2.0.0',
+    };
+    expect(getRangeStrategy(config)).toEqual('widen');
+  });
+  it('widens complex bump', () => {
+    const config = {
+      rangeStrategy: 'bump',
+      depType: 'dependencies',
+      currentVersion: '^1.6.0 || ^2.0.0',
+    };
+    expect(getRangeStrategy(config)).toEqual('widen');
+  });
+  it('defaults to replace', () => {
+    const config = { rangeStrategy: 'auto', depType: 'dependencies' };
+    expect(getRangeStrategy(config)).toEqual('replace');
+  });
+});
diff --git a/test/manager/npm/package.spec.js b/test/manager/npm/package.spec.js
index 162124db68..7db607dcbf 100644
--- a/test/manager/npm/package.spec.js
+++ b/test/manager/npm/package.spec.js
@@ -8,48 +8,6 @@ jest.mock('../../../lib/manager/_helpers/node/package');
 npmApi.getDependency = jest.fn();
 
 describe('lib/manager/npm/package', () => {
-  describe('getRangeStrategy', () => {
-    it('returns same if not auto', () => {
-      const config = { rangeStrategy: 'widen' };
-      expect(npm.getRangeStrategy(config)).toEqual('widen');
-    });
-    it('pins devDependencies', () => {
-      const config = { rangeStrategy: 'auto', depType: 'devDependencies' };
-      expect(npm.getRangeStrategy(config)).toEqual('pin');
-    });
-    it('pins app dependencies', () => {
-      const config = {
-        rangeStrategy: 'auto',
-        depType: 'dependencies',
-        packageJsonType: 'app',
-      };
-      expect(npm.getRangeStrategy(config)).toEqual('pin');
-    });
-    it('widens peerDependencies', () => {
-      const config = { rangeStrategy: 'auto', depType: 'peerDependencies' };
-      expect(npm.getRangeStrategy(config)).toEqual('widen');
-    });
-    it('widens complex ranges', () => {
-      const config = {
-        rangeStrategy: 'auto',
-        depType: 'dependencies',
-        currentVersion: '^1.6.0 || ^2.0.0',
-      };
-      expect(npm.getRangeStrategy(config)).toEqual('widen');
-    });
-    it('widens complex bump', () => {
-      const config = {
-        rangeStrategy: 'bump',
-        depType: 'dependencies',
-        currentVersion: '^1.6.0 || ^2.0.0',
-      };
-      expect(npm.getRangeStrategy(config)).toEqual('widen');
-    });
-    it('defaults to replace', () => {
-      const config = { rangeStrategy: 'auto', depType: 'dependencies' };
-      expect(npm.getRangeStrategy(config)).toEqual('replace');
-    });
-  });
   describe('getPackageUpdates', () => {
     let config;
     beforeEach(() => {
-- 
GitLab