mud/tests/test_creation.py

96 lines
3 KiB
Python

"""Tests for character creation flow."""
from collections import deque
import pytest
from mudlib.creation import character_creation
async def make_io(inputs):
"""Create mock read/write functions."""
input_queue = deque(inputs)
output = []
async def read_func():
if input_queue:
return input_queue.popleft()
return None
async def write_func(msg):
output.append(msg)
return read_func, write_func, output
@pytest.mark.asyncio
async def test_character_creation_with_description():
"""Test providing a description returns it."""
read_func, write_func, output = await make_io(
["A wandering swordsman with a mysterious past."]
)
result = await character_creation("TestPlayer", read_func, write_func)
assert result["description"] == "A wandering swordsman with a mysterious past."
assert any("Character Creation" in msg for msg in output)
assert any("Description:" in msg for msg in output)
assert any("A wandering swordsman with a mysterious past." in msg for msg in output)
@pytest.mark.asyncio
async def test_character_creation_empty_input():
"""Test empty input returns empty string."""
read_func, write_func, output = await make_io([""])
result = await character_creation("TestPlayer", read_func, write_func)
assert result["description"] == ""
assert any("No description set" in msg for msg in output)
@pytest.mark.asyncio
async def test_character_creation_none_input():
"""Test None input (disconnect) returns empty string."""
read_func, write_func, output = await make_io([None])
result = await character_creation("TestPlayer", read_func, write_func)
assert result["description"] == ""
assert any("No description set" in msg for msg in output)
@pytest.mark.asyncio
async def test_character_creation_prompts():
"""Test the output includes the prompts."""
read_func, write_func, output = await make_io(["Test description"])
await character_creation("TestPlayer", read_func, write_func)
output_text = "".join(output)
assert "Character Creation" in output_text
assert "Describe yourself" in output_text
assert "This is what others see when they look at you" in output_text
assert "Description:" in output_text
@pytest.mark.asyncio
async def test_character_creation_confirmation():
"""Test the confirmation message includes the description."""
read_func, write_func, output = await make_io(["A fierce warrior"])
await character_creation("TestPlayer", read_func, write_func)
output_text = "".join(output)
assert "You will be known as:" in output_text
assert "A fierce warrior" in output_text
@pytest.mark.asyncio
async def test_character_creation_strips_whitespace():
"""Test that leading/trailing whitespace is stripped."""
read_func, write_func, output = await make_io([" A nimble thief "])
result = await character_creation("TestPlayer", read_func, write_func)
assert result["description"] == "A nimble thief"