Skip to main content
Glama
test_gmail_server.py4.59 kB
#!/usr/bin/env python3 """ Tests for the Gmail MCP Server """ import unittest from unittest.mock import patch, MagicMock import sys import os # Add parent directory to path for importing server modules sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) from gmail_server import send_email, search_emails, read_email class TestGmailServer(unittest.TestCase): """Test cases for Gmail MCP Server functions""" @patch('gmail_server.get_gmail_service') @patch('gmail_server.send_message') def test_send_email(self, mock_send_message, mock_get_service): """Test sending an email""" # Setup mocks mock_service = MagicMock() mock_get_service.return_value = mock_service mock_send_message.return_value = {'id': 'msg123'} # Call the function (we need to handle the async function) import asyncio result = asyncio.run(send_email( to='test@example.com', subject='Test Subject', body='Test Body' )) # Assertions mock_get_service.assert_called_once() mock_send_message.assert_called_once() self.assertIn('Email sent successfully', result) self.assertIn('msg123', result) @patch('gmail_server.get_gmail_service') @patch('gmail_server.search_messages') @patch('gmail_server.get_message') def test_search_emails(self, mock_get_message, mock_search_messages, mock_get_service): """Test searching emails""" # Setup mocks mock_service = MagicMock() mock_get_service.return_value = mock_service mock_search_messages.return_value = ['msg1', 'msg2'] # Mock message data mock_message1 = { 'id': 'msg1', 'payload': { 'headers': [ {'name': 'Subject', 'value': 'Test Subject 1'}, {'name': 'From', 'value': 'sender@example.com'}, {'name': 'Date', 'value': '2023-01-01'} ] } } mock_message2 = { 'id': 'msg2', 'payload': { 'headers': [ {'name': 'Subject', 'value': 'Test Subject 2'}, {'name': 'From', 'value': 'sender@example.com'}, {'name': 'Date', 'value': '2023-01-02'} ] } } # Configure get_message to return different messages mock_get_message.side_effect = [mock_message1, mock_message2] # Call the function import asyncio result = asyncio.run(search_emails('test query', 2)) # Assertions mock_get_service.assert_called_once() mock_search_messages.assert_called_once_with(mock_service, 'test query', 2) self.assertEqual(mock_get_message.call_count, 2) self.assertIn('Test Subject 1', result) self.assertIn('Test Subject 2', result) @patch('gmail_server.get_gmail_service') @patch('gmail_server.get_message') def test_read_email(self, mock_get_message, mock_get_service): """Test reading an email""" # Setup mocks mock_service = MagicMock() mock_get_service.return_value = mock_service # Create a test email with encoded body import base64 test_body = "This is a test email body." encoded_body = base64.urlsafe_b64encode(test_body.encode()).decode() mock_email = { 'id': 'msg1', 'payload': { 'headers': [ {'name': 'Subject', 'value': 'Test Subject'}, {'name': 'From', 'value': 'sender@example.com'}, {'name': 'To', 'value': 'recipient@example.com'}, {'name': 'Date', 'value': '2023-01-01'} ], 'body': { 'data': encoded_body } } } mock_get_message.return_value = mock_email # Call the function import asyncio result = asyncio.run(read_email('msg1')) # Assertions mock_get_service.assert_called_once() mock_get_message.assert_called_once_with(mock_service, 'msg1', format='full') self.assertIn('Test Subject', result) self.assertIn('sender@example.com', result) self.assertIn('recipient@example.com', result) self.assertIn(test_body, result) if __name__ == '__main__': unittest.main()

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/meyannis/mcpgmail'

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