Merge pull request 'test(dev_tools): fix dead render mock in test_successful_batter_flow (#169)' (#170) from issue/169-test-dev-tools-refractor-test-render-step-mock-is into main

Reviewed-on: #170
Reviewed-by: Claude Reviewer <cal.corum+claude-reviewer@gmail.com>
This commit is contained in:
cal 2026-04-12 14:36:24 +00:00
commit 9127c9a00b

View File

@ -388,7 +388,13 @@ class TestRefractorTestExecute:
async def test_successful_batter_flow(self, mock_interaction, mock_bot, base_embed):
"""Full happy path: game created, plays inserted, stats updated,
tier-up detected, card rendered."""
tier-up detected, card rendered (200 OK from aiohttp render endpoint).
Previously the render step was stubbed via a dead db_get mock; the
actual render call uses aiohttp.ClientSession directly, so the mock
was never consumed and the test hit the non-fatal except branch
( Card render failed) instead of the happy path.
"""
from cogs.dev_tools import DevToolsCog
cog = DevToolsCog(mock_bot)
@ -413,9 +419,23 @@ class TestRefractorTestExecute:
],
}
mock_render_resp = MagicMock()
mock_render_resp.status = 200
# sess.get(url) must return an async context manager (not a coroutine),
# so get_cm is a MagicMock with explicit __aenter__/__aexit__.
get_cm = MagicMock()
get_cm.__aenter__ = AsyncMock(return_value=mock_render_resp)
get_cm.__aexit__ = AsyncMock(return_value=None)
mock_sess = MagicMock()
mock_sess.__aenter__ = AsyncMock(return_value=mock_sess)
mock_sess.__aexit__ = AsyncMock(return_value=None)
mock_sess.get.return_value = get_cm
with (
patch("cogs.dev_tools.db_post", new_callable=AsyncMock) as mock_post,
patch("cogs.dev_tools.db_get", new_callable=AsyncMock) as mock_get,
patch("cogs.dev_tools.aiohttp.ClientSession", return_value=mock_sess),
):
mock_post.side_effect = [
game_response, # POST games
@ -424,7 +444,6 @@ class TestRefractorTestExecute:
stats_response, # POST season-stats/update-game
eval_response, # POST refractor/evaluate-game
]
mock_get.return_value = {"image_url": "https://s3.example.com/card.png"}
await cog._execute_refractor_test(
interaction=mock_interaction,
@ -443,6 +462,7 @@ class TestRefractorTestExecute:
result_text = "\n".join(f.value for f in final_embed.fields if f.value)
assert "" in result_text
assert "game" in result_text.lower()
assert "✅ Card rendered + S3 upload triggered" in result_text
async def test_stops_on_game_creation_failure(
self, mock_interaction, mock_bot, base_embed