import unittest from unittest.mock import MagicMock, patch from services.email_service import GmailService class TestGmailService(unittest.TestCase): @patch('services.email_service.build') @patch('services.email_service.Credentials') def test_send_email_success(self, mock_credentials, mock_build): # Mock the service and its methods mock_service = MagicMock() mock_build.return_value = mock_service # Mock the send method mock_messages = mock_service.users.return_value.messages.return_value mock_messages.send.return_value.execute.return_value = {'id': '12345'} # Initialize service service = GmailService() service.client_id = "dummy_id" service.client_secret = "dummy_secret" service.refresh_token = "dummy_token" # Test authenticate self.assertTrue(service.authenticate()) # Test send_email result = service.send_email("test@example.com", "Test Subject", "Test Body") self.assertTrue(result) # Verify calls mock_messages.send.assert_called_once() def test_missing_credentials(self): service = GmailService() # Ensure credentials are None service.client_id = None self.assertFalse(service.authenticate()) if __name__ == '__main__': unittest.main()