Files
drawer/test.sh
T
2026-05-14 19:07:48 -05:00

123 lines
5.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
DRAWER=./target/debug/drawer
TEST_DIR="$(cd "$(dirname "$0")/test" && pwd)"
WORK="$TMPDIR/drawer_test_$$"
mkdir -p "$WORK"
pass() { echo "PASS: $1"; }
fail() { echo "FAIL: $1"; exit 1; }
# Expect a command to succeed
ok() {
local label="$1"; shift
local rc=0
"$@" 2>/dev/null || rc=$?
if [ "$rc" -eq 0 ]; then
pass "$label"
else
fail "$label (exited $rc)"
fi
}
# Expect a command to fail
err() {
local label="$1"; shift
local rc=0
"$@" 2>/dev/null || rc=$?
if [ "$rc" -eq 0 ]; then
fail "$label (expected failure but succeeded)"
else
pass "$label"
fi
}
cargo build -q
# ── key ──────────────────────────────────────────────────────────────────────
KEY="$WORK/test.key"
ok "key: generate" $DRAWER key "$KEY"
err "key: refuse existing file" $DRAWER key "$KEY"
err "key: refuse missing parent" $DRAWER key "$WORK/nosuchdir/test.key"
# ── close ────────────────────────────────────────────────────────────────────
DRAWER_FILE="$WORK/test.drawer"
ok "close: pack test dir" $DRAWER close -i "$KEY" "$DRAWER_FILE" "$TEST_DIR"
err "close: refuse without key" DRAWER_KEY="" $DRAWER close "$DRAWER_FILE" "$TEST_DIR"
err "close: refuse bad key" $DRAWER close -i "$WORK/notakey" "$DRAWER_FILE" "$TEST_DIR"
err "close: refuse bad extension" $DRAWER close -i "$KEY" "$WORK/test.notadrawer" "$TEST_DIR"
# ── open ─────────────────────────────────────────────────────────────────────
OUT="$WORK/out"
mkdir -p "$OUT"
ok "open: unpack drawer" $DRAWER open -i "$KEY" "$DRAWER_FILE" "$OUT"
ok "open: file1.md present" test -f "$OUT/file1.md"
ok "open: file2.md present" test -f "$OUT/file2.md"
ok "open: contents match file1.md" diff "$TEST_DIR/file1.md" "$OUT/file1.md"
ok "open: contents match file2.md" diff "$TEST_DIR/file2.md" "$OUT/file2.md"
err "open: refuse non-empty target" $DRAWER open -i "$KEY" "$DRAWER_FILE" "$OUT"
ok "open: force into non-empty" $DRAWER open -i "$KEY" -f "$DRAWER_FILE" "$OUT"
err "open: refuse bad extension" $DRAWER open -i "$KEY" "$WORK/test.notadrawer" "$OUT"
err "open: refuse missing drawer" $DRAWER open -i "$KEY" "$WORK/nosuch.drawer" "$OUT"
err "open: refuse without key" $DRAWER open "$DRAWER_FILE" "$OUT"
err "open: refuse bad key" $DRAWER open -i "$WORK/notakey" "$DRAWER_FILE" "$OUT"
# ── open: inferred target path ───────────────────────────────────────────────
INFER_DRAWER="$WORK/inferred.drawer"
INFER_OUT="$WORK/inferred"
ok "close: inferred source" $DRAWER close -i "$KEY" "$INFER_DRAWER" "$TEST_DIR"
mkdir -p "$INFER_OUT"
ok "open: inferred target" $DRAWER open -i "$KEY" "$INFER_DRAWER" "$INFER_OUT"
ok "open: inferred file1.md" test -f "$INFER_OUT/file1.md"
# ── info ─────────────────────────────────────────────────────────────────────
$DRAWER info -i "$KEY" "$DRAWER_FILE" 2>/dev/null | grep -q "folder, 2 files" \
&& pass "info: reports folder" || fail "info: reports folder"
err "info: refuse bad extension" $DRAWER info -i "$KEY" "$WORK/test.notadrawer"
err "info: refuse missing drawer" $DRAWER info -i "$KEY" "$WORK/nosuch.drawer"
err "info: refuse without key" $DRAWER info "$DRAWER_FILE"
# ── single-file drawer ───────────────────────────────────────────────────────
SINGLE_SRC="$TEST_DIR/file1.md"
SINGLE_DRAWER="$WORK/file1.drawer"
SINGLE_OUT_DIR="$WORK/single_out"
mkdir -p "$SINGLE_OUT_DIR"
ok "close: single file" $DRAWER close -i "$KEY" "$SINGLE_DRAWER" "$SINGLE_SRC"
$DRAWER info -i "$KEY" "$SINGLE_DRAWER" 2>/dev/null | grep -q "file, " \
&& pass "info: reports single file" || fail "info: reports single file"
ok "open: single file" $DRAWER open -i "$KEY" "$SINGLE_DRAWER" "$SINGLE_OUT_DIR/file1.md"
ok "open: single file contents" diff "$SINGLE_SRC" "$SINGLE_OUT_DIR/file1.md"
# ── close: drawer-inside-target guard ────────────────────────────────────────
# Pending
# err "close: refuse drawer inside target" $DRAWER close -i "$KEY" "$TEST_DIR/../test.drawer" "$TEST_DIR"
# ── env var key ──────────────────────────────────────────────────────────────
ENV_OUT="$WORK/env_out"
mkdir -p "$ENV_OUT"
ok "open: key from DRAWER_KEY env" env DRAWER_KEY="$KEY" $DRAWER open "$DRAWER_FILE" "$ENV_OUT"
ok "open: env key file1.md" test -f "$ENV_OUT/file1.md"
# ─────────────────────────────────────────────────────────────────────────────
rm -rf "$WORK"
echo ""
echo "All tests passed."