From 2084c71d82a2e07ccd761258b14985773260ae7a Mon Sep 17 00:00:00 2001
From: Lukas Eipert <leipert@gitlab.com>
Date: Wed, 1 Aug 2018 19:41:51 +0200
Subject: [PATCH] make `karma -f` work again

---
 config/karma.config.js | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/config/karma.config.js b/config/karma.config.js
index 86fb328f6ab..9f6b06576bd 100644
--- a/config/karma.config.js
+++ b/config/karma.config.js
@@ -6,6 +6,7 @@ const argumentsParser = require('commander');
 const webpackConfig = require('./webpack.config.js');
 
 const ROOT_PATH = path.resolve(__dirname, '..');
+const SPECS_PATH = /^(?:\.[\\\/])?(ee[\\\/])?spec[\\\/]javascripts[\\\/]/;
 
 function fatalError(message) {
   console.error(chalk.red(`\nError: ${message}\n`));
@@ -34,9 +35,19 @@ const specFilters = argumentsParser
   )
   .parse(process.argv).filterSpec;
 
-if (specFilters.length) {
-  const specsPath = /^(?:\.[\\\/])?spec[\\\/]javascripts[\\\/]/;
+const createContext = (specFiles, regex, suffix) => {
+  const newContext = specFiles.reduce((context, file) => {
+    const relativePath = file.replace(SPECS_PATH, '');
+    context[file] = `./${relativePath}`;
+    return context;
+  }, {});
+
+  webpackConfig.plugins.push(
+    new webpack.ContextReplacementPlugin(regex, path.join(ROOT_PATH, suffix), newContext)
+  );
+};
 
+if (specFilters.length) {
   // resolve filters
   let filteredSpecFiles = specFilters.map(filter =>
     glob
@@ -57,23 +68,15 @@ if (specFilters.length) {
     fatalError('Your filter did not match any test files.');
   }
 
-  if (!filteredSpecFiles.every(file => specsPath.test(file))) {
+  if (!filteredSpecFiles.every(file => SPECS_PATH.test(file))) {
     fatalError('Test files must be located within /spec/javascripts.');
   }
 
-  const newContext = filteredSpecFiles.reduce((context, file) => {
-    const relativePath = file.replace(specsPath, '');
-    context[file] = `./${relativePath}`;
-    return context;
-  }, {});
+  const CE_FILES = filteredSpecFiles.filter(file => !file.startsWith('ee'));
+  createContext(CE_FILES, /[^e]{2}[\\\/]spec[\\\/]javascripts$/, 'spec/javascripts');
 
-  webpackConfig.plugins.push(
-    new webpack.ContextReplacementPlugin(
-      /spec[\\\/]javascripts$/,
-      path.join(ROOT_PATH, 'spec/javascripts'),
-      newContext
-    )
-  );
+  const EE_FILES = filteredSpecFiles.filter(file => file.startsWith('ee'));
+  createContext(EE_FILES, /ee[\\\/]spec[\\\/]javascripts$/, 'ee/spec/javascripts');
 }
 
 // Karma configuration
-- 
2.30.9