"""Tests for Entity.posture property.""" from unittest.mock import AsyncMock, MagicMock import pytest from mudlib.entity import Entity, Mob from mudlib.player import Player @pytest.fixture def mock_writer(): writer = MagicMock() writer.write = MagicMock() writer.drain = AsyncMock() return writer @pytest.fixture def mock_reader(): return MagicMock() def test_entity_default_posture(): """Entity with no special state should be 'standing'.""" entity = Entity(name="Test", x=0, y=0) assert entity.posture == "standing" def test_entity_resting(): """Entity with resting=True should be 'resting'.""" entity = Entity(name="Test", x=0, y=0, resting=True) assert entity.posture == "resting" def test_entity_unconscious_no_pl(): """Entity with pl <= 0 should be 'unconscious'.""" entity = Entity(name="Test", x=0, y=0, pl=0.0) assert entity.posture == "unconscious" def test_entity_unconscious_negative_pl(): """Entity with negative pl should be 'unconscious'.""" entity = Entity(name="Test", x=0, y=0, pl=-10.0) assert entity.posture == "unconscious" def test_entity_unconscious_no_stamina(): """Entity with stamina <= 0 should be 'unconscious'.""" entity = Entity(name="Test", x=0, y=0, stamina=0.0) assert entity.posture == "unconscious" def test_entity_unconscious_negative_stamina(): """Entity with negative stamina should be 'unconscious'.""" entity = Entity(name="Test", x=0, y=0, stamina=-5.0) assert entity.posture == "unconscious" def test_entity_unconscious_beats_resting(): """Unconscious priority > resting priority.""" entity = Entity(name="Test", x=0, y=0, pl=0.0, resting=True) assert entity.posture == "unconscious" def test_player_flying(mock_reader, mock_writer): """Player with flying=True should be 'flying'.""" player = Player( name="Test", x=0, y=0, reader=mock_reader, writer=mock_writer, flying=True ) assert player.posture == "flying" def test_player_flying_beats_resting(mock_reader, mock_writer): """Flying priority > resting priority.""" player = Player( name="Test", x=0, y=0, reader=mock_reader, writer=mock_writer, flying=True, resting=True, ) assert player.posture == "flying" def test_player_unconscious_beats_flying(mock_reader, mock_writer): """Unconscious priority > flying priority.""" player = Player( name="Test", x=0, y=0, reader=mock_reader, writer=mock_writer, flying=True, pl=0.0, ) assert player.posture == "unconscious" def test_player_fighting_in_combat_mode(mock_reader, mock_writer): """Player with mode='combat' should be 'fighting'.""" player = Player( name="Test", x=0, y=0, reader=mock_reader, writer=mock_writer, mode_stack=["normal", "combat"], ) assert player.posture == "fighting" def test_player_fighting_beats_flying(mock_reader, mock_writer): """Fighting priority > flying priority.""" player = Player( name="Test", x=0, y=0, reader=mock_reader, writer=mock_writer, mode_stack=["normal", "combat"], flying=True, ) assert player.posture == "fighting" def test_player_fighting_beats_resting(mock_reader, mock_writer): """Fighting priority > resting priority.""" player = Player( name="Test", x=0, y=0, reader=mock_reader, writer=mock_writer, mode_stack=["normal", "combat"], resting=True, ) assert player.posture == "fighting" def test_player_unconscious_beats_fighting(mock_reader, mock_writer): """Unconscious priority > fighting priority.""" player = Player( name="Test", x=0, y=0, reader=mock_reader, writer=mock_writer, mode_stack=["normal", "combat"], stamina=0.0, ) assert player.posture == "unconscious" def test_mob_default_posture(): """Mob with default state should be 'standing'.""" mob = Mob(name="Goku", x=10, y=10, description="A fighter") assert mob.posture == "standing" def test_mob_resting(): """Mob with resting=True should be 'resting'.""" mob = Mob(name="Goku", x=10, y=10, description="A fighter", resting=True) assert mob.posture == "resting" def test_mob_unconscious(): """Mob with pl=0 should be 'unconscious'.""" mob = Mob(name="Goku", x=10, y=10, description="A fighter", pl=0.0) assert mob.posture == "unconscious"