From 7970f62a7d457e165d23a0a9b966750b9f41ab69 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@keylocation.sg>
Date: Mon, 14 Aug 2017 07:49:33 +0200
Subject: [PATCH] feat: massage true/false strings to boolean (#673)

Closes #637
---
 lib/config/migration.js                          | 13 +++++++++++++
 lib/config/validation.js                         |  4 ++--
 test/config/__snapshots__/migration.spec.js.snap |  2 ++
 test/config/migration.spec.js                    |  2 ++
 4 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/lib/config/migration.js b/lib/config/migration.js
index fff7d460f4..cafe3b23b1 100644
--- a/lib/config/migration.js
+++ b/lib/config/migration.js
@@ -1,3 +1,10 @@
+const options = require('./definitions').getOptions();
+
+const optionTypes = {};
+options.forEach(option => {
+  optionTypes[option.name] = option.type;
+});
+
 module.exports = {
   migrateConfig,
 };
@@ -68,6 +75,12 @@ function migrateConfig(config, parentConfig) {
       });
       isMigrated = true;
       delete migratedConfig.depTypes;
+    } else if (optionTypes[key] === 'boolean') {
+      if (val === 'true') {
+        migratedConfig[key] = true;
+      } else if (val === 'false') {
+        migratedConfig[key] = false;
+      }
     } else if (isObject(val)) {
       const subMigrate = migrateConfig(val);
       if (subMigrate.isMigrated) {
diff --git a/lib/config/validation.js b/lib/config/validation.js
index 50620cf24e..d8055caeb1 100644
--- a/lib/config/validation.js
+++ b/lib/config/validation.js
@@ -2,7 +2,7 @@ const options = require('./definitions').getOptions();
 
 const optionTypes = {};
 options.forEach(option => {
-  optionTypes[option.name] = [option.type];
+  optionTypes[option.name] = option.type;
 });
 
 module.exports = {
@@ -43,7 +43,7 @@ function validateConfig(config) {
           message: `Invalid configuration option: \`${key}\``,
         });
       } else if (val != null) {
-        const type = optionTypes[key].toString();
+        const type = optionTypes[key];
         if (type === 'boolean') {
           if (val !== true && val !== false) {
             errors.push({
diff --git a/test/config/__snapshots__/migration.spec.js.snap b/test/config/__snapshots__/migration.spec.js.snap
index da1984e40a..0e91f01710 100644
--- a/test/config/__snapshots__/migration.spec.js.snap
+++ b/test/config/__snapshots__/migration.spec.js.snap
@@ -2,8 +2,10 @@
 
 exports[`config/migration migrateConfig(config, parentConfig) it migrates config 1`] = `
 Object {
+  "autodiscover": true,
   "commitMessage": "some commit message",
   "enabled": true,
+  "onboarding": false,
   "optionalDependencies": Object {
     "respectLatest": false,
   },
diff --git a/test/config/migration.spec.js b/test/config/migration.spec.js
index 17647cacca..9a7387c55e 100644
--- a/test/config/migration.spec.js
+++ b/test/config/migration.spec.js
@@ -7,6 +7,8 @@ describe('config/migration', () => {
       const config = {
         enabled: true,
         maintainYarnLock: true,
+        onboarding: 'false',
+        autodiscover: 'true',
         schedule: 'after 5pm',
         commitMessage: '{{semanticPrefix}}some commit message',
         prTitle: '{{semanticPrefix}}some pr title',
-- 
GitLab