#!/bin/bash
set -euo pipefail
IFS=$'\n\t'

prepare_build() {
  if [ -d coverage ]; then
    rm -rf coverage
  fi
}

print_ruby_version() {
  echo "Using $(ruby -v)"
  echo
}

run_code_quality_checks() {
  local config="$(pwd)/.rubocop.yml"

  bundle exec rubocop --config=$config
}

run_unit_tests() {
  bundle exec rake spec:unit
}

run_isolation_tests() {
  local pwd=$PWD
  local root="$pwd/spec/isolation"

  for test in $(find $root -name '*_spec.rb')
  do
    run_isolation_test $test

    if [ $? -ne 0 ]; then
      local exit_code=$?
      echo "Failing test: $test"
      exit $exit_code
    fi
  done
}

update_code_coverage() {
  bundle exec rake codecov:upload
}

run_isolation_test() {
  local test=$1

  printf "\n\n\nRunning: $test\n"
  ruby $test --options spec/isolation/.rspec
}

run_test() {
  local test=$1

  printf "\n\n\nRunning: $test\n"
  COVERAGE=true bundle exec rspec $test
}

main() {
  prepare_build
  print_ruby_version
  run_code_quality_checks
  run_unit_tests
  run_isolation_tests
  # update_code_coverage
}

main
