Files
Panama/tests/quickshell/activity-state-contract.sh
T

47 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
fail() {
printf 'activity-state contract: %s\n' "$1" >&2
exit 1
}
activity() {
qs ipc call activity status | jq -r ".${1}"
}
event() {
qs ipc call status-events status | jq -r ".${1}"
}
cleanup() {
qs ipc call activity clear >/dev/null 2>&1 || true
qs ipc call status-events reset >/dev/null 2>&1 || true
}
trap cleanup EXIT
qs ipc show | rg -q '^target activity$' || fail 'activity IPC target is missing'
rg -q 'StatusEvents.publish' "$repo_dir/config/dot/quickshell/services/Capture.qml" || fail 'capture does not publish recording transitions'
rg -q 'status-events screenshot' "$repo_dir/config/dot/quickshell/services/Capture.qml" || fail 'successful screenshot path does not publish an event'
rg -q 'StatusEvents.publish' "$repo_dir/config/dot/quickshell/services/NightLight.qml" || fail 'Night Light does not publish transitions'
qs ipc call status-events reset >/dev/null
qs ipc call activity fixture microphone-on >/dev/null
[[ "$(activity microphoneActive)" == "true" ]] || fail 'microphone state did not become persistent'
[[ "$(event activeKey)" == "privacy-microphone" ]] || fail 'microphone transition did not publish Signal Glass event'
qs ipc call status-events dismiss >/dev/null
[[ "$(activity microphoneActive)" == "true" ]] || fail 'capsule dismissal cleared persistent privacy state'
qs ipc call activity fixture all-off >/dev/null
[[ "$(activity microphoneActive)" == "false" ]] || fail 'microphone state did not clear'
[[ "$(event activeKey)" == "privacy-microphone" ]] || fail 'microphone release did not publish a transition'
[[ "$(event title)" == "Microphone released" ]] || fail 'microphone release copy is incorrect'
trap - EXIT
cleanup
printf 'activity-state contract: PASS\n'