#!/usr/bin/env bash

set -u -e -o pipefail

cd $(dirname "$0")
TESTS_ROOT_DIR=$(pwd)

echo ""
echo "#################################################################################"
echo "Running all npm package e2e tests under $TESTS_ROOT_DIR"
echo ""
echo "To run a specific test run this script with '--test <test_name>' where <test_name>"
echo "is the name of the test folder to run"
echo ""
echo "Run this script with '--update-lock-files' to update yarn.lock files instead of running tests"
echo ""

# Determine the absolute paths to the generated @bazel/typescript and @bazel/karma npm packages
cd $TESTS_ROOT_DIR/../../..
BAZEL=$(pwd)/node_modules/.bin/bazel
if [[ ! -f $BAZEL ]] ; then
  echo "Bazel not found under $BAZEL"
  exit 1
fi
BAZEL_BIN_TYPESCRIPT=$($BAZEL info bazel-bin)
BAZEL_TYPESCRIPT_NPM_PACKAGE=$BAZEL_BIN_TYPESCRIPT/npm_package
cd $TESTS_ROOT_DIR/../../../internal/karma
BAZEL_BIN_KARMA=$($BAZEL info bazel-bin)
BAZEL_KARMA_NPM_PACKAGE=$BAZEL_BIN_KARMA/npm_package
echo "@bazel/typescript: $BAZEL_TYPESCRIPT_NPM_PACKAGE"
echo "@bazel/karma: $BAZEL_KARMA_NPM_PACKAGE"

# Now run all e2e tests
cd $TESTS_ROOT_DIR
for testDir in $(ls) ; do
  [[ -d "$testDir" ]] || continue
  (
    cd $testDir
    echo ""
    echo "#################################################################################"
    echo "Running npm package e2e test $(pwd)"
    echo ""
    if [[ ! -f "package-template.json" ]] ; then
      echo "No package-template.json file found in $testDir"
      exit 1
    fi
    # Generate package.json subsituting variables
    # BAZEL_TYPESCRIPT_NPM_PACKAGE and BAZEL_KARMA_NPM_PACKAGE
    ESCAPED_TYPESCRIPT=$(echo $BAZEL_TYPESCRIPT_NPM_PACKAGE | sed 's/\//\\\//g')
    ESCAPED_KARMA=$(echo $BAZEL_KARMA_NPM_PACKAGE | sed 's/\//\\\//g')
    sed -e "s/\${BAZEL_TYPESCRIPT_NPM_PACKAGE}/$ESCAPED_TYPESCRIPT/" -e "s/\${BAZEL_KARMA_NPM_PACKAGE}/$ESCAPED_KARMA/" package-template.json > package.json
    if [[ $# -ge 1 && $1 = "--update-lock-files" ]] ; then
      # Update yarn.lock files
      echo "Running yarn install to update lock file"
      yarn install
    else
      if [[ $# -ge 2 && $1 = "--test" && $2 != $testDir ]] ; then
        # Skip this test
        echo "Skipping test that was not specified in --test argument"
      else
        # Some tests like ts_auto_deps depend on node_modules
        yarn install
        # Run tests
        yarn test
      fi
    fi
  )
done
