#!/usr/bin/env node

var program = require('commander');
var spawn = require('child_process').spawn;

program
  .option('--forbid-only', 'Forbid only and pending filters.')
  .parse(process.argv);

async function runTests(patterns) {
  return new Promise((resolve, reject) => {
    let mochaArgs = ['--require', 'ts-node/register', '--require', './spec-helper.js', '--colors'];
    if (program.forbidOnly) {
      mochaArgs = ['--forbid-only', '--forbid-pending'].concat(mochaArgs);
    }

    const mocha = spawn('./node_modules/.bin/mocha', mochaArgs.concat(patterns), {
      env: {
        ...process.env,
        'TS_NODE_PROJECT': './server/tsconfig.json'
      }
    });
    
    mocha.stdout.pipe(process.stdout);
    mocha.stderr.pipe(process.stderr);
    mocha.on('exit', (status) => {
      if (status == 0) {
        resolve();
      }
      reject(new Error('Status code ' + status));
    });
  });
}

async function test() {
  await runTests([
    'server/src/**/*.spec.ts',
    'shared/**/*.spec.ts'
  ]);
}

test()
  .then(() => {
    process.exit(0);
  }, (err) => {
    process.exit(1);
  });