Files
Logseq-Installer/test/README.md
T
2026-07-06 21:51:48 +02:00

3.5 KiB

Logseq-Installer Tests

Tests für logseq-install.sh basierend auf Bats (Bash Automated Testing System).

Schnellstart

./run-tests.sh

Voraussetzungen

  • bats muss installiert sein:

    # 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:

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:

set_wget_latest_version "${VERSION_LATEST}"     # Neueste Version simulieren
set_find_installed_version "${VERSION_INSTALLED}"  # Installierte Version simulieren
set_pgrep_running 1                              # Prozess läuft (1) oder nicht (0)

Versions-Variablen

Versionsnummern sind nicht hartkodiert in den Tests, sondern als Variablen am Anfang der Testdatei definiert. Dummy-AppImages werden on-the-fly erstellt:

VERSION_LATEST="0.10.15"      # Neueste verfügbare Version
VERSION_INSTALLED="0.10.14"   # Ältere installierte Version
VERSION_OUTDATED="0.10.13"    # Noch ältere Version (für Cleanup-Tests)

Um die Tests an eine neue Version anzupassen, reicht es, diese drei Variablen zu ändern. Die Dummy-AppImages und State-Dateien werden automatisch angepasst.

Neuen Test hinzufügen

In test/logseq-installer.bats:

@test "mein neuer Test" {
    # Mock-States setzen
    set_wget_latest_version "${VERSION_LATEST}"
    set_find_installed_version ""
    set_pgrep_running 0

    # Skript aufrufen
    run run_installer

    # Assertions
    [ "$status" -eq 0 ]
    [[ "$output" == *"erfolgreich"* ]]
}