kin: KIN-070 Исправить sync с Obsidian: auto-create vault dir + корректный vault_path

- obsidian_sync.py: заменить проверку is_dir() на mkdir(parents=True, exist_ok=True)
  вместо ошибки при отсутствующей директории — автоматически создаём её
- test_obsidian_sync.py: обновить тест #9 под новое поведение (директория создаётся)
- БД fix: исправлен obsidian_vault_path (убраны лишние кавычки и /kin суффикс),
  теперь путь указывает на vault root, а не на подпапку проекта

Результат: Exported: 79 decisions, errors: []

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gros Frumos 2026-03-16 08:50:52 +02:00
parent 8007960332
commit 71c697bf68
2 changed files with 34 additions and 31 deletions

View file

@ -227,19 +227,19 @@ def test_export_frontmatter_has_yaml_delimiters(tmp_vault):
# ---------------------------------------------------------------------------
# 9. sync_obsidian — несуществующий vault_path → ошибка в errors, не исключение
# 9. sync_obsidian — несуществующий vault_path → директория создаётся автоматически
# ---------------------------------------------------------------------------
def test_sync_nonexistent_vault_records_error(db, tmp_path):
"""Если vault_path не существует, sync возвращает ошибку в errors без raise."""
def test_sync_nonexistent_vault_creates_directory(db, tmp_path):
"""Если vault_path не существует, sync автоматически создаёт директорию."""
nonexistent = tmp_path / "ghost_vault"
models.update_project(db, "proj1", obsidian_vault_path=str(nonexistent))
result = sync_obsidian(db, "proj1")
assert len(result["errors"]) > 0
assert "does not exist" in result["errors"][0].lower() or "not exist" in result["errors"][0].lower()
assert result["exported_decisions"] == 0
assert result["errors"] == []
assert nonexistent.is_dir() # директория автоматически создана
assert result["exported_decisions"] == 0 # нет decisions в DB
assert result["tasks_updated"] == 0