From d0e76b9d514ffa3bc749313051e5d3420e339c41 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Tue, 13 Mar 2018 21:47:08 +0100
Subject: [PATCH] fix: validate :timezone preset value

---
 lib/config/validation.js                          | 15 +++++++++++++++
 test/config/__snapshots__/validation.spec.js.snap |  4 ++++
 test/config/validation.spec.js                    |  3 ++-
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/lib/config/validation.js b/lib/config/validation.js
index 1186a3ac27..b2e0ac2d26 100644
--- a/lib/config/validation.js
+++ b/lib/config/validation.js
@@ -96,6 +96,21 @@ function validateConfig(config) {
               depName: 'Configuration Error',
               message: `Configuration option \`${key}\` should be a list (Array)`,
             });
+          } else if (key === 'extends') {
+            for (const subval of val) {
+              if (isString(subval) && subval.match(/^:timezone(.+)$/)) {
+                const [, timezone] = subval.match(/^:timezone\((.+)\)$/);
+                const [validTimezone, errorMessage] = hasValidTimezone(
+                  timezone
+                );
+                if (!validTimezone) {
+                  errors.push({
+                    depName: 'Configuration Error',
+                    message: errorMessage,
+                  });
+                }
+              }
+            }
           } else {
             // eslint-disable-next-line no-loop-func
             val.forEach(subval => {
diff --git a/test/config/__snapshots__/validation.spec.js.snap b/test/config/__snapshots__/validation.spec.js.snap
index bb96c609c0..b986e7132c 100644
--- a/test/config/__snapshots__/validation.spec.js.snap
+++ b/test/config/__snapshots__/validation.spec.js.snap
@@ -30,6 +30,10 @@ Array [
     "depName": "Configuration Error",
     "message": "Configuration option \`lockFileMaintenance\` should be a json object",
   },
+  Object {
+    "depName": "Configuration Error",
+    "message": "Invalid timezone: Europe/Brussel",
+  },
   Object {
     "depName": "Configuration Error",
     "message": "Invalid configuration option: \`foo\`",
diff --git a/test/config/validation.spec.js b/test/config/validation.spec.js
index bee1d24067..d28da1f3ee 100644
--- a/test/config/validation.spec.js
+++ b/test/config/validation.spec.js
@@ -26,6 +26,7 @@ describe('config/validation', () => {
         labels: 5,
         semanticCommitType: 7,
         lockFileMaintenance: false,
+        extends: [':timezone(Europe/Brussel)'],
         packageRules: [
           {
             foo: 1,
@@ -34,7 +35,7 @@ describe('config/validation', () => {
       };
       const { warnings, errors } = configValidation.validateConfig(config);
       expect(warnings).toHaveLength(0);
-      expect(errors).toHaveLength(8);
+      expect(errors).toHaveLength(9);
       expect(errors).toMatchSnapshot();
     });
   });
-- 
GitLab