mirror of
https://github.com/tw93/Mole.git
synced 2026-03-22 19:40:07 +00:00
refactor: reuse sudo cache checks in clean dry-run tests
This commit is contained in:
@@ -25,19 +25,13 @@ setup() {
|
||||
rm -rf "${HOME:?}"/*
|
||||
rm -rf "$HOME/Library" "$HOME/.config"
|
||||
mkdir -p "$HOME/Library/Caches" "$HOME/.config/mole"
|
||||
unset TEST_MOCK_BIN
|
||||
}
|
||||
|
||||
@test "mo clean --dry-run skips system cleanup in non-interactive mode" {
|
||||
run env HOME="$HOME" MOLE_TEST_MODE=1 "$PROJECT_ROOT/mole" clean --dry-run
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"Dry Run Mode"* ]]
|
||||
[[ "$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'
|
||||
set_mock_sudo_cached() {
|
||||
TEST_MOCK_BIN="$HOME/bin"
|
||||
mkdir -p "$TEST_MOCK_BIN"
|
||||
cat > "$TEST_MOCK_BIN/sudo" << 'MOCK'
|
||||
#!/bin/bash
|
||||
# Shim: sudo -n true succeeds, all other sudo calls are no-ops.
|
||||
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
|
||||
exit 0
|
||||
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
|
||||
}
|
||||
|
||||
@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 ]
|
||||
[[ "$output" == *"system preview included"* ]]
|
||||
}
|
||||
|
||||
@test "mo clean --dry-run shows hint when sudo is not cached" {
|
||||
local mock_bin="$HOME/bin"
|
||||
mkdir -p "$mock_bin"
|
||||
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
|
||||
set_mock_sudo_uncached
|
||||
run_clean_dry_run
|
||||
[ "$status" -eq 0 ]
|
||||
[[ "$output" == *"sudo -v"* ]]
|
||||
[[ "$output" == *"full preview"* ]]
|
||||
@@ -300,4 +317,3 @@ EOF
|
||||
[[ "$output" == *"Time Machine backup in progress, skipping cleanup"* ]]
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user