File size: 8,971 Bytes
4c75d73 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 |
#!/usr/bin/env python3
"""
Unit Tests for Service Layer Components
Tests individual service components in isolation.
"""
import pytest
import sys
import os
from unittest.mock import Mock, patch
# Add project root to path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
from src.services.player_service import PlayerService
from src.services.chat_service import ChatService
from src.services.npc_service import NPCService
from src.services.mcp_service import MCPService
from src.services.plugin_service import PluginService
@pytest.mark.unit
class TestPlayerService:
"""Test player service functionality."""
def test_player_service_initialization(self):
"""Test player service initializes correctly."""
service = PlayerService()
assert service is not None
assert hasattr(service, 'players')
def test_create_player(self):
"""Test player creation."""
service = PlayerService()
player_id = service.create_player("TestPlayer")
assert player_id is not None
assert player_id in service.players
assert service.players[player_id]['name'] == "TestPlayer"
def test_get_player(self):
"""Test player retrieval."""
service = PlayerService()
player_id = service.create_player("TestPlayer")
player = service.get_player(player_id)
assert player is not None
assert player['name'] == "TestPlayer"
def test_get_all_players(self):
"""Test getting all players."""
service = PlayerService()
player_id1 = service.create_player("Player1")
player_id2 = service.create_player("Player2")
all_players = service.get_all_players()
assert len(all_players) == 2
assert player_id1 in all_players
assert player_id2 in all_players
def test_remove_player(self):
"""Test player removal."""
service = PlayerService()
player_id = service.create_player("TestPlayer")
assert player_id in service.players
service.remove_player(player_id)
assert player_id not in service.players
def test_move_player(self):
"""Test player movement."""
service = PlayerService()
player_id = service.create_player("TestPlayer")
# Get initial position
player = service.get_player(player_id)
initial_x, initial_y = player['x'], player['y']
# Move player
success = service.move_player(player_id, "right")
assert success
# Check new position
player = service.get_player(player_id)
assert player['x'] == initial_x + 1
assert player['y'] == initial_y
@pytest.mark.unit
class TestChatService:
"""Test chat service functionality."""
def test_chat_service_initialization(self):
"""Test chat service initializes correctly."""
service = ChatService()
assert service is not None
assert hasattr(service, 'messages')
def test_send_public_message(self):
"""Test sending public messages."""
service = ChatService()
message_id = service.send_public_message("player1", "Hello everyone!")
assert message_id is not None
messages = service.get_recent_messages()
assert len(messages) > 0
assert any(msg['content'] == "Hello everyone!" for msg in messages)
def test_send_private_message(self):
"""Test sending private messages."""
service = ChatService()
message_id = service.send_private_message("player1", "player2", "Hello privately!")
assert message_id is not None
private_messages = service.get_private_messages("player1", "player2")
assert len(private_messages) > 0
assert any(msg['content'] == "Hello privately!" for msg in private_messages)
def test_get_recent_messages(self):
"""Test getting recent messages."""
service = ChatService()
service.send_public_message("player1", "Message 1")
service.send_public_message("player2", "Message 2")
messages = service.get_recent_messages(limit=10)
assert len(messages) >= 2
assert any(msg['content'] == "Message 1" for msg in messages)
assert any(msg['content'] == "Message 2" for msg in messages)
@pytest.mark.unit
class TestNPCService:
"""Test NPC service functionality."""
def test_npc_service_initialization(self):
"""Test NPC service initializes correctly."""
service = NPCService()
assert service is not None
assert hasattr(service, 'npcs')
def test_get_all_npcs(self):
"""Test getting all NPCs."""
service = NPCService()
npcs = service.get_all_npcs()
assert isinstance(npcs, dict)
# Should have at least Donald NPC
assert len(npcs) > 0
def test_donald_npc_exists(self):
"""Test that Donald NPC is properly initialized."""
service = NPCService()
npcs = service.get_all_npcs()
# Check if Donald exists
donald_exists = any(npc.get('id') == 'donald' for npc in npcs.values())
assert donald_exists, "Donald NPC should exist"
# Find Donald and check properties
donald_npc = next((npc for npc in npcs.values() if npc.get('id') == 'donald'), None)
assert donald_npc is not None
assert donald_npc['name'] == 'Donald the Trader'
assert donald_npc['char'] == '💼'
def test_get_npc_by_id(self):
"""Test getting NPC by ID."""
service = NPCService()
donald = service.get_npc_by_id('donald')
assert donald is not None
assert donald['name'] == 'Donald the Trader'
@pytest.mark.unit
class TestMCPService:
"""Test MCP service functionality."""
def test_mcp_service_initialization(self):
"""Test MCP service initializes correctly."""
service = MCPService()
assert service is not None
def test_register_ai_agent(self):
"""Test AI agent registration."""
service = MCPService()
agent_id = "test_agent"
capabilities = ["chat", "move"]
success = service.register_ai_agent(agent_id, capabilities)
assert success
def test_get_game_state(self):
"""Test getting game state."""
service = MCPService()
game_state = service.get_game_state()
assert isinstance(game_state, dict)
assert 'players' in game_state
assert 'npcs' in game_state
assert 'world' in game_state
@pytest.mark.unit
class TestPluginService:
"""Test plugin service functionality."""
def test_plugin_service_initialization(self):
"""Test plugin service initializes correctly."""
service = PluginService()
assert service is not None
assert hasattr(service, '_loaded_plugins')
def test_load_plugins(self):
"""Test plugin loading."""
service = PluginService()
# Mock plugin directory
with patch('os.path.exists') as mock_exists, \
patch('os.listdir') as mock_listdir, \
patch('importlib.util.spec_from_file_location') as mock_spec:
mock_exists.return_value = True
mock_listdir.return_value = ['test_plugin.py']
# Mock successful plugin loading
mock_module = Mock()
mock_spec.return_value.loader.load_module.return_value = mock_module
service.load_plugins()
assert len(service._loaded_plugins) >= 0
def test_get_loaded_plugins(self):
"""Test getting loaded plugins."""
service = PluginService()
plugins = service.get_loaded_plugins()
assert isinstance(plugins, dict)
def test_plugin_directory_exists(self):
"""Test that plugin directory exists."""
plugins_dir = os.path.join(
os.path.dirname(os.path.dirname(os.path.dirname(__file__))),
'plugins'
)
assert os.path.exists(plugins_dir), "Plugins directory should exist"
# Check for known plugin files
expected_plugins = [
'sample_plugin.py',
'trading_system_plugin.py',
'weather_plugin.py',
'enhanced_chat_plugin.py'
]
for plugin_file in expected_plugins:
plugin_path = os.path.join(plugins_dir, plugin_file)
assert os.path.exists(plugin_path), f"Plugin {plugin_file} should exist"
|