/**
 * Copyright 2018 Shift Devices AG
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// For a detailed explanation regarding each configuration property, visit:
// https://jestjs.io/docs/en/configuration.html

module.exports = {
    // All imported modules in your tests should be mocked automatically
    // automock: false,

    // Stop running tests after the first failure
    // bail: false,

    // Respect "browser" field in package.json when resolving modules
    // browser: false,

    // The directory where Jest should store its cached dependency information
    // cacheDirectory: "/tmp/jest_rs",

    // Automatically clear mock calls and instances between every test
    clearMocks: true,

    // Indicates whether the coverage information should be collected while executing the test
    // collectCoverage: false,

    // An array of glob patterns indicating a set of files for which coverage information
    // should be collected.
    collectCoverageFrom: [
        'src/**/*.{js,jsx,ts,tsx}',
        '!**/*.css.d.ts', // auto-generated from CSS
    ],

    // The directory where Jest should output its coverage files
    coverageDirectory: 'coverage',

    // An array of regexp pattern strings used to skip coverage collection
    coveragePathIgnorePatterns: [
        '!*.d.ts'
    ],

    // A list of reporter names that Jest uses when writing coverage reports
    // coverageReporters: [
    //   "json",
    //   "text",
    //   "lcov",
    //   "clover"
    // ],

    // An object that configures minimum threshold enforcement for coverage results
    // coverageThreshold: null,

    // Make calling deprecated APIs throw helpful error messages
    // errorOnDeprecated: false,

    // Force coverage collection from ignored files usin a array of glob patterns
    // forceCoverageMatch: [],

    // A path to a module which exports an async function that is triggered once
    // before all test suites.
    // globalSetup: null,

    // A path to a module which exports an async function that is triggered once
    // after all test suites.
    // globalTeardown: null,

    // A set of global variables that need to be available in all test environments
    globals: {
        'ts-jest': {
            // Need to enable --esModuleInterop so that JSX components can look up CSS styles.
            // Additionally, modules import/export needs to be set back commonjs.
            // Both requirements are due to the tests being run via ts-jest.
            tsConfig: 'tsconfig.test.json',
        }
    },

    // An array of directory names to be searched recursively up from the requiring module's location
    // moduleDirectories: [
    //   "node_modules"
    // ],

    // An array of file extensions the project modules use.
    moduleFileExtensions: [
        'js',
        'json',
        'jsx',
        'ts',
        'tsx'
    ],

    // A map from regular expressions to module names that allow to stub out resources
    // with a single module.
    moduleNameMapper: {
        // Pass-through CSS to allow for styles.name look ups in tests.
        '\\.css$': 'identity-obj-proxy',
        // Alias react to preact in tests.
        // Uncomment the others if required by a test dependencies.
        '^react$': 'preact-compat',
        //'^react-dom$': 'preact-compat',
        //'^create-react-class$': 'preact-compat/lib/create-react-class'
    },

    // An array of regexp pattern strings, matched against all module paths
    // before considered 'visible' to the module loader.
    // modulePathIgnorePatterns: [],

    // Activates notifications for test results
    // notify: false,

    // An enum that specifies notification mode. Requires { notify: true }
    // notifyMode: "always",

    // A preset that is used as a base for Jest's configuration
    // preset: null,

    // Run tests from one or more projects
    // projects: null,

    // Use this configuration option to add custom reporters to Jest
    // reporters: undefined,

    // Automatically reset mock state between every test
    // resetMocks: false,

    // Reset the module registry before running each individual test
    // resetModules: false,

    // A path to a custom resolver
    // resolver: null,

    // Automatically restore mock state between every test
    // restoreMocks: false,

    // The root directory that Jest should scan for tests and modules within
    // rootDir: null,

    // A list of paths to directories that Jest should use to search for files in
    // roots: [
    //   "<rootDir>"
    // ],

    // Allows you to use a custom runner instead of Jest's default test runner
    // runner: "jest-runner",

    // The paths to modules that run some code to configure or set up the testing environment
    // before each test.
    // setupFiles: []

    // The path to a module that runs some code to configure or set up the testing framework
    // before each test.
    // setupTestFrameworkScriptFile: null,

    // A list of paths to snapshot serializer modules Jest should use for snapshot testing
    snapshotSerializers: ['preact-render-spy/snapshot'],

    // The test environment that will be used for testing
    testEnvironment: 'jsdom',

    // Options that will be passed to the testEnvironment
    // testEnvironmentOptions: {},

    // Adds a location field to test results
    // testLocationInResults: false,

    // The glob patterns Jest uses to detect test files
    // testMatch: [
    //   '**/__tests__/**/*.js?(x)',
    //   '**/?(*.)+(spec|test).js?(x)'
    // ],

    // An array of regexp pattern strings that are matched against all test paths,
    // matched tests are skipped.
    // testPathIgnorePatterns: [
    //   '/node_modules/'
    // ],

    // The regexp pattern Jest uses to detect test files
    testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$',

    // This option allows the use of a custom results processor
    // testResultsProcessor: null,

    // This option allows use of a custom test runner
    // testRunner: 'jasmine2',

    // This option sets the URL for the jsdom environment.
    // It is reflected in properties such as location.href.
    // testURL: 'http://localhost',

    // Setting this value to 'fake' allows the use of fake timers for functions such as 'setTimeout'
    // timers: 'real',

    // A map from regular expressions to paths to transformers.
    // We transform both jsx and tsx with ts-jest.
    transform: {
        '^.+\\.(t|j)sx?$': 'ts-jest'
    },

    // An array of regexp pattern strings that are matched against all source file paths,
    // matched files will skip transformation.
    // transformIgnorePatterns: [
    //   '/node_modules/'
    // ],

    // An array of regexp pattern strings that are matched against all modules before
    // the module loader will automatically return a mock for them.
    // unmockedModulePathPatterns: undefined,

    // Indicates whether each individual test should be reported during the run
    // verbose: null,

    // An array of regexp patterns that are matched against all source file paths before
    // re-running tests in watch mode.
    // watchPathIgnorePatterns: [],

    // Whether to use watchman for file crawling
    // watchman: true,
};
