"""
Smoke tests - Basic tests to verify the testing framework is working properly
"""
import pytest
import asyncio
from tests.test_client import TestWebSocketClient, test_clients
class TestSmokeTests:
"""Basic smoke tests to verify the testing framework"""
@pytest.mark.asyncio
async def test_single_client_connection(self):
"""Test that a single client can connect to the server"""
client = TestWebSocketClient("smoke_test")
# Should be able to connect
connected = await client.connect()
assert connected == True
assert client.connected == True
# Should have player data
assert client.player_data is not None
assert client.player_data["nickname"] == "smoke_test"
assert client.get_money() == 100000 # Starting money
assert client.get_population() == 0 # Starting population
# Clean up
await client.disconnect()
@pytest.mark.asyncio
async def test_context_manager_client(self):
"""Test the context manager for test clients"""
async with test_clients("context_test") as [client]:
assert client.connected == True
assert client.player_data["nickname"] == "context_test"
# Should be able to send a simple action
await client.send_cursor_move(5, 10)
# Connection should work without errors
# Client should be disconnected after context exit
assert client.connected == False
@pytest.mark.asyncio
async def test_multiple_client_context_manager(self):
"""Test multiple clients using context manager"""
async with test_clients("client1", "client2") as [c1, c2]:
assert len([c1, c2]) == 2
assert c1.connected == True
assert c2.connected == True
assert c1.player_data["nickname"] == "client1"
assert c2.player_data["nickname"] == "client2"
# Both should be disconnected
assert c1.connected == False
assert c2.connected == False
@pytest.mark.asyncio
async def test_basic_building_placement(self):
"""Test basic building placement works"""
async with test_clients("builder_unique") as [client]:
# Should be able to place a building at unique coordinates
import time
x, y = int(time.time() % 100), int((time.time() * 2) % 100)
await client.place_building("road", x, y)
# Should receive confirmation
message = await client.receive_message(timeout=2.0)
assert message is not None
assert message["type"] == "building_placed"
assert message["building"]["type"] == "road"
@pytest.mark.asyncio
async def test_basic_chat(self):
"""Test basic chat functionality"""
async with test_clients("chatter1", "chatter2") as [sender, receiver]:
# Clear any initial messages
receiver.clear_messages()
# Send chat message
await sender.send_chat("Hello from smoke test!")
# Receiver should get the message
message = await receiver.receive_message(timeout=2.0)
assert message is not None
assert message["type"] == "chat"
assert message["message"] == "Hello from smoke test!"
assert message["nickname"] == "chatter1"