Refactoring & tests

This commit is contained in:
Tim
2026-07-06 21:09:30 +02:00
parent 482b3b8d29
commit 9ed66dacbc
14 changed files with 948 additions and 108 deletions
+53
View File
@@ -0,0 +1,53 @@
#!/bin/bash
# Mock für find - steuert Datei-Erkennung
# - Bei Versions-Erkennung: simulierte Pfade aus State
# - Bei Cleanup mit -delete: echte Dateien löschen
MOCK_DIR="/home/tim/Dokumente/Sourcen/Logseq-Installer/test/fixtures"
MOCK_STATE_FILE="${MOCK_DIR}/find_state"
# Echten find über absoluten Pfad aufrufen (vermeidet Rekursion über PATH)
REAL_FIND=""
for candidate in /usr/bin/find /bin/find /usr/local/bin/find; do
if [[ -x "$candidate" ]]; then
resolved="$(readlink -f "$candidate" 2>/dev/null || echo "$candidate")"
[[ "$resolved" != *test/mocks* ]] && REAL_FIND="$candidate" && break
fi
done
[[ -z "$REAL_FIND" ]] && REAL_FIND="/usr/bin/find"
if [[ -f "${MOCK_STATE_FILE}" ]]; then
# shellcheck source=/dev/null
source "${MOCK_STATE_FILE}"
fi
# Defaults
FIND_INSTALLED_VERSION="${FIND_INSTALLED_VERSION:-}"
FIND_FILES=()
# State parsen: FIND_FILES="file1|file2|file3"
if [[ -n "${FIND_FILES_RAW}" ]]; then
IFS='|' read -ra FIND_FILES <<< "${FIND_FILES_RAW}"
fi
# Bei -delete: echte find-Operation auf das Zielverzeichnis ausführen
# (löscht echte Dateien im Test-HOME)
if [[ "$*" == *"-delete"* ]]; then
"$REAL_FIND" "$@"
exit $?
fi
# Prüfen ob wir nach AppImages suchen (Versions-Erkennung)
if [[ "$*" == *"Logseq-linux-x64-*.AppImage"* ]] || [[ "$*" == *"Logseq-\*AppImage"* ]]; then
if [[ -n "${FIND_INSTALLED_VERSION}" ]]; then
# Simuliere installierte Version
echo "${MOCK_DIR}/Logseq-linux-x64-${FIND_INSTALLED_VERSION}.AppImage"
elif [[ ${#FIND_FILES[@]} -gt 0 ]]; then
for f in "${FIND_FILES[@]}"; do
echo "${MOCK_DIR}/${f}"
done
fi
exit 0
fi
# Fallback: echtes find aufrufen (für update-desktop-database etc.)
"$REAL_FIND" "$@"
+33
View File
@@ -0,0 +1,33 @@
#!/bin/bash
# Mock für pgrep - steuert Prozess-Erkennung
# pgrep -c: gibt Anzahl aus, Exit-Code 0 wenn >0, sonst 1
MOCK_DIR="/home/tim/Dokumente/Sourcen/Logseq-Installer/test/fixtures"
MOCK_STATE_FILE="${MOCK_DIR}/pgrep_state"
if [[ -f "${MOCK_STATE_FILE}" ]]; then
# shellcheck source=/dev/null
source "${MOCK_STATE_FILE}"
fi
# Default: kein Prozess läuft
PGREP_MATCH_COUNT="${PGREP_MATCH_COUNT:-0}"
# -c flag: count matches (prüft ob -c in den Flags enthalten ist)
if [[ "$*" == *"-c"* ]] || [[ "$*" == *"-ifcx"* ]] || [[ "$*" == *"-c "* ]]; then
echo "${PGREP_MATCH_COUNT}"
# Exit-Code wie echtes pgrep: 0 wenn Treffer, 1 wenn keine Treffer
[[ "${PGREP_MATCH_COUNT}" -gt 0 ]]
exit $?
fi
# Normaler Aufruf: PIDs zurückgeben
if [[ "${PGREP_MATCH_COUNT}" -gt 0 ]]; then
for i in $(seq 1 "${PGREP_MATCH_COUNT}"); do
echo $((1000 + i))
done
exit 0
fi
# Keine Treffer
exit 1
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# Mock für update-desktop-database - macht nichts (no-op)
# Verhindert echte Datenbank-Updates im Test-Environment
exit 0
+71
View File
@@ -0,0 +1,71 @@
#!/bin/bash
# Mock für wget - simuliert GitHub API und Downloads
MOCK_DIR="$(dirname "$0")/../fixtures"
MOCK_STATE_FILE="${MOCK_DIR}/wget_state"
# State laden (welche Version soll zurückgegeben werden?)
if [[ -f "${MOCK_STATE_FILE}" ]]; then
# shellcheck source=/dev/null
source "${MOCK_STATE_FILE}"
fi
# Defaults
WGET_LATEST_VERSION="${WGET_LATEST_VERSION:-0.10.15}"
WGET_DOWNLOAD_SUCCESS="${WGET_DOWNLOAD_SUCCESS:-true}"
WGET_DOWNLOAD_FILE="${WGET_DOWNLOAD_FILE:-${MOCK_DIR}/Logseq-linux-x64-0.10.15.AppImage}"
case "$*" in
*releases/latest*)
# Simuliere GitHub Release-Seite
echo "<html><body><a href=\"/logseq/logseq/releases/tag/${WGET_LATEST_VERSION}\">Latest</a></body></html>"
;;
*Logseq-linux-x64-*.AppImage*)
# Download simulieren
if [[ "${WGET_DOWNLOAD_SUCCESS}" == "true" ]]; then
# Output-Datei ermitteln (-qO oder -O)
output_file=""
for i in "$@"; do
case $i in
-qO|-O)
output_file="$2"
shift 2
;;
esac
done
if [[ -n "${output_file}" ]]; then
cp "${WGET_DOWNLOAD_FILE}" "${output_file}"
else
cat "${WGET_DOWNLOAD_FILE}"
fi
exit 0
else
exit 1
fi
;;
*raw.githubusercontent.com*logseq.png*)
# Icon-Download
output_file=""
for i in "$@"; do
case $i in
-qO|-O)
output_file="$2"
shift 2
;;
esac
done
if [[ -n "${output_file}" ]]; then
# Dummy PNG erstellen (1x1 pixel)
printf '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90wS\xde\x00\x00\x00\x0cIDAT\x08\xd7c\xf8\xff\xff\x3f\x00\x05\xfe\x02\xfe\xa7\x0f\x9d\x1e\x00\x00\x00\x00IEND\xaeB`\x82' > "${output_file}"
fi
;;
*)
echo "Mock wget: unbekannter Aufruf: $*" >&2
exit 1
;;
esac