Skip to main content
Glama

MCP Trader Server

by Af7007
test_account_info.py6.4 kB
"""Unit tests for account information retrieval.""" from unittest.mock import Mock, patch import pytest from fastmcp import Client from mcp_mt5.main import mcp @pytest.mark.unit class TestAccountInfo: """Test account information retrieval.""" @patch("mcp_mt5.main.mt5") async def test_get_account_info_success(self, mock_mt5): """Test successful account info retrieval.""" # Create mock account info mock_account = Mock() mock_account._asdict.return_value = { "login": 123456, "trade_mode": 0, "leverage": 100, "limit_orders": 200, "margin_so_mode": 0, "trade_allowed": True, "trade_expert": True, "margin_mode": 0, "currency_digits": 2, "fifo_close": False, "balance": 10000.0, "credit": 0.0, "profit": 150.50, "equity": 10150.50, "margin": 500.0, "margin_free": 9650.50, "margin_level": 2030.1, "margin_so_call": 50.0, "margin_so_so": 30.0, "margin_initial": 0.0, "margin_maintenance": 0.0, "assets": 0.0, "liabilities": 0.0, "commission_blocked": 0.0, "name": "Test Account", "server": "TestServer", "currency": "USD", "company": "Test Company", } mock_mt5.account_info.return_value = mock_account async with Client(mcp) as client: result = await client.call_tool("get_account_info", {}) assert result.data.login == 123456 assert result.data.balance == 10000.0 assert result.data.equity == 10150.50 assert result.data.profit == 150.50 assert result.data.currency == "USD" assert result.data.leverage == 100 mock_mt5.account_info.assert_called_once() @patch("mcp_mt5.main.mt5") async def test_get_account_info_failure(self, mock_mt5): """Test account info retrieval failure.""" mock_mt5.account_info.return_value = None mock_mt5.last_error.return_value = (1, "Not connected") async with Client(mcp) as client: with pytest.raises(Exception, match="Failed to get account info"): await client.call_tool("get_account_info", {}) mock_mt5.account_info.assert_called_once() mock_mt5.last_error.assert_called_once() @patch("mcp_mt5.main.mt5") async def test_account_info_all_fields(self, mock_mt5): """Test that all expected fields are present in account info.""" mock_account = Mock() mock_account._asdict.return_value = { "login": 123456, "trade_mode": 0, "leverage": 100, "limit_orders": 200, "margin_so_mode": 0, "trade_allowed": True, "trade_expert": True, "margin_mode": 0, "currency_digits": 2, "fifo_close": False, "balance": 10000.0, "credit": 0.0, "profit": 0.0, "equity": 10000.0, "margin": 0.0, "margin_free": 10000.0, "margin_level": 0.0, "margin_so_call": 50.0, "margin_so_so": 30.0, "margin_initial": 0.0, "margin_maintenance": 0.0, "assets": 0.0, "liabilities": 0.0, "commission_blocked": 0.0, "name": "Test", "server": "Test", "currency": "USD", "company": "Test", } mock_mt5.account_info.return_value = mock_account async with Client(mcp) as client: result = await client.call_tool("get_account_info", {}) # Check all required fields exist required_fields = [ "login", "balance", "equity", "margin", "margin_free", "profit", "currency", "leverage", "name", "server", ] for field in required_fields: assert hasattr(result.data, field), f"Missing field: {field}" @pytest.mark.unit class TestTerminalInfo: """Test terminal information retrieval.""" @patch("mcp_mt5.main.mt5") async def test_get_terminal_info_success(self, mock_mt5): """Test successful terminal info retrieval.""" mock_terminal = Mock() mock_terminal._asdict.return_value = { "community_account": False, "community_connection": False, "connected": True, "dlls_allowed": True, "trade_allowed": True, "tradeapi_disabled": False, "email_enabled": False, "ftp_enabled": False, "notifications_enabled": False, "mqid": False, "build": 3802, "maxbars": 100000, "codepage": 1252, "ping_last": 10, "community_balance": 0.0, "retransmission": 0.0, "company": "MetaQuotes", "name": "MetaTrader 5", "language": "English", "path": "C:\\Program Files\\MetaTrader 5", "data_path": "C:\\Users\\Test\\AppData\\Roaming\\MetaQuotes\\Terminal", "commondata_path": "C:\\Users\\Test\\AppData\\Roaming\\MetaQuotes\\Common", } mock_mt5.terminal_info.return_value = mock_terminal async with Client(mcp) as client: result = await client.call_tool("get_terminal_info", {}) assert result.data["connected"] is True assert result.data["trade_allowed"] is True assert result.data["build"] == 3802 assert result.data["company"] == "MetaQuotes" mock_mt5.terminal_info.assert_called_once() @patch("mcp_mt5.main.mt5") async def test_get_terminal_info_failure(self, mock_mt5): """Test terminal info retrieval failure.""" mock_mt5.terminal_info.return_value = None mock_mt5.last_error.return_value = (1, "Not initialized") async with Client(mcp) as client: with pytest.raises(Exception, match="Failed to get terminal info"): await client.call_tool("get_terminal_info", {}) mock_mt5.terminal_info.assert_called_once() mock_mt5.last_error.assert_called_once()

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