#!/usr/bin/env bash
set -euo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
TMP="$(mktemp -d "$ROOT/.notification-wrapper-test.XXXXXX")"
trap 'rm -rf "$TMP"' EXIT

cat > "$TMP/php-cli" <<'SH'
#!/usr/bin/env bash
set -euo pipefail
if [[ "${1:-}" == "-r" ]]; then
  printf cli
  exit 0
fi
printf '%s|%s\n' "$WORKSHOP_NOTIFICATION_ENV_FILE" "$*" > "$NOTIFICATION_WRAPPER_LOG"
SH
chmod 700 "$TMP/php-cli"

cat > "$TMP/flock" <<'SH'
#!/usr/bin/env bash
set -euo pipefail
[[ "${1:-}" == "-n" ]]
shift 2
exec "$@"
SH
chmod 700 "$TMP/flock"

cat > "$TMP/worker.php" <<'PHP'
<?php
PHP

printf 'WORKSHOP_NOTIFICATION_TRANSPORT=disabled\n' > "$TMP/disabled.env"
NOTIFICATION_WRAPPER_LOG="$TMP/called" \
WORKSHOP_NOTIFICATION_ENV_FILE="$TMP/disabled.env" \
WORKSHOP_NOTIFICATION_PHP_CLI="$TMP/php-cli" \
WORKSHOP_NOTIFICATION_FLOCK="$TMP/flock" \
WORKSHOP_NOTIFICATION_WORKER="$TMP/worker.php" \
  "$ROOT/bin/run-workshop-notification-worker.sh"
[[ ! -e "$TMP/called" ]]

printf 'WORKSHOP_NOTIFICATION_TRANSPORT=smtp\n' > "$TMP/smtp.env"
NOTIFICATION_WRAPPER_LOG="$TMP/called" \
WORKSHOP_NOTIFICATION_ENV_FILE="$TMP/smtp.env" \
WORKSHOP_NOTIFICATION_PHP_CLI="$TMP/php-cli" \
WORKSHOP_NOTIFICATION_FLOCK="$TMP/flock" \
WORKSHOP_NOTIFICATION_WORKER="$TMP/worker.php" \
  "$ROOT/bin/run-workshop-notification-worker.sh"
[[ "$(cat "$TMP/called")" == "$TMP/smtp.env|$TMP/worker.php" ]]

cat > "$TMP/php-cgi" <<'SH'
#!/usr/bin/env bash
printf cgi-fcgi
SH
chmod 700 "$TMP/php-cgi"
if NOTIFICATION_WRAPPER_LOG="$TMP/rejected" \
  WORKSHOP_NOTIFICATION_ENV_FILE="$TMP/smtp.env" \
  WORKSHOP_NOTIFICATION_PHP_CLI="$TMP/php-cgi" \
  WORKSHOP_NOTIFICATION_FLOCK="$TMP/flock" \
  WORKSHOP_NOTIFICATION_WORKER="$TMP/worker.php" \
    "$ROOT/bin/run-workshop-notification-worker.sh" 2>/dev/null; then
  echo "CGI PHP was not rejected" >&2
  exit 1
fi
[[ ! -e "$TMP/rejected" ]]

echo "notification_wrapper_unit: PASS"
