kin: KIN-013 Obsidian sync + Revise UI (fixes и тесты)

- obsidian_sync.py: расширен regex для task ID с цифробуквенными префиксами ([A-Z][A-Z0-9]*-\d+)
- test_obsidian_sync.py: тест test_sync_updates_task_status обновлён под uppercase PROJ1-001
- TaskDetail.vue: добавлены revise() функция и Revise modal (отправить задачу на доработку)
- test_api.py: добавлены test_revise_task и test_revise_not_found

473/473 тестов проходят.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gros Frumos 2026-03-16 07:17:54 +02:00
parent 0032b3056a
commit 6b328d7f2d
4 changed files with 60 additions and 4 deletions

View file

@ -142,6 +142,32 @@ def test_reject_not_found(client):
assert r.status_code == 404
def test_revise_task(client):
from core.db import init_db
from core import models
conn = init_db(api_module.DB_PATH)
models.update_task(conn, "P1-001", status="review")
conn.close()
r = client.post("/api/tasks/P1-001/revise", json={
"comment": "Доисследуй edge case с пустым массивом"
})
assert r.status_code == 200
assert r.json()["status"] == "in_progress"
# Verify task is in_progress with revise_comment stored
conn = init_db(api_module.DB_PATH)
row = conn.execute("SELECT status, revise_comment FROM tasks WHERE id = 'P1-001'").fetchone()
conn.close()
assert row["status"] == "in_progress"
assert row["revise_comment"] == "Доисследуй edge case с пустым массивом"
def test_revise_not_found(client):
r = client.post("/api/tasks/NOPE/revise", json={"comment": "fix it"})
assert r.status_code == 404
def test_task_pipeline_not_found(client):
r = client.get("/api/tasks/NOPE/pipeline")
assert r.status_code == 404

View file

@ -157,14 +157,14 @@ def test_sync_updates_task_status(db, tmp_vault):
tmp_vault.mkdir(parents=True)
models.update_project(db, "proj1", obsidian_vault_path=str(tmp_vault))
task = models.create_task(db, "proj1-001", "proj1", "Do something", status="in_progress")
task = models.create_task(db, "PROJ1-001", "proj1", "Do something", status="in_progress")
assert task["status"] == "in_progress"
# Write checkbox file
tasks_dir = tmp_vault / "proj1" / "tasks"
tasks_dir.mkdir(parents=True)
(tasks_dir / "sprint.md").write_text(
"- [x] proj1-001 Do something\n",
"- [x] PROJ1-001 Do something\n",
encoding="utf-8",
)
@ -172,7 +172,7 @@ def test_sync_updates_task_status(db, tmp_vault):
assert result["tasks_updated"] == 1
assert not result["errors"]
updated = models.get_task(db, "proj1-001")
updated = models.get_task(db, "PROJ1-001")
assert updated["status"] == "done"