Files
drawer/test.sh
T

136 lines
6.3 KiB
Bash
Raw Normal View History

2026-05-14 19:07:48 -05:00
#!/usr/bin/env bash
set -euo pipefail
DRAWER=./target/debug/drawer
2026-05-14 23:57:58 -05:00
TEST_DIR="$(cd "$(dirname "$0")/tests/testcontents" && pwd)"
2026-05-14 19:07:48 -05:00
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"
2026-05-15 00:42:39 -05:00
ok "close: pack test dir" $DRAWER close -i "$KEY" "$TEST_DIR" "$DRAWER_FILE"
err "close: refuse without key" DRAWER_KEY="" $DRAWER close "$TEST_DIR" "$DRAWER_FILE"
err "close: refuse bad key" $DRAWER close -i "$WORK/notakey" "$TEST_DIR" "$DRAWER_FILE"
err "close: refuse bad extension" $DRAWER close -i "$KEY" "$TEST_DIR" "$WORK/test.notadrawer"
2026-05-14 19:07:48 -05:00
# ── 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"
2026-05-15 00:42:39 -05:00
ok "close: inferred source" $DRAWER close -i "$KEY" "$TEST_DIR" "$INFER_DRAWER"
2026-05-14 19:07:48 -05:00
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"
2026-05-15 00:42:39 -05:00
# ── close: inferred drawer file ──────────────────────────────────────────────
INFER_CLOSE_SRC="$WORK/myproject"
INFER_CLOSE_DRAWER="$WORK/myproject.drawer"
cp -r "$TEST_DIR" "$INFER_CLOSE_SRC"
ok "close: inferred drawer file" $DRAWER close -i "$KEY" "$INFER_CLOSE_SRC"
ok "close: drawer file created" test -f "$INFER_CLOSE_DRAWER"
INFER_CLOSE_OUT="$WORK/myproject_out"
mkdir -p "$INFER_CLOSE_OUT"
ok "close: inferred round-trip open" $DRAWER open -i "$KEY" "$INFER_CLOSE_DRAWER" "$INFER_CLOSE_OUT"
ok "close: inferred round-trip file1" test -f "$INFER_CLOSE_OUT/file1.md"
2026-05-14 19:07:48 -05:00
# ── 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"
2026-05-15 00:42:39 -05:00
ok "close: single file" $DRAWER close -i "$KEY" "$SINGLE_SRC" "$SINGLE_DRAWER"
2026-05-14 19:07:48 -05:00
$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 ────────────────────────────────────────
2026-05-15 01:04:52 -05:00
err "close: refuse drawer inside target" $DRAWER close -i "$KEY" "$TEST_DIR" "$TEST_DIR/test.drawer"
2026-05-14 19:07:48 -05:00
# ── 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."