#!/bin/bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" die() { echo "FAIL: $1" >&2 exit 1 } make_fake_codex() { local dir="$1" local exit_code="$2" local message="$3" cat > "$dir/codex" < "$tmpdir/stdout" 2> "$tmpdir/stderr" } assert_status() { local actual="$1" local expected="$2" [[ "$actual" -eq "$expected" ]] || die "expected status $expected, got $actual" } test_missing_oauth() { local tmpdir tmpdir="$(mktemp -d)" make_fake_codex "$tmpdir" 0 "unused" set +e run_entrypoint "$tmpdir" MODEL="gpt-test" PROMPT="hello" local status="$?" set -e assert_status "$status" 1 grep -q "OAUTH is required" "$tmpdir/stderr" || die "missing OAUTH error" rm -rf "$tmpdir" } test_missing_model() { local tmpdir tmpdir="$(mktemp -d)" make_fake_codex "$tmpdir" 0 "unused" set +e run_entrypoint "$tmpdir" OAUTH="$(encoded_json '{}')" PROMPT="hello" local status="$?" set -e assert_status "$status" 1 grep -q "MODEL is required" "$tmpdir/stderr" || die "missing MODEL error" rm -rf "$tmpdir" } test_invalid_base64() { local tmpdir tmpdir="$(mktemp -d)" make_fake_codex "$tmpdir" 0 "unused" set +e run_entrypoint "$tmpdir" OAUTH="not-base64" MODEL="gpt-test" PROMPT="hello" local status="$?" set -e assert_status "$status" 1 grep -q "valid base64" "$tmpdir/stderr" || die "invalid base64 error" rm -rf "$tmpdir" } test_non_object_json() { local tmpdir tmpdir="$(mktemp -d)" make_fake_codex "$tmpdir" 0 "unused" set +e run_entrypoint "$tmpdir" OAUTH="$(encoded_json '[]')" MODEL="gpt-test" PROMPT="hello" local status="$?" set -e assert_status "$status" 1 grep -q "JSON object" "$tmpdir/stderr" || die "non-object JSON error" rm -rf "$tmpdir" } test_success_output() { local tmpdir tmpdir="$(mktemp -d)" make_fake_codex "$tmpdir" 0 "codex ok" run_entrypoint "$tmpdir" OAUTH="$(encoded_json '{}')" MODEL="gpt-test" PROMPT="hello" grep -q "status=completed" "$tmpdir/github-output" || die "completed status output" grep -q "codex ok" "$tmpdir/github-output" || die "codex output" [[ ! -e "$tmpdir/codex-home/auth.json" ]] || die "auth.json was not cleaned up" rm -rf "$tmpdir" } test_failure_output() { local tmpdir tmpdir="$(mktemp -d)" make_fake_codex "$tmpdir" 7 "codex failed" set +e run_entrypoint "$tmpdir" OAUTH="$(encoded_json '{}')" MODEL="gpt-test" PROMPT="hello" local status="$?" set -e assert_status "$status" 7 grep -q "status=failed" "$tmpdir/github-output" || die "failed status output" grep -q "codex failed" "$tmpdir/github-output" || die "failed codex output" [[ ! -e "$tmpdir/codex-home/auth.json" ]] || die "auth.json was not cleaned up after failure" rm -rf "$tmpdir" } test_missing_oauth test_missing_model test_invalid_base64 test_non_object_json test_success_output test_failure_output echo "entrypoint tests passed"