From 1e5a5cab795fe35cbbaf3d7d836d2905bf41307d Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@keylocation.sg>
Date: Fri, 3 Nov 2017 07:43:26 +0100
Subject: [PATCH] refactor: move config globals inside functions (#1088)

This was necessary when attempting to use jest mock all
---
 lib/config/massage.js    | 15 +++++++++------
 lib/config/migration.js  | 11 +++++++----
 lib/config/presets.js    |  3 ++-
 lib/config/validation.js | 11 +++++++----
 4 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/lib/config/massage.js b/lib/config/massage.js
index b66c6f02e2..4ce2b20a8b 100644
--- a/lib/config/massage.js
+++ b/lib/config/massage.js
@@ -1,12 +1,7 @@
 const deepcopy = require('deepcopy');
 const options = require('./definitions').getOptions();
 
-const allowedStrings = [];
-options.forEach(option => {
-  if (option.allowString) {
-    allowedStrings.push(option.name);
-  }
-});
+let allowedStrings;
 
 module.exports = {
   massageConfig,
@@ -14,6 +9,14 @@ module.exports = {
 
 // Returns a massaged config
 function massageConfig(config) {
+  if (!allowedStrings) {
+    allowedStrings = [];
+    options.forEach(option => {
+      if (option.allowString) {
+        allowedStrings.push(option.name);
+      }
+    });
+  }
   const massagedConfig = deepcopy(config);
   for (const key of Object.keys(config)) {
     const val = config[key];
diff --git a/lib/config/migration.js b/lib/config/migration.js
index a97f9c2797..afe19143d1 100644
--- a/lib/config/migration.js
+++ b/lib/config/migration.js
@@ -2,10 +2,7 @@ const later = require('later');
 const deepcopy = require('deepcopy');
 const options = require('./definitions').getOptions();
 
-const optionTypes = {};
-options.forEach(option => {
-  optionTypes[option.name] = option.type;
-});
+let optionTypes;
 
 module.exports = {
   migrateConfig,
@@ -27,6 +24,12 @@ const removedOptions = [
 
 // Returns a migrated config
 function migrateConfig(config) {
+  if (!optionTypes) {
+    optionTypes = {};
+    options.forEach(option => {
+      optionTypes[option.name] = option.type;
+    });
+  }
   let isMigrated = false;
   const migratedConfig = deepcopy(config);
   for (const key of Object.keys(config)) {
diff --git a/lib/config/presets.js b/lib/config/presets.js
index 096fedcf66..703c39c5f5 100644
--- a/lib/config/presets.js
+++ b/lib/config/presets.js
@@ -161,7 +161,8 @@ async function getPreset(preset, logger) {
     logger.warn(`Cannot find preset ${preset}`);
     return {};
   }
-  logger.debug({ presetConfig }, `Found preset ${preset}`);
+  logger.debug(`Found preset ${preset}`);
+  logger.trace({ presetConfig });
   if (params) {
     const argMapping = {};
     for (const [index, value] of params.entries()) {
diff --git a/lib/config/validation.js b/lib/config/validation.js
index 6329be067e..6e43cf17fa 100644
--- a/lib/config/validation.js
+++ b/lib/config/validation.js
@@ -1,16 +1,19 @@
 const options = require('./definitions').getOptions();
 const { hasValidSchedule } = require('../workers/branch/schedule');
 
-const optionTypes = {};
-options.forEach(option => {
-  optionTypes[option.name] = option.type;
-});
+let optionTypes;
 
 module.exports = {
   validateConfig,
 };
 
 function validateConfig(config) {
+  if (!optionTypes) {
+    optionTypes = {};
+    options.forEach(option => {
+      optionTypes[option.name] = option.type;
+    });
+  }
   let errors = [];
   let warnings = [];
 
-- 
GitLab