#!/usr/bin/env node

// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'test';
process.env.NODE_ENV = 'test';
process.env.PUBLIC_URL = '';

// Makes the script crash on unhandled rejections instead of silently
// ignoring them. In the future, promise rejections that are not handled will
// terminate the Node.js process with a non-zero exit code.
process.on('unhandledRejection', err => {
  throw err;
});

// Ensure environment variables are read.
require('react-scripts/config/env');

const jest = require('jest');
const argv = process.argv.slice(2);

// This is not necessary after eject because we embed config into package.json.
const createJestConfig = require('react-scripts/scripts/utils/createJestConfig');
const path = require('path');
const paths = require('react-scripts/config/paths');

const config = createJestConfig(
  relativePath =>
    path.resolve(
      __dirname,
      '../../../node_modules/react-scripts',
      relativePath
    ),
  path.resolve(__dirname, '../../../'),
  false
);

// patch
config.testEnvironment = 'node';
config.transform = Object.assign(
  {},
  {
    '\\.(gql|graphql)$': 'jest-transform-graphql'
  },
  config.transform
);
config.testMatch = [
  '<rootDir>/packages/my-joyent/src/**/**/__tests__/**/*.js',
  '<rootDir>/packages/my-joyent/src/**/**/**/?(*.)(spec|test).js'
];
config.moduleNameMapper = Object.assign({}, config.moduleNameMapper, {
  '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
    '<rootDir>/packages/my-joyent/test/file-mock.js',
  '^@root/(.*)$': '<rootDir>/packages/my-joyent/src/$1',
  '^@mocks/(.*)$': '<rootDir>/packages/my-joyent/test/mocks$1',
  '^@components/(.*)$':
    '<rootDir>/packages/my-joyent/src/components/$1',
  '^@containers/(.*)$':
    '<rootDir>/packages/my-joyent/src/containers/$1',
  '^@graphql/(.*)$': '<rootDir>/packages/my-joyent/src/graphql/$1',
  '^@assets/(.*)$': '<rootDir>/packages/my-joyent/src/assets/$1',
  '^@state/(.*)$': '<rootDir>/packages/my-joyent/src/state/$1'
});

argv.push('--config', JSON.stringify(config));

jest.run(argv);
