#!/usr/bin/env bats load helpers/setup SYNC_SCRIPT="$BATS_TEST_DIRNAME/../scripts/darktable_sync.sh" setup() { create_valid_env mkdir -p "$HOME/.config/darktable" touch "$HOME/.config/darktable/library.db" touch "$HOME/.config/darktable/data.db" rm -f "$HOME/.config/darktable/"*.bak mkdir -p "$HOME/Pictures" export DISPLAY=:99 } # --- Bestehende Tests (echter Sync via --execute) --- @test "sync_pending wird gesetzt wenn Server nicht erreichbar" { run_with_stubs env SSH_STUB_FAIL=1 bash "$SYNC_SCRIPT" --execute [ "$status" -eq 0 ] [ -f "$CONFIG_DIR/sync_pending" ] } @test "sync_pending wird entfernt bei erfolgreichem Sync" { touch "$CONFIG_DIR/sync_pending" run_with_stubs env SSH_STUB_FAIL=0 bash "$SYNC_SCRIPT" --execute [ "$status" -eq 0 ] [ ! -f "$CONFIG_DIR/sync_pending" ] } @test "sync_pending wird gesetzt wenn rsync fehlschlaegt" { run_with_stubs env SSH_STUB_FAIL=0 RSYNC_STUB_FAIL=1 bash "$SYNC_SCRIPT" --execute [ "$status" -eq 1 ] [ -f "$CONFIG_DIR/sync_pending" ] } @test "DB-Backup wird vor Download erstellt" { run_with_stubs env SSH_STUB_FAIL=0 bash "$SYNC_SCRIPT" --execute [ "$status" -eq 0 ] [ -f "$HOME/.config/darktable/library.db.bak" ] [ -f "$HOME/.config/darktable/data.db.bak" ] } @test "Versionskonflikt: gleiche Major.Minor gibt kein Exit 1" { run_with_stubs env SSH_STUB_FAIL=0 SSH_STUB_OUTPUT="this is darktable 5.0.1" \ DARKTABLE_STUB_VERSION="5.0.1" DRY_RUN_SKIP_CONFIRM=1 bash "$SYNC_SCRIPT" [ "$status" -eq 0 ] } @test "Versionskonflikt: andere Major.Minor gibt Exit 1" { run_with_stubs env SSH_STUB_FAIL=0 SSH_STUB_OUTPUT="this is darktable 4.8.0" \ DARKTABLE_STUB_VERSION="5.0.0" DRY_RUN_SKIP_CONFIRM=1 bash "$SYNC_SCRIPT" [ "$status" -eq 1 ] [ -f "$CONFIG_DIR/sync_pending" ] } @test "Lockdir wird nach Abschluss entfernt" { run_with_stubs env SSH_STUB_FAIL=0 bash "$SYNC_SCRIPT" --execute [ "$status" -eq 0 ] [ ! -d "$CONFIG_DIR/sync.lock" ] } # --- Neue Tests: Dry-Run-Verhalten --- @test "Trockenlauf ist Standard ohne --execute" { run_with_stubs env SSH_STUB_FAIL=0 DRY_RUN_SKIP_CONFIRM=1 bash "$SYNC_SCRIPT" [ "$status" -eq 0 ] [[ "$output" == *"TROCKENLAUF"* ]] } @test "Trockenlauf erstellt kein Backup" { run_with_stubs env SSH_STUB_FAIL=0 DRY_RUN_SKIP_CONFIRM=1 bash "$SYNC_SCRIPT" [ "$status" -eq 0 ] [ ! -f "$HOME/.config/darktable/library.db.bak" ] [ ! -f "$HOME/.config/darktable/data.db.bak" ] } @test "Trockenlauf loescht sync_pending nicht" { touch "$CONFIG_DIR/sync_pending" run_with_stubs env SSH_STUB_FAIL=0 DRY_RUN_SKIP_CONFIRM=1 bash "$SYNC_SCRIPT" [ "$status" -eq 0 ] [ -f "$CONFIG_DIR/sync_pending" ] } @test "--execute fuehrt echten Sync durch und erstellt Backup" { run_with_stubs env SSH_STUB_FAIL=0 bash "$SYNC_SCRIPT" --execute [ "$status" -eq 0 ] [ -f "$HOME/.config/darktable/library.db.bak" ] } @test "-e ist Kurzform fuer --execute" { run_with_stubs env SSH_STUB_FAIL=0 bash "$SYNC_SCRIPT" -e [ "$status" -eq 0 ] [ -f "$HOME/.config/darktable/library.db.bak" ] } @test "Trockenlauf zeigt Ergebnis-Zusammenfassung" { run_with_stubs env SSH_STUB_FAIL=0 DRY_RUN_SKIP_CONFIRM=1 bash "$SYNC_SCRIPT" [ "$status" -eq 0 ] [[ "$output" == *"Trockenlauf-Ergebnis"* ]] [[ "$output" == *"Upload:"* ]] [[ "$output" == *"Download:"* ]] } @test "Trockenlauf zaehlt neue Dateien korrekt" { run_with_stubs env SSH_STUB_FAIL=0 DRY_RUN_SKIP_CONFIRM=1 \ RSYNC_STUB_DRY_LINES=">f+++++++++ foto.jpg" bash "$SYNC_SCRIPT" [ "$status" -eq 0 ] [[ "$output" == *"neu"* ]] }