mirror of
https://github.com/tw93/Mole.git
synced 2026-02-04 19:44:44 +00:00
131 lines
4.2 KiB
Bash
131 lines
4.2 KiB
Bash
#!/usr/bin/env bats
|
|
# shellcheck disable=SC2030,SC2031
|
|
|
|
setup_file() {
|
|
PROJECT_ROOT="$(cd "${BATS_TEST_DIRNAME}/.." && pwd)"
|
|
export PROJECT_ROOT
|
|
|
|
ORIGINAL_HOME="${HOME:-}"
|
|
export ORIGINAL_HOME
|
|
|
|
HOME="$(mktemp -d "${BATS_TEST_DIRNAME}/tmp-update-manager.XXXXXX")"
|
|
export HOME
|
|
|
|
mkdir -p "$HOME"
|
|
}
|
|
|
|
teardown_file() {
|
|
rm -rf "$HOME"
|
|
if [[ -n "${ORIGINAL_HOME:-}" ]]; then
|
|
export HOME="$ORIGINAL_HOME"
|
|
fi
|
|
}
|
|
|
|
setup() {
|
|
source "$PROJECT_ROOT/lib/core/common.sh"
|
|
source "$PROJECT_ROOT/lib/manage/update.sh"
|
|
}
|
|
|
|
# Test brew_has_outdated function
|
|
@test "brew_has_outdated returns 1 when brew not installed" {
|
|
# shellcheck disable=SC2329
|
|
function brew() {
|
|
return 127 # Command not found
|
|
}
|
|
export -f brew
|
|
|
|
run bash -c "source '$PROJECT_ROOT/lib/core/common.sh'; source '$PROJECT_ROOT/lib/manage/update.sh'; brew_has_outdated"
|
|
[ "$status" -eq 1 ]
|
|
}
|
|
|
|
@test "brew_has_outdated checks formula by default" {
|
|
# Mock brew to simulate outdated formulas
|
|
# shellcheck disable=SC2329
|
|
function brew() {
|
|
if [[ "$1" == "outdated" && "$2" != "--cask" ]]; then
|
|
echo "package1"
|
|
echo "package2"
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
export -f brew
|
|
|
|
run bash -c "source '$PROJECT_ROOT/lib/core/common.sh'; source '$PROJECT_ROOT/lib/manage/update.sh'; brew_has_outdated"
|
|
[ "$status" -eq 0 ]
|
|
}
|
|
|
|
@test "brew_has_outdated checks casks when specified" {
|
|
# Mock brew to simulate outdated casks
|
|
function brew() {
|
|
if [[ "$1" == "outdated" && "$2" == "--cask" ]]; then
|
|
echo "app1"
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
export -f brew
|
|
|
|
run bash -c "source '$PROJECT_ROOT/lib/core/common.sh'; source '$PROJECT_ROOT/lib/manage/update.sh'; brew_has_outdated cask"
|
|
[ "$status" -eq 0 ]
|
|
}
|
|
|
|
# Test format_brew_update_label function
|
|
@test "format_brew_update_label returns empty when no updates" {
|
|
result=$(BREW_OUTDATED_COUNT=0 bash -c "source '$PROJECT_ROOT/lib/core/common.sh'; source '$PROJECT_ROOT/lib/manage/update.sh'; format_brew_update_label")
|
|
[[ -z "$result" ]]
|
|
}
|
|
|
|
@test "format_brew_update_label formats with formula and cask counts" {
|
|
result=$(BREW_OUTDATED_COUNT=5 BREW_FORMULA_OUTDATED_COUNT=3 BREW_CASK_OUTDATED_COUNT=2 bash -c "source '$PROJECT_ROOT/lib/core/common.sh'; source '$PROJECT_ROOT/lib/manage/update.sh'; format_brew_update_label")
|
|
[[ "$result" =~ "3 formula" ]]
|
|
[[ "$result" =~ "2 cask" ]]
|
|
}
|
|
|
|
@test "format_brew_update_label shows total when breakdown unavailable" {
|
|
result=$(BREW_OUTDATED_COUNT=5 bash -c "source '$PROJECT_ROOT/lib/core/common.sh'; source '$PROJECT_ROOT/lib/manage/update.sh'; format_brew_update_label")
|
|
[[ "$result" =~ "5 updates" ]]
|
|
}
|
|
|
|
# Test ask_for_updates function
|
|
@test "ask_for_updates returns 1 when no updates available" {
|
|
run bash -c "source '$PROJECT_ROOT/lib/core/common.sh'; source '$PROJECT_ROOT/lib/manage/update.sh'; ask_for_updates < /dev/null"
|
|
[ "$status" -eq 1 ]
|
|
}
|
|
|
|
@test "ask_for_updates detects Homebrew updates" {
|
|
# Mock environment with Homebrew updates
|
|
export BREW_OUTDATED_COUNT=5
|
|
export BREW_FORMULA_OUTDATED_COUNT=3
|
|
export BREW_CASK_OUTDATED_COUNT=2
|
|
|
|
# Use input redirection to simulate ESC (cancel)
|
|
run bash -c "printf '\x1b' | source '$PROJECT_ROOT/lib/core/common.sh'; source '$PROJECT_ROOT/lib/manage/update.sh'; ask_for_updates"
|
|
# Should show updates and ask for confirmation
|
|
[ "$status" -eq 1 ] # ESC cancels
|
|
}
|
|
|
|
@test "ask_for_updates detects App Store updates" {
|
|
export APPSTORE_UPDATE_COUNT=3
|
|
|
|
run bash -c "printf '\x1b' | source '$PROJECT_ROOT/lib/core/common.sh'; source '$PROJECT_ROOT/lib/manage/update.sh'; ask_for_updates"
|
|
[ "$status" -eq 1 ] # ESC cancels
|
|
}
|
|
|
|
@test "ask_for_updates detects macOS updates" {
|
|
export MACOS_UPDATE_AVAILABLE=true
|
|
|
|
run bash -c "printf '\x1b' | source '$PROJECT_ROOT/lib/core/common.sh'; source '$PROJECT_ROOT/lib/manage/update.sh'; ask_for_updates"
|
|
[ "$status" -eq 1 ] # ESC cancels
|
|
}
|
|
|
|
@test "ask_for_updates detects Mole updates" {
|
|
export MOLE_UPDATE_AVAILABLE=true
|
|
|
|
run bash -c "printf '\x1b' | source '$PROJECT_ROOT/lib/core/common.sh'; source '$PROJECT_ROOT/lib/manage/update.sh'; ask_for_updates"
|
|
[ "$status" -eq 1 ] # ESC cancels
|
|
}
|
|
|
|
|
|
|