Skip to content

Commit 669f22b

Browse files
Lukas Geigerclaude
andcommitted
fix: Fehlertext bei Waisendatei-Loeschung enthaelt jetzt Exception-Detail
sync_manager.py:294: Fehlermeldung enthielt nur Dateipfad, nicht den Grund des Fehlers (z.B. PermissionError bei OneDrive-Locks). Ergaenzt: {rel_path}: {e} statt nur {rel_path}. Neuer Regressionstest: os.remove per monkeypatch fehlschlagen lassen, assert Exception-Text in result.errors. AUFGABEN.txt: model_combo-Verdrahtungsluecke als bekannte Luecke dokumentiert. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 7dd629a commit 669f22b

2 files changed

Lines changed: 24 additions & 1 deletion

File tree

src/modules/filemanager/sync_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ def sync(self, config: SyncConfig) -> SyncResult:
291291
os.remove(full_path)
292292
result.files_deleted += 1
293293
except Exception as e:
294-
result.errors.append(f"Löschen fehlgeschlagen: {rel_path}")
294+
result.errors.append(f"Löschen fehlgeschlagen: {rel_path}: {e}")
295295

296296
# Abschluss
297297
result.duration = (datetime.now() - start_time).total_seconds()

tests/test_core.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,29 @@ def test_delete_orphans_respects_excludes(self):
384384
self.assertTrue(result.success)
385385
self.assertTrue(os.path.exists(excluded_file), "Ausgeschlossene Datei wurde fälschlich gelöscht")
386386

387+
def test_delete_orphan_error_includes_exception_detail(self):
388+
"""Regression: Fehlertext beim Löschen einer Waisendatei muss die Exception enthalten.
389+
Ohne Fix: f'Löschen fehlgeschlagen: {rel_path}' — Exception-Grund fehlt komplett."""
390+
from unittest.mock import patch
391+
from modules.filemanager import SyncConfig
392+
393+
# Datei im Ziel anlegen (kein Pendant in der Quelle → Waisendatei)
394+
orphan_path = os.path.join(self.target_dir, "orphan.txt")
395+
with open(orphan_path, "w") as f:
396+
f.write("orphan")
397+
398+
config = SyncConfig(
399+
source_path=self.source_dir,
400+
target_path=self.target_dir,
401+
delete_orphans=True,
402+
)
403+
404+
with patch("os.remove", side_effect=PermissionError("Zugriff verweigert")):
405+
result = self.sm.sync(config)
406+
407+
self.assertTrue(any("Zugriff verweigert" in e for e in result.errors),
408+
f"Fehlermeldung muss Exception-Text enthalten; errors={result.errors}")
409+
387410

388411
class TestEventBusUnsubscribeDuringEmit(unittest.TestCase):
389412
"""EventBus: Callback darf sich während Emission selbst abmelden."""

0 commit comments

Comments
 (0)