mission-control/scripts/tests/reuse-gantt-cli-contract.sh

67 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
TMP_DIR="$(mktemp -d)"
MOCK_GANTT_DIR="$TMP_DIR/gantt-board"
MOCK_LOG="$TMP_DIR/delegation.log"
cleanup() {
rm -rf "$TMP_DIR"
}
trap cleanup EXIT
mkdir -p "$MOCK_GANTT_DIR/scripts"
touch "$MOCK_LOG"
cat > "$MOCK_GANTT_DIR/scripts/task.sh" <<'MOCK_TASK'
#!/bin/bash
set -euo pipefail
echo "task.sh $*" >> "${MOCK_DELEGATION_LOG:?}"
MOCK_TASK
cat > "$MOCK_GANTT_DIR/scripts/project.sh" <<'MOCK_PROJECT'
#!/bin/bash
set -euo pipefail
echo "project.sh $*" >> "${MOCK_DELEGATION_LOG:?}"
MOCK_PROJECT
chmod +x "$MOCK_GANTT_DIR/scripts/task.sh" "$MOCK_GANTT_DIR/scripts/project.sh"
export MOCK_DELEGATION_LOG="$MOCK_LOG"
export GANTT_BOARD_DIR="$MOCK_GANTT_DIR"
bash "$ROOT_DIR/scripts/task.sh" list --json
bash "$ROOT_DIR/scripts/project.sh" create --name "Demo"
TASK_ID="65bc8c5a-212a-4532-a027-ea424e62900e" \
TASK_STATUS="review" \
node "$ROOT_DIR/scripts/update-task-status.js"
if ! grep -F "task.sh list --json" "$MOCK_LOG" >/dev/null 2>&1; then
echo "Expected task wrapper to delegate to gantt-board task.sh" >&2
cat "$MOCK_LOG" >&2
exit 1
fi
if ! grep -F "project.sh create --name Demo" "$MOCK_LOG" >/dev/null 2>&1; then
echo "Expected project wrapper to delegate to gantt-board project.sh" >&2
cat "$MOCK_LOG" >&2
exit 1
fi
if ! grep -F "task.sh update 65bc8c5a-212a-4532-a027-ea424e62900e --status review" "$MOCK_LOG" >/dev/null 2>&1; then
echo "Expected update-task-status.js to delegate to gantt-board task.sh update" >&2
cat "$MOCK_LOG" >&2
exit 1
fi
# No direct database credentials/queries in scripts
if rg -n --glob '!scripts/tests/*' "SUPABASE_SERVICE_ROLE_KEY|createClient\\(|rest/v1|from\\('tasks'\\)|from\\(\"tasks\"\\)" "$ROOT_DIR/scripts" >/dev/null 2>&1; then
echo "Direct DB references found under scripts/. CLI must remain API passthrough only." >&2
rg -n --glob '!scripts/tests/*' "SUPABASE_SERVICE_ROLE_KEY|createClient\\(|rest/v1|from\\('tasks'\\)|from\\(\"tasks\"\\)" "$ROOT_DIR/scripts" >&2 || true
exit 1
fi
echo "reuse-gantt-cli-contract: OK"