Removed identical local copies from 45 test files. These fixtures are already defined in conftest.py.
135 lines
4.4 KiB
Python
135 lines
4.4 KiB
Python
"""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
|