diff --git a/scripts/live-chat-test.sh b/scripts/live-chat-test.sh new file mode 100755 index 0000000..4881cab --- /dev/null +++ b/scripts/live-chat-test.sh @@ -0,0 +1,159 @@ +#!/usr/bin/env bash +set -euo pipefail + +ACCOUNT="" +ALLOW_NONTEST=false + +usage() { + cat <<'USAGE' +Usage: scripts/live-chat-test.sh [options] + +Options: + --account Account to use (defaults to GOG_IT_ACCOUNT or first auth) + --allow-nontest Allow running against non-test accounts + -h, --help Show this help + +Env: + GOG_LIVE_CHAT_SPACE=spaces/ Existing space to use for list/send + GOG_LIVE_CHAT_THREAD= Thread id or resource for sends + GOG_LIVE_CHAT_DM=user@domain DM target (workspace user) + GOG_LIVE_CHAT_DM_THREAD= Thread id for DM send + GOG_LIVE_CHAT_CREATE=1 Create a new space (no cleanup) + GOG_LIVE_CHAT_MEMBER=user@domain Member to add when creating a space + GOG_LIVE_ALLOW_NONTEST=1 Allow non-test accounts +USAGE +} + +while [ $# -gt 0 ]; do + case "$1" in + --account) + ACCOUNT="$2" + shift + ;; + --allow-nontest) + ALLOW_NONTEST=true + ;; + -h|--help) + usage + exit 0 + ;; + *) + echo "Unknown arg: $1" >&2 + usage >&2 + exit 2 + ;; + esac + shift +done + +BIN="${GOG_BIN:-./bin/gog}" +if [ ! -x "$BIN" ]; then + make build >/dev/null +fi + +PY="${PYTHON:-python3}" +if ! command -v "$PY" >/dev/null 2>&1; then + PY="python" +fi + +if [ -z "$ACCOUNT" ]; then + ACCOUNT="${GOG_IT_ACCOUNT:-}" +fi +if [ -z "$ACCOUNT" ]; then + acct_json=$($BIN auth list --json) + ACCOUNT=$($PY -c 'import json,sys; obj=json.load(sys.stdin); print(obj.get("accounts", [{}])[0].get("email", ""))' <<<"$acct_json") +fi +if [ -z "$ACCOUNT" ]; then + echo "No account available for live tests." >&2 + exit 1 +fi + +is_test_account() { + local a + a=$(echo "$1" | tr 'A-Z' 'a-z') + case "$a" in + *test*|*bot*|*sandbox*|*qa*|*staging*|*dev*|*@example.com) + return 0 + ;; + esac + case "$a" in + *+*) + return 0 + ;; + esac + return 1 +} + +is_consumer_account() { + local a domain + a=$(echo "$1" | tr 'A-Z' 'a-z') + domain="${a##*@}" + case "$domain" in + gmail.com|googlemail.com) + return 0 + ;; + esac + return 1 +} + +if [ "${ALLOW_NONTEST:-false}" = false ] && [ -z "${GOG_LIVE_ALLOW_NONTEST:-}" ]; then + if ! is_test_account "$ACCOUNT"; then + echo "Refusing to run live tests against non-test account: $ACCOUNT" >&2 + echo "Pass --allow-nontest or set GOG_LIVE_ALLOW_NONTEST=1 to override." >&2 + exit 2 + fi +fi + +if is_consumer_account "$ACCOUNT"; then + echo "==> chat (skipped; Workspace only)" + exit 0 +fi + +gog() { + "$BIN" --account "$ACCOUNT" "$@" +} + +TS=$(date +%Y%m%d%H%M%S) + +echo "Using account: $ACCOUNT" +echo "==> chat spaces list" +gog chat spaces list --json --max 1 >/dev/null + +if [ -n "${GOG_LIVE_CHAT_SPACE:-}" ]; then + echo "==> chat messages list" + gog chat messages list "$GOG_LIVE_CHAT_SPACE" --json --max 1 >/dev/null + echo "==> chat threads list" + gog chat threads list "$GOG_LIVE_CHAT_SPACE" --json --max 1 >/dev/null + echo "==> chat messages send" + if [ -n "${GOG_LIVE_CHAT_THREAD:-}" ]; then + gog chat messages send "$GOG_LIVE_CHAT_SPACE" --text "gogcli smoke $TS" --thread "$GOG_LIVE_CHAT_THREAD" --json >/dev/null + else + gog chat messages send "$GOG_LIVE_CHAT_SPACE" --text "gogcli smoke $TS" --json >/dev/null + fi +else + echo "==> chat messages/threads (skipped; set GOG_LIVE_CHAT_SPACE)" +fi + +if [ -n "${GOG_LIVE_CHAT_CREATE:-}" ]; then + if [ -z "${GOG_LIVE_CHAT_MEMBER:-}" ]; then + echo "==> chat spaces create (skipped; set GOG_LIVE_CHAT_MEMBER)" + else + echo "==> chat spaces create" + gog chat spaces create "gogcli-smoke-$TS" --member "$GOG_LIVE_CHAT_MEMBER" --json >/dev/null + fi +fi + +if [ -n "${GOG_LIVE_CHAT_DM:-}" ]; then + echo "==> chat dm space" + gog chat dm space "$GOG_LIVE_CHAT_DM" --json >/dev/null + echo "==> chat dm send" + if [ -n "${GOG_LIVE_CHAT_DM_THREAD:-}" ]; then + gog chat dm send "$GOG_LIVE_CHAT_DM" --text "gogcli dm $TS" --thread "$GOG_LIVE_CHAT_DM_THREAD" --json >/dev/null + else + gog chat dm send "$GOG_LIVE_CHAT_DM" --text "gogcli dm $TS" --json >/dev/null + fi +else + echo "==> chat dm (skipped; set GOG_LIVE_CHAT_DM)" +fi + +echo "Chat live tests complete."