# Logseq-Installer Tests Tests für `logseq-install.sh` basierend auf [Bats (Bash Automated Testing System)](https://github.com/bats-core/bats-core). ## Schnellstart ```bash ./run-tests.sh ``` ## Voraussetzungen - **bats** muss installiert sein: ```bash # Debian/Ubuntu sudo apt-get install bats # Fedora sudo dnf install bats # macOS brew install bats-core ``` ## Verzeichnisstruktur ``` Logseq-Installer/ ├── logseq-install.sh # Hauptskript (bleibt unverändert) ├── run-tests.sh # Test-Runner └── test/ ├── logseq-installer.bats # Bats-Testdatei (21 Testfälle) ├── mocks/ # Mock-Skripte für externe Befehle │ ├── wget # simuliert GitHub API & Downloads │ ├── pgrep # steuert Prozess-Erkennung │ ├── find # steuert Versions-Erkennung & Cleanup │ └── update-desktop-database # no-op Mock └── fixtures/ # Testdaten & Mock-States ├── wget_state # konfiguriert wget-Mock ├── pgrep_state # konfiguriert pgrep-Mock ├── find_state # konfiguriert find-Mock └── Logseq-linux-x64-*.AppImage # Dummy-AppImages ``` ## Test-Abdeckung | # | Test | Beschreibung | |---|------|--------------| | 1-5 | Argument-Parsing | `-h`, `--hilfe`, unbekannte Optionen, `-r` | | 6 | Deinstallation | `--entfernen` entfernt alle Dateien | | 7-9 | Versionserkennung | GitHub-Version, installierte Version, nicht installiert | | 10 | Neuinstallation | Download, Symlink, Desktop-Datei | | 11 | Update | Alte Version wird durch neue ersetzt | | 12 | Kein Update | Bereits aktuelle Version | | 13 | Prozess-Check | Abbruch wenn Logseq läuft | | 14 | Download-Fehler | Fehlerbehandlung bei fehlgeschlagenem Download | | 15-16 | Desktop-Datei | Erstellung & Icon-Download | | 17 | Root-Check | Prüfung der Root-Logik | | 18 | Cleanup | Mehrere alte Versionen werden entfernt | | 19-21 | Code-Qualität | Farbcodes, ERR-Trap, require_command | ## Wie Mocks funktionieren Die Tests setzen `PATH` so, dass die Mocks vor den echten Befehlen gefunden werden: ```bash export PATH="${TEST_DIR}/mocks:${PATH}" ``` Jeder Mock liest seine Konfiguration aus einer State-Datei in `fixtures/`. Die Tests können diese States über Hilfsfunktionen setzen: ```bash set_wget_latest_version "0.10.16" # Neueste Version simulieren set_find_installed_version "0.10.14" # Installierte Version simulieren set_pgrep_running 1 # Prozess läuft (1) oder nicht (0) ``` ## Neuen Test hinzufügen In `test/logseq-installer.bats`: ```bash @test "mein neuer Test" { # Mock-States setzen set_wget_latest_version "0.10.16" set_find_installed_version "" set_pgrep_running 0 # Skript aufrufen run run_installer # Assertions [ "$status" -eq 0 ] [[ "$output" == *"erfolgreich"* ]] } ```