From 28d489770ace33c161d4fd6ffd88d619f411a5e7 Mon Sep 17 00:00:00 2001 From: gahusb Date: Thu, 11 Jun 2026 02:48:18 +0900 Subject: [PATCH] =?UTF-8?q?test(agent-office):=20=ED=95=98=EC=9C=84?= =?UTF-8?q?=ED=98=B8=ED=99=98(=EB=B9=84=EC=9E=90=EC=9C=A8=20=EA=B2=BD?= =?UTF-8?q?=EB=A1=9C)=20+=20issue=5Fregen=20=EC=BD=9C=EB=B0=B1=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- agent-office/tests/test_insta_autonomous.py | 49 +++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/agent-office/tests/test_insta_autonomous.py b/agent-office/tests/test_insta_autonomous.py index 1616313..85a9f14 100644 --- a/agent-office/tests/test_insta_autonomous.py +++ b/agent-office/tests/test_insta_autonomous.py @@ -118,3 +118,52 @@ async def test_handle_insta_issue_invalid_data(monkeypatch): ) assert result["ok"] is False assert result["error"] == "invalid_callback_data" + + +@pytest.mark.asyncio +async def test_backward_compat_non_autonomous_uses_legacy_path(monkeypatch): + """autonomous_issue=False, auto_select=False → insta_ranked 미호출, _push_keyword_candidates 호출.""" + agent = InstaAgent() + agent.state = "idle" + monkeypatch.setattr("app.agents.insta.get_agent_config", + lambda aid: {"custom_config": {"autonomous_issue": False, "auto_select": False}}) + monkeypatch.setattr(agent, "transition", AsyncMock()) + monkeypatch.setattr(agent, "_run_collect_and_extract", AsyncMock()) + # insta_get_preferences는 try/except 안에 있으므로 예외를 던져도 안전하지만 깔끔하게 mock + monkeypatch.setattr("app.agents.insta.service_proxy.insta_get_preferences", + AsyncMock(return_value={})) + # 비자율 경로에서 insta_ranked는 호출되면 안 된다 + ranked = AsyncMock() + monkeypatch.setattr("app.agents.insta.service_proxy.insta_ranked", ranked) + # insta_list_keywords: 비자율 경로에서 반드시 호출 + monkeypatch.setattr("app.agents.insta.service_proxy.insta_list_keywords", + AsyncMock(return_value=[])) + # auto_select=False → _push_keyword_candidates 경로 + push = AsyncMock() + monkeypatch.setattr(agent, "_push_keyword_candidates", push) + gen = AsyncMock() + monkeypatch.setattr(agent, "_generate_and_preview", gen) + monkeypatch.setattr("app.agents.insta.create_task", lambda *a, **k: "t1") + monkeypatch.setattr("app.agents.insta.update_task_status", lambda *a, **k: None) + monkeypatch.setattr("app.agents.insta.add_log", lambda *a, **k: None) + await agent.on_schedule() + ranked.assert_not_awaited() # 자율 경로(insta_ranked) 미진입 확인 + gen.assert_not_awaited() # _generate_and_preview 미호출 확인 + push.assert_awaited_once() # 기존 candidate-push 경로 진입 확인 + + +@pytest.mark.asyncio +async def test_callback_regen_rejects_old_and_regenerates(monkeypatch): + """issue_regen: 기존 슬레이트 rejected 처리 후 같은 키워드로 _generate_and_preview 재호출.""" + agent = InstaAgent() + monkeypatch.setattr("app.agents.insta.service_proxy.insta_get_slate", + AsyncMock(return_value={"keyword": "금리", "category": "economy"})) + dec = AsyncMock(return_value={"status": "rejected"}) + monkeypatch.setattr("app.agents.insta.service_proxy.insta_decision", dec) + gen = AsyncMock() + monkeypatch.setattr(agent, "_generate_and_preview", gen) + res = await agent.on_callback("issue_regen", {"slate_id": 8}) + assert res["ok"] is True + dec.assert_awaited_once_with(8, "rejected") # 이전 슬레이트 폐기 + gen.assert_awaited_once() # 같은 키워드로 재생성 + assert gen.await_args.args[0]["keyword"] == "금리"