#!/usr/bin/env bash

# Default Python Versions
# shellcheck source=bin/default_pythons
source "bin/default_pythons"

testAirflow() {
  local env_dir="$(mktmpdir)"
  echo 'yes' > "${env_dir}/SLUGIFY_USES_TEXT_UNIDECODE"
  compile 'airflow' '' "${env_dir}"
  assertCaptured "apache-airflow==1.10.2"
  assertCapturedSuccess
}

testCollectstatic() {
  compile "collectstatic"
  assertCaptured "collectstatic"
}

testGEOS() {
  local env_dir="$(mktmpdir)"
  echo '1' > "${env_dir}/BUILD_WITH_GEO_LIBRARIES"
  compile 'geos' '' "${env_dir}"
  if [[ $STACK == "heroku-20" ]]; then
    assertCaptured " !     The GDAL, GEOS and PROJ binaries and BUILD_WITH_GEO_LIBRARIES functonality is not supported on Heroku-20."
  else
    assertCaptured " !     The GDAL, GEOS and PROJ binaries and BUILD_WITH_GEO_LIBRARIES functonality are now deprecated."
  fi
  # This should assertCapturedError on Heroku-20, but the test doesn't actually
  # install anything that uses GEOS so succeeds (see W-8145375)
  assertCapturedSuccess
}

testNLTK() {
  local env_dir="$(mktmpdir)"
  # NOTE: This is a RuntimeWarning emitted by Python 3's runpy.py script
  # which is what is used when you call `python -m <module>`. This is due to
  # how nltk imports things. It's not actually an error, but it would probably
  # be bad to silence in Production.
  echo 'ignore::RuntimeWarning' > "${env_dir}/PYTHONWARNINGS"
  compile 'nltk' '' "${env_dir}"
  assertCaptured "[nltk_data] Downloading package city_database" "STD_ERR"
  # Can't use `assertCapturedSuccess` since the NLTK downloader outputs all
  # progress/status messages to stderr (W-8146040).
  assertCapturedSuccessWithStdErr
}

testPsycopg2() {
  compile "psycopg2"
  assertCaptured "psycopg2"
  assertCapturedSuccess
}

testPysqlite() {
  # pysqlite does not support Python 3 (since the sqlite3 stdlib can be used there),
  # so we have to test with Python 2, which we've not made available for Heroku-20.
  if [[ $STACK == "heroku-20" ]]; then
    return
  fi
  compile "pysqlite"
  assertCaptured "pysqlite"
  assertCapturedSuccess
}

testCffi() {
  compile "cffi"
  assertCaptured "cffi"
  assertCapturedSuccess
}

testPylibmc() {
  compile "pylibmc"
  assertCaptured "pylibmc"
  assertCapturedSuccess
}

testMercurial() {
  compile "requirements-mercurial"
  assertCaptured "Cloning hg"
  assertCapturedSuccess
}

pushd $(dirname 0) >/dev/null
popd >/dev/null

source $(pwd)/test/utils
source $(pwd)/test/shunit2
