Removed identical local copies from 45 test files. These fixtures are already defined in conftest.py.
211 lines
6.4 KiB
Python
211 lines
6.4 KiB
Python
"""Tests for open and close commands."""
|
|
|
|
import pytest
|
|
|
|
from mudlib.commands import _registry
|
|
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
|
|
|
|
|
|
# --- cmd_open ---
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_open_container_on_ground(player, test_zone, mock_writer):
|
|
"""open finds container on ground and sets closed=False."""
|
|
from mudlib.commands.containers import cmd_open
|
|
|
|
chest = Container(name="chest", location=test_zone, x=5, y=5, closed=True)
|
|
await cmd_open(player, "chest")
|
|
assert chest.closed is False
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "open" in output.lower() and "chest" in output.lower()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_open_container_in_inventory(player, test_zone, mock_writer):
|
|
"""open finds container in player inventory and sets closed=False."""
|
|
from mudlib.commands.containers import cmd_open
|
|
|
|
box = Container(name="box", location=player, closed=True)
|
|
await cmd_open(player, "box")
|
|
assert box.closed is False
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "open" in output.lower() and "box" in output.lower()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_open_no_args(player, mock_writer):
|
|
"""open with no arguments gives usage hint."""
|
|
from mudlib.commands.containers import cmd_open
|
|
|
|
await cmd_open(player, "")
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "open what" in output.lower() or "what" in output.lower()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_open_already_open(player, test_zone, mock_writer):
|
|
"""open on already-open container gives feedback."""
|
|
from mudlib.commands.containers import cmd_open
|
|
|
|
_chest = Container(name="chest", location=test_zone, x=5, y=5, closed=False)
|
|
await cmd_open(player, "chest")
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "already open" in output.lower()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_open_locked_container(player, test_zone, mock_writer):
|
|
"""open on locked container gives feedback."""
|
|
from mudlib.commands.containers import cmd_open
|
|
|
|
chest = Container(
|
|
name="chest", location=test_zone, x=5, y=5, closed=True, locked=True
|
|
)
|
|
await cmd_open(player, "chest")
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "locked" in output.lower()
|
|
# Container should still be closed
|
|
assert chest.closed is True
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_open_not_found(player, test_zone, mock_writer):
|
|
"""open on non-existent thing gives feedback."""
|
|
from mudlib.commands.containers import cmd_open
|
|
|
|
await cmd_open(player, "chest")
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "don't see" in output.lower()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_open_matches_aliases(player, test_zone):
|
|
"""open matches container aliases."""
|
|
from mudlib.commands.containers import cmd_open
|
|
|
|
chest = Container(
|
|
name="wooden chest",
|
|
aliases=["chest", "box"],
|
|
location=test_zone,
|
|
x=5,
|
|
y=5,
|
|
closed=True,
|
|
)
|
|
await cmd_open(player, "box")
|
|
assert chest.closed is False
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_open_non_container(player, test_zone, mock_writer):
|
|
"""open on non-container thing gives feedback."""
|
|
from mudlib.commands.containers import cmd_open
|
|
|
|
_rock = Thing(name="rock", location=test_zone, x=5, y=5)
|
|
await cmd_open(player, "rock")
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "can't open" in output.lower()
|
|
|
|
|
|
# --- cmd_close ---
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_close_container_on_ground(player, test_zone, mock_writer):
|
|
"""close finds container on ground and sets closed=True."""
|
|
from mudlib.commands.containers import cmd_close
|
|
|
|
chest = Container(name="chest", location=test_zone, x=5, y=5, closed=False)
|
|
await cmd_close(player, "chest")
|
|
assert chest.closed is True
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "close" in output.lower() and "chest" in output.lower()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_close_container_in_inventory(player, test_zone, mock_writer):
|
|
"""close finds container in inventory and sets closed=True."""
|
|
from mudlib.commands.containers import cmd_close
|
|
|
|
box = Container(name="box", location=player, closed=False)
|
|
await cmd_close(player, "box")
|
|
assert box.closed is True
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "close" in output.lower() and "box" in output.lower()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_close_already_closed(player, test_zone, mock_writer):
|
|
"""close on already-closed container gives feedback."""
|
|
from mudlib.commands.containers import cmd_close
|
|
|
|
_chest = Container(name="chest", location=test_zone, x=5, y=5, closed=True)
|
|
await cmd_close(player, "chest")
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "already closed" in output.lower()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_close_no_args(player, mock_writer):
|
|
"""close with no arguments gives usage hint."""
|
|
from mudlib.commands.containers import cmd_close
|
|
|
|
await cmd_close(player, "")
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "close what" in output.lower() or "what" in output.lower()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_close_non_container(player, test_zone, mock_writer):
|
|
"""close on non-container thing gives feedback."""
|
|
from mudlib.commands.containers import cmd_close
|
|
|
|
_rock = Thing(name="rock", location=test_zone, x=5, y=5)
|
|
await cmd_close(player, "rock")
|
|
output = mock_writer.write.call_args_list[-1][0][0]
|
|
assert "can't close" in output.lower()
|
|
|
|
|
|
# --- command registration ---
|
|
|
|
|
|
def test_open_command_registered():
|
|
"""open command is registered."""
|
|
import mudlib.commands.containers # noqa: F401
|
|
|
|
assert "open" in _registry
|
|
|
|
|
|
def test_close_command_registered():
|
|
"""close command is registered."""
|
|
import mudlib.commands.containers # noqa: F401
|
|
|
|
assert "close" in _registry
|