From 527c355b487c80ffa39def7f5d840eab89e85b65 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 3 Jun 2018 14:25:05 +0200
Subject: [PATCH] refactor: move getRangeStrategy to manager (#2072)

---
 lib/manager/index.js                          | 13 ++++++++++
 lib/manager/npm/index.js                      |  2 ++
 .../process/lookup => manager/npm}/range.js   |  0
 .../repository/process/lookup/index.js        |  2 +-
 .../lookup => manager/npm}/range.spec.js      |  4 +--
 test/manager/range.spec.js                    | 25 +++++++++++++++++++
 .../repository/process/lookup/index.spec.js   |  1 +
 7 files changed, 43 insertions(+), 4 deletions(-)
 rename lib/{workers/repository/process/lookup => manager/npm}/range.js (100%)
 rename test/{workers/repository/process/lookup => manager/npm}/range.spec.js (93%)
 create mode 100644 test/manager/range.spec.js

diff --git a/lib/manager/index.js b/lib/manager/index.js
index 517032dcc8..d4b38352cd 100644
--- a/lib/manager/index.js
+++ b/lib/manager/index.js
@@ -44,3 +44,16 @@ for (const f of managerFunctions) {
     return null;
   };
 }
+
+module.exports.getRangeStrategy = config => {
+  const { manager, rangeStrategy } = config;
+  if (managers[manager].getRangeStrategy) {
+    // Use manager's own function if it exists
+    return managers[manager].getRangeStrategy(config);
+  }
+  if (rangeStrategy === 'auto') {
+    // default to 'replace' for auto
+    return 'replace';
+  }
+  return config.rangeStrategy;
+};
diff --git a/lib/manager/npm/index.js b/lib/manager/npm/index.js
index 7e2a63ab19..79e23f9fdc 100644
--- a/lib/manager/npm/index.js
+++ b/lib/manager/npm/index.js
@@ -1,9 +1,11 @@
 const { extractDependencies, postExtract } = require('./extract');
 const { updateDependency } = require('./update');
+const { getRangeStrategy } = require('./range');
 
 module.exports = {
   extractDependencies,
   postExtract,
+  getRangeStrategy,
   updateDependency,
   supportsLockFileMaintenance: true,
 };
diff --git a/lib/workers/repository/process/lookup/range.js b/lib/manager/npm/range.js
similarity index 100%
rename from lib/workers/repository/process/lookup/range.js
rename to lib/manager/npm/range.js
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index 408f9dca0e..2e42480f44 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/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 { getRangeStrategy } = require('../../../../manager');
 const { filterVersions } = require('./filter');
 const npmApi = require('../../../../datasource/npm');
 const github = require('../../../../datasource/github');
diff --git a/test/workers/repository/process/lookup/range.spec.js b/test/manager/npm/range.spec.js
similarity index 93%
rename from test/workers/repository/process/lookup/range.spec.js
rename to test/manager/npm/range.spec.js
index f7e3622095..93e4235da5 100644
--- a/test/workers/repository/process/lookup/range.spec.js
+++ b/test/manager/npm/range.spec.js
@@ -1,6 +1,4 @@
-const {
-  getRangeStrategy,
-} = require('../../../../../lib/workers/repository/process/lookup/range');
+const { getRangeStrategy } = require('../../../lib/manager/npm');
 
 describe('getRangeStrategy', () => {
   it('returns same if not auto', () => {
diff --git a/test/manager/range.spec.js b/test/manager/range.spec.js
new file mode 100644
index 0000000000..1f45419e2f
--- /dev/null
+++ b/test/manager/range.spec.js
@@ -0,0 +1,25 @@
+const { getRangeStrategy } = require('../../lib/manager');
+
+describe('getRangeStrategy', () => {
+  it('returns same if not auto', () => {
+    const config = { manager: 'npm', rangeStrategy: 'widen' };
+    expect(getRangeStrategy(config)).toEqual('widen');
+  });
+  it('returns manager strategy', () => {
+    const config = {
+      manager: 'npm',
+      rangeStrategy: 'auto',
+      depType: 'dependencies',
+      packageJsonType: 'app',
+    };
+    expect(getRangeStrategy(config)).toEqual('pin');
+  });
+  it('defaults to replace', () => {
+    const config = { manager: 'circleci', rangeStrategy: 'auto' };
+    expect(getRangeStrategy(config)).toEqual('replace');
+  });
+  it('returns rangeStrategy if not auto', () => {
+    const config = { manager: 'circleci', rangeStrategy: 'future' };
+    expect(getRangeStrategy(config)).toEqual('future');
+  });
+});
diff --git a/test/workers/repository/process/lookup/index.spec.js b/test/workers/repository/process/lookup/index.spec.js
index 11ecaee637..4083507580 100644
--- a/test/workers/repository/process/lookup/index.spec.js
+++ b/test/workers/repository/process/lookup/index.spec.js
@@ -15,6 +15,7 @@ let config;
 describe('manager/npm/lookup', () => {
   beforeEach(() => {
     config = { ...require('../../../../../lib/config/defaults').getConfig() };
+    config.manager = 'npm';
     config.rangeStrategy = 'replace';
     jest.resetAllMocks();
   });
-- 
GitLab