#!/bin/sh -e
# This is Free Software under GNU Affero General Public License v >= 3.0
# without warranty, see README.md and license for details.
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# License-Filename: LICENSES/AGPL-3.0.txt
#
# Copyright (C) 2018, 2019 by via donau
#   – Österreichische Wasserstraßen-Gesellschaft mbH
# Software engineering by Intevation GmbH
#
# Author(s):
#  * Tom Gottfried <tom@intevation.de>

ME=`basename "$0"`
BASEDIR=`dirname "$0"`

usage()
{
  cat <<EOF
$ME [OPTION]...

Options:
  -d, --db=NAME    create (and drop if exists) the database NAME.
                   Default: "gemma_test"
  -p, --port=PORT  connect do the postgresql cluster at PORT.
                   Default is the postgresql standard port 5432
      --help       display this help and exit

EOF
}

# Defaults:

db=gemma_test
port=5432

# Parse options:

OPTS=`getopt \
      -l help,db:,port: \
      -o d:p: -n "$ME" -- "$@"`
[ $? -eq 0 ] || { usage ; exit 1 ; }

eval set -- "$OPTS"

while true ; do
  case "$1" in
    --db|-d)
      db="$2"
      shift 2
      ;;
    --port|-p)
      port="$2"
      shift 2
      ;;
    --help)
      { usage ; exit 0 ; }
      ;;
    --)
      shift
      break
      ;;
  esac
done

dropdb --if-exists -p "$port" "$db"

./install-db.sh -d "$db" -p "$port"
psql -qv ON_ERROR_STOP= -c 'CREATE EXTENSION pgtap' -d "$db" -p "$port"

# Collect test roles to be dropped
# Concatenate with dummy role to prevent syntax error if there is no test role
TEST_ROLES=$(psql -d "$db" -p "$port" -qtc \
    "SELECT concat_ws(',', 'test', string_agg(rolname, ',')) FROM pg_roles
         WHERE rolname LIKE 'test%'")

# Drop test roles, add test data and run tests
psql -qXv ON_ERROR_STOP= -v -d "$db" -p "$port" \
    -c 'SET client_min_messages TO WARNING' \
    -c "DROP ROLE IF EXISTS $TEST_ROLES" \
    -f "$BASEDIR"/tap_tests_data.sql \
    -c "SELECT plan(75 + (
            SELECT count(*)::int
                FROM information_schema.tables
                WHERE table_schema = 'waterway'))" \
    -f "$BASEDIR"/gemma_tests.sql \
    -f "$BASEDIR"/isrs_tests.sql \
    -f "$BASEDIR"/auth_tests.sql \
    -f "$BASEDIR"/manage_users_tests.sql \
    -f "$BASEDIR"/import_tests.sql \
    -c 'SELECT * FROM finish()'
