#!/usr/bin/env bash # Regression harness for durable Gitea PR review comments (#812). set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" WORK_DIR="${MOSAIC_TEST_WORK_DIR:-$PWD/.mosaic-test-work/pr-review-gitea-comment}" REPO_DIR="$WORK_DIR/repo" BIN_DIR="$WORK_DIR/bin" LOG_FILE="$WORK_DIR/tea.log" OUTPUT_FILE="$WORK_DIR/output.log" cleanup() { rm -rf "$WORK_DIR" } trap cleanup EXIT mkdir -p "$REPO_DIR" "$BIN_DIR" git -C "$REPO_DIR" init -q git -C "$REPO_DIR" remote add origin https://git.mosaicstack.dev/mosaicstack/stack.git cat > "$BIN_DIR/tea" <<'SH' #!/usr/bin/env bash set -euo pipefail printf '%s\n' "$*" >> "$PR_REVIEW_TEST_LOG" if [[ "$*" == "login list --output json" ]]; then printf '%s\n' '[{"name":"mosaicstack","url":"https://git.mosaicstack.dev"}]' exit 0 fi case "${PR_REVIEW_TEST_MODE:-}" in approve) [[ "$*" == "pr approve 123 --repo mosaicstack/stack --login mosaicstack" ]] || exit 90 ;; request-changes) [[ "$*" == "pr reject 123 --repo mosaicstack/stack --login mosaicstack --comment changes-required" ]] || exit 91 ;; legacy-fallback) if [[ "$*" == pr\ comment* ]]; then # tea v0.11.1 treats the nonexistent subcommand as `tea pr list` and exits 0. printf '%s\n' 'INDEX TITLE STATE' exit 0 fi if [[ "$*" == comment* ]]; then printf '%s\n' 'supported comment write deliberately unavailable' >&2 exit 23 fi exit 92 ;; comment-success|readback-failure) if [[ "$*" == "comment 123 durable-body --login mosaicstack --repo mosaicstack/stack --output json" ]]; then printf '%s\n' '{"id":456,"body":"durable-body"}' exit 0 fi if [[ "$*" == "api --login mosaicstack /repos/mosaicstack/stack/issues/comments/456" ]]; then if [[ "$PR_REVIEW_TEST_MODE" == "readback-failure" ]]; then printf '%s\n' '{"id":456,"body":"different-body","issue_url":"https://git.mosaicstack.dev/api/v1/repos/mosaicstack/stack/issues/123"}' else printf '%s\n' '{"id":456,"body":"durable-body","issue_url":"https://git.mosaicstack.dev/api/v1/repos/mosaicstack/stack/issues/123"}' fi exit 0 fi if [[ "$*" == pr\ comment* ]]; then # Reproduce the old false-positive fallback if the wrapper regresses. printf '%s\n' 'INDEX TITLE STATE' exit 0 fi exit 93 ;; write-failure) if [[ "$*" == "comment 123 durable-body --login mosaicstack --repo mosaicstack/stack --output json" ]]; then printf '%s\n' 'provider rejected comment' >&2 exit 24 fi exit 94 ;; *) exit 95 ;; esac SH chmod +x "$BIN_DIR/tea" run_review() { local mode="$1" action="$2" comment="${3:-}" : > "$LOG_FILE" : > "$OUTPUT_FILE" ( cd "$REPO_DIR" PATH="$BIN_DIR:$PATH" \ PR_REVIEW_TEST_LOG="$LOG_FILE" \ PR_REVIEW_TEST_MODE="$mode" \ "$SCRIPT_DIR/pr-review.sh" -n 123 -a "$action" ${comment:+-c "$comment"} ) > "$OUTPUT_FILE" 2>&1 } run_review approve approve grep -q '^pr approve 123 --repo mosaicstack/stack --login mosaicstack$' "$LOG_FILE" grep -q 'Approved Gitea PR #123' "$OUTPUT_FILE" run_review request-changes request-changes changes-required grep -q '^pr reject 123 --repo mosaicstack/stack --login mosaicstack --comment changes-required$' "$LOG_FILE" grep -q 'Requested changes on Gitea PR #123' "$OUTPUT_FILE" if run_review legacy-fallback comment durable-body; then echo "The old nonexistent tea pr comment fallback returned success" >&2 cat "$OUTPUT_FILE" >&2 exit 1 fi if grep -q '^pr comment ' "$LOG_FILE"; then echo "Wrapper invoked unsupported tea pr comment" >&2 exit 1 fi if grep -q 'Added comment to Gitea PR' "$OUTPUT_FILE"; then echo "Wrapper reported success without durable persistence" >&2 exit 1 fi run_review comment-success comment durable-body grep -q '^comment 123 durable-body --login mosaicstack --repo mosaicstack/stack --output json$' "$LOG_FILE" grep -q '^api --login mosaicstack /repos/mosaicstack/stack/issues/comments/456$' "$LOG_FILE" grep -q 'Added and verified comment on Gitea PR #123' "$OUTPUT_FILE" if run_review write-failure comment durable-body; then echo "Expected provider write failure to return nonzero" >&2 exit 1 fi if grep -q 'Added and verified comment' "$OUTPUT_FILE"; then echo "Write failure reported durable success" >&2 exit 1 fi if run_review readback-failure comment durable-body; then echo "Expected mismatched provider read-back to return nonzero" >&2 exit 1 fi if grep -q 'Added and verified comment' "$OUTPUT_FILE"; then echo "Read-back mismatch reported durable success" >&2 exit 1 fi echo "pr-review.sh durable Gitea comment regression passed"