Files
Panama/tests/quickshell/status-events-contract.sh
T

56 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
fail() {
printf 'status-events contract: %s\n' "$1" >&2
exit 1
}
status() {
qs ipc call status-events status | jq -r ".${1}"
}
cleanup() {
qs ipc call status-events reset >/dev/null 2>&1 || true
if [[ "${restore_dnd:-false}" == "true" ]]; then
qs ipc call notifications dnd >/dev/null 2>&1 || true
fi
}
trap cleanup EXIT
qs ipc show | rg -q '^target status-events$' || fail 'IPC target is missing'
qs ipc call status-events reset >/dev/null
qs ipc call status-events fixture ambient >/dev/null
[[ "$(status activeKey)" == "device-output" ]] || fail 'ambient fixture did not become active'
[[ "$(status queueLength)" == "0" ]] || fail 'first event unexpectedly queued'
qs ipc call status-events fixture ambient-replacement >/dev/null
[[ "$(status activeKey)" == "device-output" ]] || fail 'equivalent event changed its stable key'
[[ "$(status title)" == "Studio Display" ]] || fail 'equivalent event did not replace active content'
[[ "$(status queueLength)" == "0" ]] || fail 'equivalent event stacked instead of replacing'
qs ipc call status-events fixture critical >/dev/null
[[ "$(status activeKey)" == "privacy-microphone" ]] || fail 'critical event did not preempt ambient event'
[[ "$(status priority)" == "90" ]] || fail 'critical event priority was not preserved'
[[ "$(status queueLength)" == "1" ]] || fail 'preempted event was not retained once'
qs ipc call status-events dismiss >/dev/null
[[ "$(status activeKey)" == "device-output" ]] || fail 'dismiss did not reveal the queued ambient event'
qs ipc call status-events reset >/dev/null
dnd_now="$(qs ipc call notifications dnd)"
if [[ "$dnd_now" == "true" ]]; then
restore_dnd=true
fi
qs ipc call status-events fixture ambient >/dev/null
[[ "$(status active)" == "false" ]] || fail 'DND did not suppress an ambient event'
qs ipc call status-events fixture critical >/dev/null
[[ "$(status activeKey)" == "privacy-microphone" ]] || fail 'DND suppressed a privacy event'
trap - EXIT
cleanup
printf 'status-events contract: PASS\n'