kin: KIN-070 При попытке запустить синк с обсидианом: Exported: 0 decisions Updated: 0 tasks Vault path does not exist or is not a directory: '/Users/grosfrumos/Library/Mobile Documents/iCloud~md~obsidian/Documents/myvault/kin'. Проверить задачу и добиться синхронизации.

This commit is contained in:
Gros Frumos 2026-03-16 08:53:30 +02:00
parent 71c697bf68
commit a605e9d110

View file

@ -228,10 +228,17 @@ def test_export_frontmatter_has_yaml_delimiters(tmp_vault):
# ---------------------------------------------------------------------------
# 9. sync_obsidian — несуществующий vault_path → директория создаётся автоматически
# KIN-070: Регрессионный тест на автоматическое создание vault directory
# ---------------------------------------------------------------------------
def test_sync_nonexistent_vault_creates_directory(db, tmp_path):
"""Если vault_path не существует, sync автоматически создаёт директорию."""
def test_kin070_sync_creates_missing_vault_directory(db, tmp_path):
"""KIN-070: Если vault_path не существует, sync автоматически создаёт директорию.
Проверяет что:
- Директория создаётся без ошибок
- sync_obsidian не падает с ошибкой
- Возвращаемый результат содержит errors=[]
"""
nonexistent = tmp_path / "ghost_vault"
models.update_project(db, "proj1", obsidian_vault_path=str(nonexistent))
@ -244,7 +251,48 @@ def test_sync_nonexistent_vault_creates_directory(db, tmp_path):
# ---------------------------------------------------------------------------
# 10. sync_obsidian — пустой vault → 0 экспортов, 0 обновлений, нет ошибок
# 10. sync_obsidian + decisions: несуществующий vault + decisions в БД → export success
# KIN-070: Проверяет что decisions экспортируются когда vault создаётся автоматически
# ---------------------------------------------------------------------------
def test_kin070_sync_creates_vault_and_exports_decisions(db, tmp_path):
"""KIN-070: sync экспортирует decisions и автоматически создаёт vault_path.
Проверяет что:
- vault директория создаётся автоматически
- decisions экспортируются в .md-файлы (exported_decisions > 0)
- errors == [] (нет ошибок)
"""
nonexistent = tmp_path / "missing_vault"
models.update_project(db, "proj1", obsidian_vault_path=str(nonexistent))
# Создаём decision в БД
models.add_decision(
db,
project_id="proj1",
type="decision",
title="Use SQLite for sync state",
description="SQLite will be the single source of truth.",
tags=["database", "sync"],
)
result = sync_obsidian(db, "proj1")
# Проверяем успешный экспорт
assert result["errors"] == []
assert nonexistent.is_dir() # директория создана
assert result["exported_decisions"] == 1 # одно decision экспортировано
assert result["tasks_updated"] == 0
# Проверяем что .md-файл создан в правильной директории
decisions_dir = nonexistent / "proj1" / "decisions"
assert decisions_dir.is_dir()
md_files = list(decisions_dir.glob("*.md"))
assert len(md_files) == 1
# ---------------------------------------------------------------------------
# 11. sync_obsidian — пустой vault → 0 экспортов, 0 обновлений, нет ошибок
# ---------------------------------------------------------------------------
def test_sync_empty_vault_no_errors(db, tmp_vault):