Skip to main content
Glama

MCP Trader Server

by Af7007
test_connection.py4.86 kB
"""Unit tests for MT5 connection management.""" from unittest.mock import patch import pytest from fastmcp import Client from mcp_mt5.main import mcp @pytest.mark.unit class TestConnectionManagement: """Test MT5 connection initialization and management.""" @patch("mcp_mt5.main.mt5") async def test_initialize_success(self, mock_mt5): """Test successful MT5 initialization.""" mock_mt5.initialize.return_value = True async with Client(mcp) as client: result = await client.call_tool( "initialize", {"path": "C:\\Program Files\\MetaTrader 5\\terminal64.exe"} ) assert result.data is True mock_mt5.initialize.assert_called_once() @patch("mcp_mt5.main.mt5") async def test_initialize_failure(self, mock_mt5): """Test failed MT5 initialization.""" mock_mt5.initialize.return_value = False mock_mt5.last_error.return_value = (1, "Initialization failed") async with Client(mcp) as client: result = await client.call_tool( "initialize", {"path": "C:\\Invalid\\Path\\terminal64.exe"} ) assert result.data is False mock_mt5.initialize.assert_called_once() mock_mt5.last_error.assert_called_once() @patch("mcp_mt5.main.mt5") async def test_shutdown(self, mock_mt5): """Test MT5 shutdown.""" async with Client(mcp) as client: result = await client.call_tool("shutdown", {}) assert result.data is True mock_mt5.shutdown.assert_called_once() @patch("mcp_mt5.main.mt5") async def test_login_success(self, mock_mt5): """Test successful login.""" mock_mt5.login.return_value = True async with Client(mcp) as client: result = await client.call_tool( "login", {"login": 123456, "password": "test_pass", "server": "TestServer"} ) assert result.data is True mock_mt5.login.assert_called_once_with( login=123456, password="test_pass", server="TestServer" ) @patch("mcp_mt5.main.mt5") async def test_login_failure(self, mock_mt5): """Test failed login.""" mock_mt5.login.return_value = False mock_mt5.last_error.return_value = (2, "Invalid credentials") async with Client(mcp) as client: result = await client.call_tool( "login", {"login": 123456, "password": "wrong_pass", "server": "TestServer"} ) assert result.data is False mock_mt5.login.assert_called_once() mock_mt5.last_error.assert_called_once() @patch("mcp_mt5.main.mt5") async def test_get_version(self, mock_mt5): """Test getting MT5 version.""" mock_mt5.version.return_value = (5, 0, 5260) async with Client(mcp) as client: result = await client.call_tool("get_version", {}) assert result.data == {"version": 5, "build": 0, "date": 5260} mock_mt5.version.assert_called_once() @patch("mcp_mt5.main.mt5") async def test_get_version_failure(self, mock_mt5): """Test get_version when MT5 returns None.""" mock_mt5.version.return_value = None mock_mt5.last_error.return_value = (3, "Not connected") async with Client(mcp) as client: with pytest.raises(Exception, match="Failed to get version"): await client.call_tool("get_version", {}) mock_mt5.version.assert_called_once() mock_mt5.last_error.assert_called_once() @pytest.mark.unit class TestConnectionParameters: """Test connection parameter validation.""" @patch("mcp_mt5.main.mt5") async def test_initialize_with_various_paths(self, mock_mt5): """Test initialize with different path formats.""" mock_mt5.initialize.return_value = True paths = [ "C:\\Program Files\\MetaTrader 5\\terminal64.exe", "C:/Program Files/MetaTrader 5/terminal64.exe", "D:\\MT5\\terminal64.exe", ] async with Client(mcp) as client: for path in paths: result = await client.call_tool("initialize", {"path": path}) assert result.data is True @patch("mcp_mt5.main.mt5") async def test_login_with_different_servers(self, mock_mt5): """Test login with different server names.""" mock_mt5.login.return_value = True servers = [ "MetaQuotes-Demo", "Broker-Live", "TestServer-01", ] async with Client(mcp) as client: for server in servers: result = await client.call_tool( "login", {"login": 123456, "password": "pass", "server": server} ) assert result.data is True

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Af7007/mcp-trader'

If you have feedback or need assistance with the MCP directory API, please join our Discord server