Spaces:
Sleeping
Sleeping
from graph_article.graph_article import article_graph | |
from shared import ResearchState | |
class DummyResponse: | |
def __init__(self, content: str): | |
self.content = content | |
def test_article_graph_accept(mocker): | |
# Patch writer_chain.invoke to return an object with .content | |
mock_writer_chain = mocker.Mock() | |
mock_writer_chain.invoke.return_value = DummyResponse("Test abstract") | |
mocker.patch("graph_article.writer.writer_chain", mock_writer_chain) | |
# Patch critic_chain.invoke to return ACCEPTED (object with .content) | |
mock_critic_chain = mocker.Mock() | |
mock_critic_chain.invoke.return_value = DummyResponse("ACCEPTED") | |
mocker.patch("graph_article.critic.critic_chain", mock_critic_chain) | |
init_state = ResearchState(input="Title", category="Category") | |
final_state = article_graph.invoke(init_state) | |
assert final_state["final_abstract"] == "Test abstract" | |
assert final_state["critique"] == "ACCEPTED" | |
def test_article_graph_reject_then_accept(mocker): | |
# Patch writer_chain.invoke to return an object with .content | |
mock_writer_chain = mocker.Mock() | |
mock_writer_chain.invoke.return_value = DummyResponse("Test abstract") | |
mocker.patch("graph_article.writer.writer_chain", mock_writer_chain) | |
# Setup critic_chain.invoke to reject first (REJECTED), then accept (ACCEPTED) | |
call_count = {"count": 0} | |
def critic_invoke_side_effect(*args, **kwargs): | |
if call_count["count"] == 0: | |
call_count["count"] += 1 | |
return DummyResponse("REJECTED") | |
return DummyResponse("ACCEPTED") | |
mock_critic_chain = mocker.Mock() | |
mock_critic_chain.invoke.side_effect = critic_invoke_side_effect | |
mocker.patch("graph_article.critic.critic_chain", mock_critic_chain) | |
init_state = ResearchState(input="Title", category="Category") | |
final_state = article_graph.invoke(init_state) | |
assert final_state["final_abstract"] == "Test abstract" or final_state["final_abstract"] == "Final abstract" | |
assert final_state["critique"] == "ACCEPTED" | |