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
+98
View File
@@ -0,0 +1,98 @@
# 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"* ]]
}
```