145 lines
4.9 KiB
Bash
145 lines
4.9 KiB
Bash
#!/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"
|