Files
cultivation-world-simulator/tests/test_battle_death.py
bridge a59f6837ca fix(battle): correct killer name in death handling logic
- Updated the killer name reference in the handle_death function to use the winner's name instead of the attacker's name, ensuring accurate death reason reporting in battle scenarios.
2026-02-03 20:53:59 +08:00

55 lines
1.7 KiB
Python

import pytest
from unittest.mock import MagicMock, AsyncMock, patch
from src.classes.battle import handle_battle_finish
from src.classes.death_reason import DeathType
@pytest.mark.asyncio
async def test_attacker_dies_killer_is_winner():
# Setup mocks
world = MagicMock()
world.month_stamp = 100
attacker = MagicMock()
attacker.id = "attacker"
attacker.name = "Attacker"
attacker.hp = -10 # Dead
defender = MagicMock()
defender.id = "defender"
defender.name = "Defender"
defender.hp = 50 # Alive
# res: (winner, loser, loser_damage, winner_damage)
# Defender wins, Attacker loses
res = (defender, attacker, 110, 10)
start_content = "Battle start"
story_prompt = "Story prompt"
# Patch StoryTeller and handle_death
with patch("src.classes.story_teller.StoryTeller.tell_story", new_callable=AsyncMock) as mock_tell_story, \
patch("src.classes.death.handle_death") as mock_handle_death:
mock_tell_story.return_value = "Story content"
await handle_battle_finish(
world,
attacker,
defender,
res,
start_content,
story_prompt
)
# Assert handle_death called
assert mock_handle_death.called
# Get the DeathReason object passed to handle_death
# handle_death(world, loser, death_reason)
call_args = mock_handle_death.call_args
death_reason = call_args[0][2]
assert death_reason.death_type == DeathType.BATTLE
# This is the bug: it was attacker.name (Attacker), should be winner.name (Defender)
assert death_reason.killer_name == defender.name