Refactoring & tests
This commit is contained in:
@@ -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"* ]]
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user