mirror of
https://github.com/tw93/Mole.git
synced 2026-02-11 06:34:21 +00:00
Automated test synchronous update
This commit is contained in:
@@ -177,24 +177,3 @@ setup() {
|
||||
rm -rf "$HOME/projects"
|
||||
}
|
||||
|
||||
# Test permission flag creation
|
||||
@test "check_tcc_permissions creates permission flag after check" {
|
||||
# Remove flag if exists
|
||||
rm -f "$HOME/.cache/mole/permissions_granted"
|
||||
|
||||
# Simulate accessible Library/Caches (skip TCC dialog)
|
||||
function ls() {
|
||||
return 0 # Simulate accessible
|
||||
}
|
||||
export -f ls
|
||||
|
||||
run bash -c "
|
||||
source '$PROJECT_ROOT/lib/common.sh'
|
||||
source '$PROJECT_ROOT/lib/clean_caches.sh'
|
||||
check_tcc_permissions < /dev/null
|
||||
"
|
||||
[ "$status" -eq 0 ]
|
||||
|
||||
# Permission flag should be created
|
||||
[[ -f "$HOME/.cache/mole/permissions_granted" ]]
|
||||
}
|
||||
|
||||
@@ -148,29 +148,6 @@ EOF
|
||||
rm -f "$HOME/temp_file_path.txt" "$HOME/temp_dir_path.txt"
|
||||
}
|
||||
|
||||
@test "parallel_execute runs worker across all items" {
|
||||
output_file="$HOME/parallel_output.txt"
|
||||
HOME="$HOME" bash --noprofile --norc << 'EOF'
|
||||
source "$PROJECT_ROOT/lib/common.sh"
|
||||
worker() {
|
||||
echo "$1" >> "$HOME/parallel_output.txt"
|
||||
}
|
||||
parallel_execute 2 worker "first" "second" "third"
|
||||
EOF
|
||||
|
||||
sort "$output_file" > "$output_file.sorted"
|
||||
results=()
|
||||
while IFS= read -r line; do
|
||||
results+=("$line")
|
||||
done < "$output_file.sorted"
|
||||
|
||||
[ "${#results[@]}" -eq 3 ]
|
||||
joined=" ${results[*]} "
|
||||
[[ "$joined" == *" first "* ]]
|
||||
[[ "$joined" == *" second "* ]]
|
||||
[[ "$joined" == *" third "* ]]
|
||||
rm -f "$output_file" "$output_file.sorted"
|
||||
}
|
||||
|
||||
@test "should_protect_data protects system and critical apps" {
|
||||
# System apps should be protected
|
||||
|
||||
@@ -100,19 +100,6 @@ teardown() {
|
||||
# Should not output error in silent mode
|
||||
}
|
||||
|
||||
# Test safe_sudo_remove
|
||||
@test "safe_sudo_remove rejects symlinks" {
|
||||
local test_file="$TEST_DIR/real_file"
|
||||
local test_link="$TEST_DIR/symlink"
|
||||
touch "$test_file"
|
||||
ln -s "$test_file" "$test_link"
|
||||
|
||||
run bash -c "source '$PROJECT_ROOT/lib/common.sh'; safe_sudo_remove '$test_link' 2>&1"
|
||||
[ "$status" -eq 1 ]
|
||||
[[ "$output" == *"symlink"* ]]
|
||||
|
||||
rm -f "$test_link" "$test_file"
|
||||
}
|
||||
|
||||
# Test safe_find_delete
|
||||
@test "safe_find_delete validates base directory" {
|
||||
|
||||
@@ -70,42 +70,7 @@ setup() {
|
||||
[ "$status" -eq 0 ]
|
||||
}
|
||||
|
||||
# Test request_sudo function structure
|
||||
@test "request_sudo accepts prompt parameter" {
|
||||
# Mock request_sudo_access to avoid actual prompting
|
||||
function request_sudo_access() {
|
||||
return 1 # Simulate denied
|
||||
}
|
||||
export -f request_sudo_access
|
||||
|
||||
run bash -c "source '$PROJECT_ROOT/lib/common.sh'; source '$PROJECT_ROOT/lib/sudo_manager.sh'; request_sudo 'Test prompt'"
|
||||
[ "$status" -eq 1 ] # Expected: denied
|
||||
}
|
||||
|
||||
# Test start_sudo_session integration
|
||||
@test "start_sudo_session handles success and failure paths" {
|
||||
# Mock request_sudo to simulate denied access
|
||||
function request_sudo() {
|
||||
return 1
|
||||
}
|
||||
export -f request_sudo
|
||||
|
||||
run bash -c "source '$PROJECT_ROOT/lib/common.sh'; source '$PROJECT_ROOT/lib/sudo_manager.sh'; start_sudo_session 'Test'"
|
||||
[ "$status" -eq 1 ]
|
||||
|
||||
# Mock request_sudo to simulate granted access
|
||||
function request_sudo() {
|
||||
return 0
|
||||
}
|
||||
function _start_sudo_keepalive() {
|
||||
echo "12345"
|
||||
}
|
||||
export -f request_sudo
|
||||
export -f _start_sudo_keepalive
|
||||
|
||||
run bash -c "source '$PROJECT_ROOT/lib/common.sh'; source '$PROJECT_ROOT/lib/sudo_manager.sh'; start_sudo_session 'Test'"
|
||||
[ "$status" -eq 0 ]
|
||||
}
|
||||
|
||||
# Test stop_sudo_session cleanup
|
||||
@test "stop_sudo_session cleans up keepalive process" {
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
dependency
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env bats
|
||||
# shellcheck disable=SC2030,SC2031
|
||||
|
||||
setup_file() {
|
||||
PROJECT_ROOT="$(cd "${BATS_TEST_DIRNAME}/.." && pwd)"
|
||||
@@ -123,75 +124,5 @@ setup() {
|
||||
[ "$status" -eq 1 ] # ESC cancels
|
||||
}
|
||||
|
||||
# Test perform_updates function structure
|
||||
@test "perform_updates handles brew formula updates" {
|
||||
# Mock brew to avoid actual updates
|
||||
function brew() {
|
||||
case "$1" in
|
||||
outdated)
|
||||
if [[ "${2:-}" == "--cask" ]]; then
|
||||
return 1 # No cask updates
|
||||
else
|
||||
echo "test-package"
|
||||
return 0 # Has formula updates
|
||||
fi
|
||||
;;
|
||||
upgrade)
|
||||
echo "Upgrading test-package..."
|
||||
return 0
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
export -f brew
|
||||
export BREW_OUTDATED_COUNT=1
|
||||
export BREW_FORMULA_OUTDATED_COUNT=1
|
||||
export BREW_CASK_OUTDATED_COUNT=0
|
||||
|
||||
run bash -c "source '$PROJECT_ROOT/lib/common.sh'; source '$PROJECT_ROOT/lib/update_manager.sh'; perform_updates"
|
||||
[ "$status" -eq 0 ]
|
||||
}
|
||||
|
||||
# Test update_homebrew function
|
||||
@test "update_homebrew returns early when no updates" {
|
||||
function brew() {
|
||||
case "$1" in
|
||||
outdated)
|
||||
return 1 # No updates
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
export -f brew
|
||||
|
||||
run bash -c "source '$PROJECT_ROOT/lib/common.sh'; source '$PROJECT_ROOT/lib/update_manager.sh'; update_homebrew"
|
||||
[ "$status" -eq 0 ]
|
||||
}
|
||||
|
||||
@test "update_homebrew handles network failures gracefully" {
|
||||
function brew() {
|
||||
case "$1" in
|
||||
outdated)
|
||||
if [[ "${2:-}" == "--quiet" ]]; then
|
||||
echo "test-package"
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
upgrade)
|
||||
return 1 # Simulate failure
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
export -f brew
|
||||
|
||||
run bash -c "source '$PROJECT_ROOT/lib/common.sh'; source '$PROJECT_ROOT/lib/update_manager.sh'; update_homebrew"
|
||||
# Should handle failure without crashing
|
||||
[ "$status" -eq 0 ] || [ "$status" -eq 1 ]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user