112 lines
3.5 KiB
Markdown
112 lines
3.5 KiB
Markdown
# 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 "${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:
|
|
|
|
```bash
|
|
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`:
|
|
|
|
```bash
|
|
@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"* ]]
|
|
}
|
|
``` |