# run_test: Execute code checkers and unit tests

# Load test functions
source ./script/include/test_functions.inc.sh

## Set option defaults
# If PYTHON_FILES is not set, give it the default value of "app.py"
if [ -z "${PYTHON_FILES+is_set}" ]; then
  PYTHON_FILES="app.py"
fi

# reset test database
if [ "${RESET_DB}" = "true" ]; then
  # Fetch postgres settings and set them as ENV vars
  source ./script/get_db_settings

  if [ -n "${PGDATABASE}" ]; then
    output_divider "Reset database ${PGDATABASE}"
    # Reset the db
    reset_db "${PGDATABASE}"
  else
    warning "warning: RESET_DB is set, but PGDATABASE is not!"
    warning "Skipping database reset..."
  fi
fi

## Main
if [ "${RUN_PYTHON_TESTS}" = "true" ]; then
  python_test_status=0
  set +e

  output_divider "Lint Python files"
  run_python_lint "${PYTHON_FILES}"
  ((python_test_status+=$?))
  output_divider "Perform static analysis on Python files"
  run_python_static_analysis "${PYTHON_FILES}"
  ((python_test_status+=$?))
  output_divider "Perform type checking on Python files"
  run_python_typecheck
  ((python_test_status+=$?))
  output_divider "Run Python unit test suite"
  run_python_unit_tests "${PYTHON_FILES}"
  ((python_test_status+=$?))

  if [ "${python_test_status}" != "0" ]; then
    warning "Failed to pass one or more Python checks"
    exit ${python_test_status}
  fi

  set -e
fi

if [ "${RUN_JS_TESTS}" = "true" ]; then
  output_divider "Render Vue components"
  mkdir js/test_templates | true
  run_python_render_vue_component
  output_divider "Run JavaScript unit test suite"
  run_javascript_tests
fi
