aboutsummaryrefslogtreecommitdiff
path: root/scripts/tests
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/tests')
-rw-r--r--scripts/tests/install-hooks-link.bats56
1 files changed, 56 insertions, 0 deletions
diff --git a/scripts/tests/install-hooks-link.bats b/scripts/tests/install-hooks-link.bats
new file mode 100644
index 0000000..80ac8dd
--- /dev/null
+++ b/scripts/tests/install-hooks-link.bats
@@ -0,0 +1,56 @@
+#!/usr/bin/env bats
+# make install must link default hooks into HOOKS_DIR. The gap this guards:
+# install-hooks was a separate target nobody re-ran, so a hook added to the
+# repo (session-clear-resume.sh, 2026-06-02) reached settings.json on every
+# machine via the tracked symlink but its ~/.claude/hooks/ link never landed,
+# and the hook errored silently on every /clear until a manual install.
+
+setup() {
+ REPO_ROOT="$(cd "$(dirname "$BATS_TEST_FILENAME")/../.." && pwd)"
+ TMPHOME="$(mktemp -d)"
+}
+
+teardown() {
+ rm -rf "$TMPHOME"
+}
+
+run_install() {
+ make -C "$REPO_ROOT" install \
+ SKILLS_DIR="$TMPHOME/skills" \
+ RULES_DIR="$TMPHOME/rules" \
+ HOOKS_DIR="$TMPHOME/hooks" \
+ CLAUDE_DIR="$TMPHOME/claude" \
+ LOCAL_BIN="$TMPHOME/bin"
+}
+
+@test "install links default hooks into HOOKS_DIR" {
+ run run_install
+ [ "$status" -eq 0 ]
+ [ -L "$TMPHOME/hooks/session-clear-resume.sh" ]
+ [ -L "$TMPHOME/hooks/precompact-priorities.sh" ]
+}
+
+@test "install does not link opt-in hooks" {
+ run run_install
+ [ "$status" -eq 0 ]
+ [ ! -e "$TMPHOME/hooks/destructive-bash-confirm.py" ]
+}
+
+@test "install is idempotent on hooks (second run skips, link survives)" {
+ run run_install
+ [ "$status" -eq 0 ]
+ run run_install
+ [ "$status" -eq 0 ]
+ [[ "$output" == *"skip session-clear-resume.sh (already linked)"* ]]
+ [ -L "$TMPHOME/hooks/session-clear-resume.sh" ]
+}
+
+@test "install warns on a non-symlink collision and leaves the file alone" {
+ mkdir -p "$TMPHOME/hooks"
+ echo "real file" > "$TMPHOME/hooks/session-clear-resume.sh"
+ run run_install
+ [ "$status" -eq 0 ]
+ [[ "$output" == *"WARN session-clear-resume.sh exists and is not a symlink"* ]]
+ [ ! -L "$TMPHOME/hooks/session-clear-resume.sh" ]
+ grep -q "real file" "$TMPHOME/hooks/session-clear-resume.sh"
+}