kin: KIN-067 При попытке сохранить настройки и синхронизироваться с обсидианом через настройки ошибка 'Sync error: Error: 400 Bad Request'. Разобраться с проблемой. Синхронизация работает в обе стороны.

This commit is contained in:
Gros Frumos 2026-03-16 08:38:49 +02:00
parent 81f974e6d3
commit 993362341b
5 changed files with 106 additions and 18 deletions

View file

@ -1071,3 +1071,65 @@ def test_task_full_project_deploy_command_none_when_not_set(client):
data = r.json()
assert "project_deploy_command" in data
assert data["project_deploy_command"] is None
# ---------------------------------------------------------------------------
# KIN-067 — PATCH obsidian_vault_path + sync/obsidian не возвращает 400
# ---------------------------------------------------------------------------
def test_patch_project_obsidian_vault_path_persisted_via_sql(client):
"""PATCH с obsidian_vault_path сохраняется в БД — прямой SQL."""
r = client.patch("/api/projects/p1", json={"obsidian_vault_path": "/tmp/vault"})
assert r.status_code == 200
from core.db import init_db
conn = init_db(api_module.DB_PATH)
row = conn.execute("SELECT obsidian_vault_path FROM projects WHERE id = 'p1'").fetchone()
conn.close()
assert row is not None
assert row[0] == "/tmp/vault"
def test_patch_project_obsidian_vault_path_returned_in_response(client):
"""PATCH возвращает обновлённый obsidian_vault_path в ответе."""
r = client.patch("/api/projects/p1", json={"obsidian_vault_path": "/my/vault"})
assert r.status_code == 200
assert r.json()["obsidian_vault_path"] == "/my/vault"
def test_sync_obsidian_without_vault_path_returns_400(client):
"""POST sync/obsidian без сохранённого vault_path → 400 Bad Request."""
r = client.post("/api/projects/p1/sync/obsidian")
assert r.status_code == 400
def test_sync_obsidian_after_patch_vault_path_not_400(client, tmp_path):
"""Сценарий бага KIN-067: сначала PATCH vault_path, затем sync → не 400.
Раньше runSync() вызывал sync/obsidian без предварительного сохранения пути,
что приводило к 400. После фикса PATCH вызывается первым.
"""
vault = tmp_path / "vault"
vault.mkdir()
# Шаг 1: сохранить vault_path через PATCH (как теперь делает runSync)
r = client.patch("/api/projects/p1", json={"obsidian_vault_path": str(vault)})
assert r.status_code == 200
# Шаг 2: запустить синхронизацию — не должно вернуть 400
r = client.post("/api/projects/p1/sync/obsidian")
assert r.status_code != 400, f"Ожидался не 400, получен {r.status_code}: {r.text}"
assert r.status_code == 200
def test_sync_obsidian_after_patch_returns_sync_result_fields(client, tmp_path):
"""После PATCH vault_path синхронизация возвращает поля exported_decisions и tasks_updated."""
vault = tmp_path / "vault"
vault.mkdir()
client.patch("/api/projects/p1", json={"obsidian_vault_path": str(vault)})
r = client.post("/api/projects/p1/sync/obsidian")
assert r.status_code == 200
data = r.json()
assert "exported_decisions" in data
assert "tasks_updated" in data