Files
arthur-os/test/shell.d/update-available-test.sh
T

121 lines
3.0 KiB
Bash

#!/bin/bash
set -euo pipefail
source "$(dirname "$0")/base-test.sh"
test_tmp=$(mktemp -d)
trap 'rm -rf "$test_tmp"' EXIT
stub_bin="$test_tmp/bin"
test_home="$test_tmp/home"
state_home="$test_tmp/state"
mkdir -p "$stub_bin" "$test_home" "$state_home"
cat >"$stub_bin/fakeroot" <<'SH'
#!/bin/bash
exit 0
SH
chmod +x "$stub_bin/fakeroot"
cat >"$stub_bin/checkupdates" <<'SH'
#!/bin/bash
case "${TEST_CHECKUPDATES:-updates}" in
updates)
printf 'linux 6.1-1 -> 6.1-2\nomarchy 4.0.0-1 -> 4.0.1-1\n'
exit 0
;;
none)
exit 2
;;
fail)
echo "check failed" >&2
exit 1
;;
esac
SH
chmod +x "$stub_bin/checkupdates"
cat >"$stub_bin/pacman" <<'SH'
#!/bin/bash
case "$1" in
-Qem)
[[ ${TEST_AUR_INSTALLED:-0} == "1" ]] && exit 0 || exit 1
;;
-Qu)
if [[ ${TEST_PACMAN_FALLBACK_UPDATES:-0} == "1" ]]; then
echo "fallback-pkg 1-1 -> 1-2"
fi
exit 0
;;
esac
exit 0
SH
chmod +x "$stub_bin/pacman"
cat >"$stub_bin/yay" <<'SH'
#!/bin/bash
if [[ ${TEST_YAY_UPDATES:-0} == "1" ]]; then
echo "aur-helper 1-1 -> 1-2"
fi
exit 0
SH
chmod +x "$stub_bin/yay"
run_checker() {
HOME="$test_home" \
XDG_STATE_HOME="$state_home" \
PATH="$stub_bin:$PATH" \
OMARCHY_UPDATE_CHECK_TIMEOUT=5 \
"$ROOT/bin/omarchy-update-available"
}
capture_checker() {
local stdout_file="$1"
local stderr_file="$2"
shift 2
set +e
(
export "$@"
run_checker
) >"$stdout_file" 2>"$stderr_file"
local status=$?
set -e
return "$status"
}
stdout="$test_tmp/stdout"
stderr="$test_tmp/stderr"
if capture_checker "$stdout" "$stderr" TEST_CHECKUPDATES=updates TEST_AUR_INSTALLED=0; then
status=0
else
status=$?
fi
[[ $status -eq 0 ]] || fail "update checker exits successfully when system updates are available"
grep -q '^linux ' "$stdout" || fail "update checker prints system package updates"
grep -q '^omarchy ' "$state_home/omarchy/updates/packages" || fail "update checker stores system package updates"
[[ $(wc -l <"$state_home/omarchy/updates/available") -eq 2 ]] || fail "update checker stores combined update list"
pass "update checker detects system package updates"
if capture_checker "$stdout" "$stderr" TEST_CHECKUPDATES=none TEST_AUR_INSTALLED=1 TEST_YAY_UPDATES=1; then
status=0
else
status=$?
fi
[[ $status -eq 0 ]] || fail "update checker exits successfully when AUR updates are available"
grep -q '^aur-helper ' "$stdout" || fail "update checker prints AUR package updates"
grep -q '^aur-helper ' "$state_home/omarchy/updates/aur" || fail "update checker stores AUR package updates"
pass "update checker detects AUR package updates"
if capture_checker "$stdout" "$stderr" TEST_CHECKUPDATES=none TEST_AUR_INSTALLED=0; then
status=0
else
status=$?
fi
[[ $status -eq 1 ]] || fail "update checker exits non-zero when no updates are available"
grep -q '^System is up to date$' "$stdout" || fail "update checker prints up-to-date message"
[[ ! -s "$state_home/omarchy/updates/available" ]] || fail "update checker clears combined update list when up to date"
pass "update checker reports up-to-date systems"