#!/usr/bin/env bash
set -euo pipefail
repo_root=$(git rev-parse --show-toplevel)
script="$repo_root/modules/ci/image/cache-warm.sh"
test_root=$(mktemp -d "${XDG_CACHE_HOME:-$HOME/.cache}/overdeck/tests/ci-cache-key.XXXXXX")
trap 'rm -rf "$test_root"' EXIT
printf 'alpha\n' > "$test_root/requirements.txt"
printf 'beta\n' > "$test_root/uv.lock"
key_one=$(bash "$script" venv-key "$test_root/requirements.txt" "$test_root/uv.lock")
key_two=$(bash "$script" venv-key "$test_root/uv.lock" "$test_root/requirements.txt")
[[ "$key_one" == "$key_two" ]]
[[ "$key_one" =~ ^[0-9a-f]{64}$ ]]
printf 'changed\n' >> "$test_root/uv.lock"
key_changed=$(bash "$script" venv-key "$test_root/requirements.txt" "$test_root/uv.lock")
[[ "$key_one" != "$key_changed" ]]
echo "cache-key derivation: PASS"

mkdir -p "$test_root/venv/bin" "$test_root/archives"
printf 'fixture-python\n' > "$test_root/venv/bin/python"
VENV_ARCHIVE_DIR="$test_root/archives" bash "$script" venv-save \
  "$test_root/venv" "$test_root/requirements.txt" "$test_root/uv.lock" >/dev/null
VENV_ARCHIVE_DIR="$test_root/archives" bash "$script" venv-save \
  "$test_root/venv" "$test_root/requirements.txt" "$test_root/uv.lock" >/dev/null
VENV_ARCHIVE_DIR="$test_root/archives" bash "$script" venv-restore \
  "$test_root/restored" "$test_root/requirements.txt" "$test_root/uv.lock" >/dev/null
cmp "$test_root/venv/bin/python" "$test_root/restored/bin/python"
echo "venv archive save/restore/idempotence: PASS"
