const path = require("path");
const testIndexPath = path.resolve("test/index.js");

module.exports = function(config) {
    let karmaOptions = {
        outputDir: "target/testing",
        frameworks: [ "mocha", "chai-sinon" ],
        browsers: [ "Chrome" ],
        // files that Karma will server to the browser
        files: [
            // entry file for Webpack
            testIndexPath
        ],

        // before serving test/index.js to the browser
        preprocessors: {
            [testIndexPath]: [
                // use karma-webpack to preprocess the file via webpack
                "webpack",
                // use karma-sourcemap-loader to utilize sourcemaps generated by webpack
                "sourcemap"
            ]
        },

        // webpack configuration used by karma-webpack
        webpack: {
            // generate sourcemaps
            devtool: "inline-source-map",
            mode: "development",
            module: {
                rules: [
                    {
                        test: /\.(js|jsx)$/,
                        exclude: /node_modules/,
                        loader: "babel-loader",
                        options: {
                            "presets": ["@babel/preset-env", "@babel/preset-react"],
                            "plugins": [
                                ["@babel/plugin-proposal-decorators", { "legacy": true }],
                                ["@babel/plugin-proposal-class-properties", { "loose": true }]
                              ]
                        }
                    },
                    {
                        test: /\.html$/,
                        loader: "html-loader"
                    }
                ]
            },
            // relative path starts out at the src folder when importing modules
            resolve: {
                alias: {
                    "lib": path.join(__dirname, "lib")
                }
            }
        },
        webpackMiddleware: {
            // only output webpack error messages
            stats: "errors-only"
        }
    };

    config.set(karmaOptions);
};