"""Tests for container state display in look and inventory commands.""" import pytest from mudlib.container import Container from mudlib.player import Player from mudlib.thing import Thing from mudlib.zone import Zone @pytest.fixture def test_zone(): terrain = [["." for _ in range(10)] for _ in range(10)] return Zone( name="testzone", width=10, height=10, toroidal=True, terrain=terrain, ) @pytest.fixture def player(mock_reader, mock_writer, test_zone): p = Player( name="TestPlayer", x=5, y=5, reader=mock_reader, writer=mock_writer, location=test_zone, ) return p # --- look command container display --- @pytest.mark.asyncio async def test_look_shows_closed_container(player, test_zone, mock_writer): """look shows closed containers with (closed) suffix.""" from mudlib.commands.look import cmd_look Container(name="chest", location=test_zone, x=5, y=5, closed=True) await cmd_look(player, "") output = "".join(call[0][0] for call in mock_writer.write.call_args_list) assert "chest (closed)" in output @pytest.mark.asyncio async def test_look_shows_open_empty_container(player, test_zone, mock_writer): """look shows open empty containers with (open, empty) suffix.""" from mudlib.commands.look import cmd_look Container(name="chest", location=test_zone, x=5, y=5, closed=False) await cmd_look(player, "") output = "".join(call[0][0] for call in mock_writer.write.call_args_list) assert "chest (open, empty)" in output @pytest.mark.asyncio async def test_look_shows_open_container_with_contents(player, test_zone, mock_writer): """look shows open containers with their contents.""" from mudlib.commands.look import cmd_look chest = Container(name="chest", location=test_zone, x=5, y=5, closed=False) Thing(name="rock", location=chest) Thing(name="coin", location=chest) await cmd_look(player, "") output = "".join(call[0][0] for call in mock_writer.write.call_args_list) assert "chest (open, containing: rock, coin)" in output @pytest.mark.asyncio async def test_look_shows_regular_things_unchanged(player, test_zone, mock_writer): """look shows regular Things without container suffixes.""" from mudlib.commands.look import cmd_look Thing(name="rock", location=test_zone, x=5, y=5) await cmd_look(player, "") output = "".join(call[0][0] for call in mock_writer.write.call_args_list) assert "On the ground: rock" in output assert "(closed)" not in output assert "(open" not in output # --- inventory command container display --- @pytest.mark.asyncio async def test_inventory_shows_closed_container(player, mock_writer): """inventory shows closed containers with (closed) suffix.""" from mudlib.commands.things import cmd_inventory Container(name="sack", location=player, closed=True) await cmd_inventory(player, "") output = "".join(call[0][0] for call in mock_writer.write.call_args_list) assert "sack (closed)" in output @pytest.mark.asyncio async def test_inventory_shows_open_empty_container(player, mock_writer): """inventory shows open empty containers with (open, empty) suffix.""" from mudlib.commands.things import cmd_inventory Container(name="sack", location=player, closed=False) await cmd_inventory(player, "") output = "".join(call[0][0] for call in mock_writer.write.call_args_list) assert "sack (open, empty)" in output @pytest.mark.asyncio async def test_inventory_shows_container_with_contents(player, mock_writer): """inventory shows open containers with their contents.""" from mudlib.commands.things import cmd_inventory sack = Container(name="sack", location=player, closed=False) Thing(name="rock", location=sack) Thing(name="gem", location=sack) await cmd_inventory(player, "") output = "".join(call[0][0] for call in mock_writer.write.call_args_list) assert "sack (open, containing: rock, gem)" in output @pytest.mark.asyncio async def test_inventory_shows_regular_things_unchanged(player, mock_writer): """inventory shows regular Things without container suffixes.""" from mudlib.commands.things import cmd_inventory Thing(name="rock", location=player) await cmd_inventory(player, "") output = "".join(call[0][0] for call in mock_writer.write.call_args_list) assert " rock\r\n" in output assert "(closed)" not in output assert "(open" not in output