96 lines
3 KiB
Python
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"
|