diff --git a/tests/system_maintenance.bats b/tests/system_maintenance.bats index 8c5e8a3..dc93696 100644 --- a/tests/system_maintenance.bats +++ b/tests/system_maintenance.bats @@ -220,6 +220,91 @@ EOF [[ "$output" == *"MACOS_UPDATE_AVAILABLE=true"* ]] } +@test "check_macos_update clears update flag when softwareupdate reports no updates" { + run bash --noprofile --norc <<'EOF' +set -euo pipefail +source "$PROJECT_ROOT/lib/core/common.sh" +source "$PROJECT_ROOT/lib/check/all.sh" + +defaults() { echo "1"; } + +run_with_timeout() { + shift + if [[ "${1:-}" == "softwareupdate" && "${2:-}" == "-l" && "${3:-}" == "--no-scan" ]]; then + cat <<'OUT' +Software Update Tool + +Finding available software +No new software available. +OUT + return 0 + fi + return 124 +} + +start_inline_spinner(){ :; } +stop_inline_spinner(){ :; } + +check_macos_update +echo "MACOS_UPDATE_AVAILABLE=$MACOS_UPDATE_AVAILABLE" +EOF + + [ "$status" -eq 0 ] + [[ "$output" == *"System up to date"* ]] + [[ "$output" == *"MACOS_UPDATE_AVAILABLE=false"* ]] +} + +@test "check_macos_update keeps update flag when softwareupdate times out" { + run bash --noprofile --norc <<'EOF' +set -euo pipefail +source "$PROJECT_ROOT/lib/core/common.sh" +source "$PROJECT_ROOT/lib/check/all.sh" + +defaults() { echo "1"; } + +run_with_timeout() { + shift + if [[ "${1:-}" == "softwareupdate" && "${2:-}" == "-l" && "${3:-}" == "--no-scan" ]]; then + return 124 + fi + return 124 +} + +start_inline_spinner(){ :; } +stop_inline_spinner(){ :; } + +check_macos_update +echo "MACOS_UPDATE_AVAILABLE=$MACOS_UPDATE_AVAILABLE" +EOF + + [ "$status" -eq 0 ] + [[ "$output" == *"Update available"* ]] + [[ "$output" == *"MACOS_UPDATE_AVAILABLE=true"* ]] +} + +@test "check_macos_update skips softwareupdate when defaults shows no updates" { + run bash --noprofile --norc <<'EOF' +set -euo pipefail +source "$PROJECT_ROOT/lib/core/common.sh" +source "$PROJECT_ROOT/lib/check/all.sh" + +defaults() { echo "0"; } + +run_with_timeout() { + echo "SHOULD_NOT_CALL_SOFTWAREUPDATE" + return 0 +} + +check_macos_update +echo "MACOS_UPDATE_AVAILABLE=$MACOS_UPDATE_AVAILABLE" +EOF + + [ "$status" -eq 0 ] + [[ "$output" == *"System up to date"* ]] + [[ "$output" == *"MACOS_UPDATE_AVAILABLE=false"* ]] + [[ "$output" != *"SHOULD_NOT_CALL_SOFTWAREUPDATE"* ]] +} + @test "run_with_timeout succeeds without GNU timeout" { run bash --noprofile --norc -c ' set -euo pipefail