#!/usr/bin/env bats # Test-Suite für logseq-install.sh # Verwendet Mocks für wget, pgrep, find, update-desktop-database # ============================================================================= # VERSIONS-KONSTANTEN (nur hier ändern, Tests passen sich automatisch an) # ============================================================================= # Version, die als "neueste" von GitHub gemeldet wird VERSION_LATEST="0.10.15" # Version, die als bereits installiert simuliert wird (älter als LATEST) VERSION_INSTALLED="0.10.14" # Noch ältere Version für Cleanup-Tests (mehrere alte Versionen) VERSION_OUTDATED="0.10.13" # ============================================================================= # TEST-SETUP / TEARDOWN # ============================================================================= setup() { # Pfade relativ zur Testdatei ableiten (funktioniert unabhängig vom Ablageort) # BATS_TEST_DIRNAME zeigt immer auf das Verzeichnis der .bats-Datei. export MOCKS_DIR="${BATS_TEST_DIRNAME}/mocks" export FIXTURES_DIR="${BATS_TEST_DIRNAME}/fixtures" export SCRIPT_PATH="${BATS_TEST_DIRNAME}/../logseq-install.sh" # Test-Verzeichnis export TEST_DIR="$(mktemp -d)" export HOME="${TEST_DIR}/home" export INSTALL_DIR="${HOME}/.local/bin" export DESKTOP_DIR="${HOME}/.local/share/applications" # Mock-PATH vorbereiten (Mocks vor echten Befehlen) export PATH="${MOCKS_DIR}:${PATH}" # Home-Verzeichnis erstellen mkdir -p "${HOME}" "${INSTALL_DIR}" "${DESKTOP_DIR}" # Dummy-AppImages für alle benötigten Versionen on-the-fly erstellen create_dummy_appimage "${VERSION_LATEST}" create_dummy_appimage "${VERSION_INSTALLED}" create_dummy_appimage "${VERSION_OUTDATED}" # Mock-States zurücksetzen reset_mocks } teardown() { rm -rf "${TEST_DIR}" } # ============================================================================= # HELPER-FUNKTIONEN # ============================================================================= # Erzeugt ein Dummy-AppImage für eine bestimmte Version (falls nicht vorhanden) create_dummy_appimage() { local version="$1" local file="${FIXTURES_DIR}/Logseq-linux-x64-${version}.AppImage" if [[ ! -f "${file}" ]]; then { echo "#!/bin/bash" echo "echo \"Logseq ${version} dummy\"" } > "${file}" chmod +x "${file}" fi } # Mock-States auf Default zurücksetzen reset_mocks() { set_wget_latest_version "${VERSION_LATEST}" set_wget_download_success "true" set_pgrep_running 0 set_find_installed_version "" } # Mock-State für wget: neueste Version setzen set_wget_latest_version() { local version="$1" create_dummy_appimage "${version}" cat > "${FIXTURES_DIR}/wget_state" < "${FIXTURES_DIR}/wget_state" < "${FIXTURES_DIR}/pgrep_state" < "${FIXTURES_DIR}/find_state" < "${FIXTURES_DIR}/find_state" <