test(systems): fix two mock bugs in the seam tests — unset .id on the fake, shared to_dict dict leaking across creates
CI & Build / Python lint (push) Successful in 2s
CI & Build / Plugin hooks (push) Successful in 8s
CI & Build / TypeScript typecheck (push) Successful in 11s
CI & Build / integration (push) Successful in 12s
CI & Build / Python tests (push) Successful in 47s
CI & Build / Build & push image (push) Successful in 27s
CI & Build / Python lint (push) Successful in 2s
CI & Build / Plugin hooks (push) Successful in 8s
CI & Build / TypeScript typecheck (push) Successful in 11s
CI & Build / integration (push) Successful in 12s
CI & Build / Python tests (push) Successful in 47s
CI & Build / Build & push image (push) Successful in 27s
Runs 3562/3565: _fake_system never sets .id so the dup-gate assertion compared a MagicMock to 7; and a shared to_dict return_value dict let the tagged create's mutation leak into the orphan create's response. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -106,6 +106,7 @@ async def test_untagged_hint_zero_systems_prompts_first_create_and_fails_open():
|
|||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_create_system_same_normalized_name_is_duplicate_gated():
|
async def test_create_system_same_normalized_name_is_duplicate_gated():
|
||||||
existing = _fake_system(sid=7, name="Scrape Pipeline")
|
existing = _fake_system(sid=7, name="Scrape Pipeline")
|
||||||
|
existing.id = 7
|
||||||
existing.name = "Scrape Pipeline"
|
existing.name = "Scrape Pipeline"
|
||||||
with patch("scribe.mcp.tools.systems.current_user_id", return_value=1), \
|
with patch("scribe.mcp.tools.systems.current_user_id", return_value=1), \
|
||||||
patch("scribe.mcp.tools.systems.systems_svc") as svc:
|
patch("scribe.mcp.tools.systems.systems_svc") as svc:
|
||||||
@@ -150,7 +151,10 @@ async def test_create_task_untagged_in_project_carries_the_question():
|
|||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_create_task_tagged_shows_systems_and_projectless_gets_neither():
|
async def test_create_task_tagged_shows_systems_and_projectless_gets_neither():
|
||||||
note = MagicMock(); note.id = 61; note.to_dict.return_value = {"id": 61}
|
note = MagicMock(); note.id = 61
|
||||||
|
# Fresh dict per call — a shared return_value dict lets the first create's
|
||||||
|
# mutation leak into the second create's response.
|
||||||
|
note.to_dict.side_effect = lambda: {"id": 61}
|
||||||
tagged_sys = MagicMock(); tagged_sys.to_dict.return_value = {"id": 4, "name": "plugin-hooks"}
|
tagged_sys = MagicMock(); tagged_sys.to_dict.return_value = {"id": 4, "name": "plugin-hooks"}
|
||||||
with patch("scribe.mcp.tools.tasks.current_user_id", return_value=1), \
|
with patch("scribe.mcp.tools.tasks.current_user_id", return_value=1), \
|
||||||
patch("scribe.mcp.tools.tasks.notes_svc") as notes_svc, \
|
patch("scribe.mcp.tools.tasks.notes_svc") as notes_svc, \
|
||||||
|
|||||||
Reference in New Issue
Block a user