#!/usr/bin/env bash
# Fixture test for tools/ref-sweep.sh: planted refs, cache exclusion, --assert.
set -euo pipefail
ROOT=$(cd "$(dirname "$0")/../.." && pwd)
SWEEP="$ROOT/tools/ref-sweep.sh"
FIX=$(mktemp -d /tmp/ref-sweep-test-XXXXXX)
trap 'rm -rf "$FIX"' EXIT
pass=0; fail=0
ok()  { echo "  PASS: $1"; pass=$((pass+1)); }
bad() { echo "  FAIL: $1"; fail=$((fail+1)); }

export HOME="$FIX"
mkdir -p \
  "$HOME/.claude/skills/planted" \
  "$HOME/.codex/cache" \
  "$HOME/Projects/overdeck/.claude/skills"

cat >"$HOME/.claude/skills/planted/SKILL.md" <<'EOF'
Use a stale project reference at ~/Projects/mega-plan-harness
EOF

cat >"$HOME/.codex/cache/stale-ref.txt" <<'EOF'
legacy ~/Projects/mega-plan-harness should be ignored in cache
EOF

INV="$FIX/inventory.json"

echo "=== sweep finds planted ref, excludes cache ==="
json=$(REF_INVENTORY="$INV" "$SWEEP")
printf '%s\n' "$json" >"$INV"

if echo "$json" | jq -e '.[] | select(.file | endswith("/.claude/skills/planted/SKILL.md"))' >/dev/null; then
  ok "planted ref in .claude/skills found"
else
  bad "planted ref in .claude/skills missing"
fi

if echo "$json" | jq -e '.[] | select(.file | contains("/cache/"))' >/dev/null 2>&1; then
  bad "cache path was not excluded"
else
  ok "cache path excluded"
fi

echo "=== --assert fails on dangling old_path ==="
if REF_INVENTORY="$INV" "$SWEEP" --assert >/dev/null 2>&1; then
  bad "--assert passed with dangling old_path"
else
  ok "--assert fails on dangling old_path"
fi

echo "=== --assert passes after symlink ==="
mkdir -p "$HOME/Projects"
ln -s "$ROOT/modules/harness" "$HOME/Projects/mega-plan-harness"
if REF_INVENTORY="$INV" "$SWEEP" --assert >/dev/null 2>&1; then
  ok "--assert passes after symlink"
else
  bad "--assert still failing after symlink"
fi

echo "----"
echo "PASS=$pass FAIL=$fail"
[[ $fail -eq 0 ]]
