From e221a18b465b5d31dd5355b57a4f94d9f2953ff4 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sun, 11 Oct 2026 22:54:15 +0400 Subject: [PATCH] =?UTF-8?q?test(hub):=20=D0=BF=D1=80=D0=BE=D0=BC=D0=B5?= =?UTF-8?q?=D0=B6=D1=83=D1=82=D0=BE=D1=87=D0=BD=D1=8B=D0=B5=20=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D1=82=D1=8B=20=D1=81=D0=BA=D0=B2=D0=BE=D0=B7?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D1=80=D0=BE=D0=B3=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=20(T10.1=E2=80=93T10.4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проверяются: одна команда в полёте (второй claim пуст), зеркало не пишется до /agent/state, заметка переезжает с new:60 на A-90, статус пакета running с remaining_seconds > 0 между командами и done с 0 в конце, связь проверяется по полям source_key/target_key/link_type. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o --- tests/test_e2e_hub.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/tests/test_e2e_hub.py b/tests/test_e2e_hub.py index 3ac6ba9..9782309 100644 --- a/tests/test_e2e_hub.py +++ b/tests/test_e2e_hub.py @@ -3,7 +3,7 @@ import threading import pytest from jira_hub import api, settings -from jira_hub.client import HubClient +from jira_hub.client import HubClient, HubError @pytest.fixture @@ -33,27 +33,47 @@ def test_create_link_sprint_flow(live): {"type": "ensure_sprint", "params": {"key": "new:60", "sprint": "Спринт 2"}}, ]}) assert b["count"] == 4 + bid = b["id"] + assert client.get(f"/batches/{bid}")["status"] == "queued" seen = [] while True: cmd = agent.post("/agent/claim", {"agent_version": 1, "settings_version": 1})["command"] if cmd is None: break seen.append((cmd["type"], cmd["params"])) + view = client.get(f"/batches/{bid}") + assert view["status"] == "running" and view["remaining_seconds"] > 0 if cmd["type"] == "ensure_issue": + # одна команда в полёте: зависимая ensure_link не выдаётся до done ensure_issue + assert agent.post("/agent/claim", {"agent_version": 1, "settings_version": 1})["command"] is None agent.post(f"/agent/commands/{cmd['id']}/result", {"status": "done", "result": {"key": "A-90"}, "jira_calls": 2}) + # done ensure_issue не пишет в зеркало; заметка переехала с new:60 на A-90 + with pytest.raises(HubError) as e: + client.get("/issues/A-90") + assert e.value.status == 404 + with pytest.raises(HubError) as e: + client.get("/issues/new:60") + assert e.value.status == 404 + view = client.get(f"/batches/{bid}") + assert view["status"] == "running" and view["remaining_seconds"] > 0 elif cmd["type"] == "refresh": agent.post("/agent/state", {"command_id": cmd["id"], "issues": [ {"key": "A-90", "summary": "Новая", "duedate": "2026-10-23", "sprint": "Спринт 2", "labels": [], "created": "2026-10-11T10:00:00.000+0300"}, {"key": "A-1", "summary": "Старая", "labels": []}], "links": [{"source_key": "A-90", "target_key": "A-1", "link_type": "ASUPR_Связанные"}]}) + assert client.get("/issues/A-90")["summary"] == "Новая" agent.post(f"/agent/commands/{cmd['id']}/result", {"status": "done", "jira_calls": 1}) else: agent.post(f"/agent/commands/{cmd['id']}/result", {"status": "done", "jira_calls": 1}) assert [t for t, _ in seen] == ["ensure_issue", "ensure_link", "ensure_sprint", "refresh"] assert seen[1][1]["source"] == "A-90" and seen[2][1]["key"] == "A-90" and seen[3][1]["keys"] == ["A-90", "A-1"] - view = client.get(f"/batches/{b['id']}") - assert view["status"] == "done" and all(c["status"] == "done" for c in view["commands"]) + view = client.get(f"/batches/{bid}") + assert view["status"] == "done" and view["remaining_seconds"] == 0 + assert all(c["status"] == "done" for c in view["commands"]) issue = client.get("/issues/A-90") - assert issue["note"]["work_kind"] == "разработка" and issue["links_out"][0]["target_key"] == "A-1" + assert issue["note"]["work_kind"] == "разработка" + assert len(issue["links_out"]) == 1 + assert issue["links_out"][0]["target_key"] == "A-1" and issue["links_out"][0]["link_type"] == "ASUPR_Связанные" + assert client.get("/issues/A-1")["links_in"] == [{"source_key": "A-90", "link_type": "ASUPR_Связанные"}] assert client.get("/sync-runs")["runs"][0]["issues_count"] == 2