mirror of
https://github.com/tw93/Mole.git
synced 2026-03-22 20:15:07 +00:00
refactor: reuse sudo cache checks in clean dry-run tests
This commit is contained in:
11
bin/clean.sh
11
bin/clean.sh
@@ -137,6 +137,11 @@ note_activity() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# shellcheck disable=SC2329
|
||||||
|
has_cached_sudo() {
|
||||||
|
sudo -n true 2> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
CLEANUP_DONE=false
|
CLEANUP_DONE=false
|
||||||
# shellcheck disable=SC2329
|
# shellcheck disable=SC2329
|
||||||
cleanup() {
|
cleanup() {
|
||||||
@@ -733,7 +738,7 @@ start_cleanup() {
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Preview system section when sudo is already cached (no password prompt).
|
# Preview system section when sudo is already cached (no password prompt).
|
||||||
if sudo -n true 2> /dev/null; then
|
if has_cached_sudo; then
|
||||||
SYSTEM_CLEAN=true
|
SYSTEM_CLEAN=true
|
||||||
echo -e "${GREEN}${ICON_SUCCESS}${NC} Admin access available, system preview included"
|
echo -e "${GREEN}${ICON_SUCCESS}${NC} Admin access available, system preview included"
|
||||||
echo ""
|
echo ""
|
||||||
@@ -746,7 +751,7 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -t 0 ]]; then
|
if [[ -t 0 ]]; then
|
||||||
if sudo -n true 2> /dev/null; then
|
if has_cached_sudo; then
|
||||||
SYSTEM_CLEAN=true
|
SYSTEM_CLEAN=true
|
||||||
echo -e "${GREEN}${ICON_SUCCESS}${NC} Admin access already available"
|
echo -e "${GREEN}${ICON_SUCCESS}${NC} Admin access already available"
|
||||||
echo ""
|
echo ""
|
||||||
@@ -786,7 +791,7 @@ EOF
|
|||||||
else
|
else
|
||||||
echo ""
|
echo ""
|
||||||
echo "Running in non-interactive mode"
|
echo "Running in non-interactive mode"
|
||||||
if sudo -n true 2> /dev/null; then
|
if has_cached_sudo; then
|
||||||
SYSTEM_CLEAN=true
|
SYSTEM_CLEAN=true
|
||||||
echo " ${ICON_LIST} System-level cleanup enabled, sudo session active"
|
echo " ${ICON_LIST} System-level cleanup enabled, sudo session active"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -25,19 +25,13 @@ setup() {
|
|||||||
rm -rf "${HOME:?}"/*
|
rm -rf "${HOME:?}"/*
|
||||||
rm -rf "$HOME/Library" "$HOME/.config"
|
rm -rf "$HOME/Library" "$HOME/.config"
|
||||||
mkdir -p "$HOME/Library/Caches" "$HOME/.config/mole"
|
mkdir -p "$HOME/Library/Caches" "$HOME/.config/mole"
|
||||||
|
unset TEST_MOCK_BIN
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "mo clean --dry-run skips system cleanup in non-interactive mode" {
|
set_mock_sudo_cached() {
|
||||||
run env HOME="$HOME" MOLE_TEST_MODE=1 "$PROJECT_ROOT/mole" clean --dry-run
|
TEST_MOCK_BIN="$HOME/bin"
|
||||||
[ "$status" -eq 0 ]
|
mkdir -p "$TEST_MOCK_BIN"
|
||||||
[[ "$output" == *"Dry Run Mode"* ]]
|
cat > "$TEST_MOCK_BIN/sudo" << 'MOCK'
|
||||||
[[ "$output" != *"Deep system-level cleanup"* ]]
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "mo clean --dry-run includes system preview when sudo is cached" {
|
|
||||||
local mock_bin="$HOME/bin"
|
|
||||||
mkdir -p "$mock_bin"
|
|
||||||
cat > "$mock_bin/sudo" << 'MOCK'
|
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Shim: sudo -n true succeeds, all other sudo calls are no-ops.
|
# Shim: sudo -n true succeeds, all other sudo calls are no-ops.
|
||||||
if [[ "$1" == "-n" && "$2" == "true" ]]; then exit 0; fi
|
if [[ "$1" == "-n" && "$2" == "true" ]]; then exit 0; fi
|
||||||
@@ -45,26 +39,49 @@ if [[ "$1" == "test" ]]; then exit 1; fi
|
|||||||
if [[ "$1" == "find" ]]; then exit 0; fi
|
if [[ "$1" == "find" ]]; then exit 0; fi
|
||||||
exit 0
|
exit 0
|
||||||
MOCK
|
MOCK
|
||||||
chmod +x "$mock_bin/sudo"
|
chmod +x "$TEST_MOCK_BIN/sudo"
|
||||||
|
}
|
||||||
|
|
||||||
run env HOME="$HOME" MOLE_TEST_MODE=1 PATH="$mock_bin:$PATH" \
|
set_mock_sudo_uncached() {
|
||||||
|
TEST_MOCK_BIN="$HOME/bin"
|
||||||
|
mkdir -p "$TEST_MOCK_BIN"
|
||||||
|
cat > "$TEST_MOCK_BIN/sudo" << 'MOCK'
|
||||||
|
#!/bin/bash
|
||||||
|
# Shim: sudo -n always fails (no cached credentials).
|
||||||
|
exit 1
|
||||||
|
MOCK
|
||||||
|
chmod +x "$TEST_MOCK_BIN/sudo"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_clean_dry_run() {
|
||||||
|
local test_path="$PATH"
|
||||||
|
if [[ -n "${TEST_MOCK_BIN:-}" ]]; then
|
||||||
|
test_path="$TEST_MOCK_BIN:$PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
run env HOME="$HOME" MOLE_TEST_MODE=1 PATH="$test_path" \
|
||||||
"$PROJECT_ROOT/mole" clean --dry-run
|
"$PROJECT_ROOT/mole" clean --dry-run
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "mo clean --dry-run skips system cleanup in non-interactive mode" {
|
||||||
|
set_mock_sudo_uncached
|
||||||
|
run_clean_dry_run
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[[ "$output" == *"Dry Run Mode"* ]]
|
||||||
|
[[ "$output" == *"sudo -v && mo clean --dry-run"* ]]
|
||||||
|
[[ "$output" != *"system preview included"* ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
@test "mo clean --dry-run includes system preview when sudo is cached" {
|
||||||
|
set_mock_sudo_cached
|
||||||
|
run_clean_dry_run
|
||||||
[ "$status" -eq 0 ]
|
[ "$status" -eq 0 ]
|
||||||
[[ "$output" == *"system preview included"* ]]
|
[[ "$output" == *"system preview included"* ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "mo clean --dry-run shows hint when sudo is not cached" {
|
@test "mo clean --dry-run shows hint when sudo is not cached" {
|
||||||
local mock_bin="$HOME/bin"
|
set_mock_sudo_uncached
|
||||||
mkdir -p "$mock_bin"
|
run_clean_dry_run
|
||||||
cat > "$mock_bin/sudo" << 'MOCK'
|
|
||||||
#!/bin/bash
|
|
||||||
# Shim: sudo -n always fails (no cached credentials).
|
|
||||||
exit 1
|
|
||||||
MOCK
|
|
||||||
chmod +x "$mock_bin/sudo"
|
|
||||||
|
|
||||||
run env HOME="$HOME" MOLE_TEST_MODE=1 PATH="$mock_bin:$PATH" \
|
|
||||||
"$PROJECT_ROOT/mole" clean --dry-run
|
|
||||||
[ "$status" -eq 0 ]
|
[ "$status" -eq 0 ]
|
||||||
[[ "$output" == *"sudo -v"* ]]
|
[[ "$output" == *"sudo -v"* ]]
|
||||||
[[ "$output" == *"full preview"* ]]
|
[[ "$output" == *"full preview"* ]]
|
||||||
@@ -300,4 +317,3 @@ EOF
|
|||||||
[[ "$output" == *"Time Machine backup in progress, skipping cleanup"* ]]
|
[[ "$output" == *"Time Machine backup in progress, skipping cleanup"* ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user