aboutsummaryrefslogtreecommitdiff
path: root/scripts/tests/signal-receive.bats
blob: 8fe4d6794e47607038eec46f0e2890b720d87373 (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
#!/usr/bin/env bats
# signal-receive.sh — drains the Signal pager account's inbound queue to keep it
# warm (the roam-sync-shaped fix for receive-staleness) and to surface Craig's
# replies. Run on velox by the signal-receive systemd timer. These tests stub
# signal-cli on PATH to verify command construction without a network or the
# real account.

setup() {
    REPO_ROOT="$(cd "$(dirname "$BATS_TEST_FILENAME")/../.." && pwd)"
    RECV="$REPO_ROOT/scripts/signal-receive.sh"
    STUBS="$(mktemp -d)"
    LOG="$STUBS/calls.log"
    # HAS_ACCOUNT (default 1) controls the listAccounts answer so the local-account
    # guard can be exercised: "1" lists both test accounts as present, "0" lists
    # none (so the guard no-ops).
    cat > "$STUBS/signal-cli" <<EOF
#!/bin/bash
if [ "\$1" = "listAccounts" ]; then
  if [ "\${HAS_ACCOUNT:-1}" = "1" ]; then
    echo "Number: +15045173983"
    echo "Number: +19995550000"
  fi
  exit 0
fi
echo "signal-cli \$*" >> "$LOG"
exit 0
EOF
    chmod +x "$STUBS/signal-cli"
}

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

@test "defaults to the pager account, a 10s timeout, and read receipts" {
    PATH="$STUBS:$PATH" run bash "$RECV"
    [ "$status" -eq 0 ]
    grep -q -- "-a +15045173983 receive --timeout 10 --send-read-receipts" "$LOG"
}

@test "honors an explicit account and timeout" {
    PATH="$STUBS:$PATH" run bash "$RECV" +19995550000 25
    [ "$status" -eq 0 ]
    grep -q -- "-a +19995550000 receive --timeout 25" "$LOG"
}

@test "no-ops (exit 0) when the account is not registered on this machine" {
    # Guards the runbook claim that the timer no-ops on a common-package machine
    # that stows the units but holds no pager account.
    HAS_ACCOUNT=0 PATH="$STUBS:$PATH" run bash "$RECV"
    [ "$status" -eq 0 ]
    [[ "$output" == *"not registered"* ]]
    # The receive must not have run.
    ! grep -q "receive" "$LOG"
}

@test "no-ops (exit 0) when signal-cli is not on PATH" {
    # Empty stub dir with no signal-cli; echo/exit/command are bash builtins, so
    # the script still runs and hits its signal-cli-absent branch, which no-ops.
    rm -f "$STUBS/signal-cli"
    # Invoke bash by absolute path so `run` finds it regardless of the empty
    # PATH the script itself sees.
    PATH="$STUBS" run "$(command -v bash)" "$RECV"
    [ "$status" -eq 0 ]
    [[ "$output" == *"signal-cli"* ]]
}