aboutsummaryrefslogtreecommitdiff
path: root/scripts/tests/session-title-hook.bats
blob: 60b633dbfca3503cac75e261f3ace06dadd064ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env bats
# hooks/session-title.sh — SessionStart hook that titles the session
# "<host> <project>" (uname -n + git-toplevel basename, cwd basename outside
# a repo) so remote sessions are identifiable on web/mobile. It only sets a
# title when the session doesn't have one yet: a /rename or an earlier run
# must not be clobbered on resume.

setup() {
    REPO_ROOT="$(cd "$(dirname "$BATS_TEST_FILENAME")/../.." && pwd)"
    SCRIPT="$REPO_ROOT/hooks/session-title.sh"
    TMPDIR_T="$(mktemp -d)"
    HOST="$(uname -n)"
}

teardown() {
    rm -rf "$TMPDIR_T"
}

run_hook() {
    # $1 = cwd, $2 = optional existing session_title
    if [ -n "${2:-}" ]; then
        printf '{"cwd":"%s","source":"startup","session_title":"%s"}' "$1" "$2" | sh "$SCRIPT"
    else
        printf '{"cwd":"%s","source":"startup"}' "$1" | sh "$SCRIPT"
    fi
}

@test "titles host + repo basename inside a git repo" {
    git -C "$TMPDIR_T" init -q -b main
    mkdir -p "$TMPDIR_T/sub/dir"
    run run_hook "$TMPDIR_T"
    [ "$status" -eq 0 ]
    title=$(echo "$output" | jq -r '.hookSpecificOutput.sessionTitle')
    [ "$title" = "$HOST $(basename "$TMPDIR_T")" ]
}

@test "uses the repo toplevel basename from a subdirectory" {
    git -C "$TMPDIR_T" init -q -b main
    mkdir -p "$TMPDIR_T/sub/dir"
    run run_hook "$TMPDIR_T/sub/dir"
    [ "$status" -eq 0 ]
    title=$(echo "$output" | jq -r '.hookSpecificOutput.sessionTitle')
    [ "$title" = "$HOST $(basename "$TMPDIR_T")" ]
}

@test "falls back to cwd basename outside a git repo" {
    mkdir -p "$TMPDIR_T/chime"
    run run_hook "$TMPDIR_T/chime"
    [ "$status" -eq 0 ]
    title=$(echo "$output" | jq -r '.hookSpecificOutput.sessionTitle')
    [ "$title" = "$HOST chime" ]
}

@test "emits valid SessionStart hookSpecificOutput" {
    run run_hook "$TMPDIR_T"
    [ "$status" -eq 0 ]
    event=$(echo "$output" | jq -r '.hookSpecificOutput.hookEventName')
    [ "$event" = "SessionStart" ]
}

@test "stays silent when a session title already exists" {
    run run_hook "$TMPDIR_T" "my custom name"
    [ "$status" -eq 0 ]
    [ -z "$output" ]
}

@test "emits no stderr noise" {
    err="$(printf '{"cwd":"%s","source":"startup"}' "$TMPDIR_T" | sh "$SCRIPT" 2>&1 >/dev/null)"
    [ -z "$err" ]
}