const argv = require('yargs').argv
const project = require('./project.config')
const webpackConfig = require('./webpack.config')
const debug = require('debug')('app:config:karma')

debug('Creating configuration.')
const karmaConfig = {
  basePath : '../', // project root in relation to bin/karma.js
  files    : [
    {
      pattern  : `./${project.dir_test}/test-bundler.js`,
      watched  : false,
      served   : true,
      included : true
    }
  ],
  singleRun     : !argv.watch,
  frameworks    : ['mocha'],
  reporters     : ['mocha'],
  preprocessors : {
    [`${project.dir_test}/test-bundler.js`] : ['webpack', 'sourcemap']
  },
  browsers : ['PhantomJS'],
  webpack  : {
    devtool : 'cheap-module-source-map',
    resolve : Object.assign({}, webpackConfig.resolve, {
      alias : Object.assign({}, webpackConfig.resolve.alias, {
        sinon : 'sinon/pkg/sinon.js'
      })
    }),
    plugins : webpackConfig.plugins,
    module  : {
      noParse : [
        /\/sinon\.js/
      ],
      rules: webpackConfig.module.rules.concat([
        {
          test   : /sinon(\\|\/)pkg(\\|\/)sinon\.js/,
          loader : 'imports-loader?define=>false,require=>false'
        }
      ])
    },
        // Enzyme fix, see:
        // https://github.com/airbnb/enzyme/issues/47
    externals : Object.assign({}, webpackConfig.externals, {
      'react/addons'                   : true,
      'react/lib/ExecutionEnvironment' : true,
      'react/lib/ReactContext'         : 'window'
    })// ,
        // sassLoader : webpackConfig.sassLoader
  },
  webpackMiddleware : {
    noInfo : true
  },
  coverageReporter : {
    reporters : project.coverage_reporters
  }
}

if (project.globals.__COVERAGE__) {
  karmaConfig.reporters.push('coverage')
    // karmaConfig.webpack.module.preLoaders = [{
  karmaConfig.webpack.module.rules.push({
    test    : /\.(js|jsx)$/,
    enforce: 'pre',
    include : new RegExp(project.dir_client),
    // exclude : /node_modules/,
    loader  : 'babel-loader',
    query   : Object.assign({}, project.compiler_babel, {
      plugins : (project.compiler_babel.plugins || []).concat('istanbul')
    })
  })
}

module.exports = (cfg) => cfg.set(karmaConfig)

@@ -1201,16 +1201,56 @@
 %0A    %7D,%0A
+    externals : webpackConfig.externals%0A
         
@@ -1322,24 +1322,27 @@
 ssues/47%0A   
+ //
  externals :
@@ -1386,24 +1386,27 @@
 rnals, %7B%0A   
+ //
    'react/ad
@@ -1432,32 +1432,35 @@
      : true,%0A   
+ //
    'react/lib/Ex
@@ -1490,16 +1490,19 @@
 rue,%0A   
+ //
    'reac
@@ -1543,16 +1543,19 @@
 dow'%0A   
+ //
  %7D)// ,%0A
@@ -1995,19 +1995,16 @@
 nt),%0A   
- //
  exclude

fix karma config