- Fixed a bug where missing 'id=0' in the 'cfg' table caused SMTP authentication to fail by defaulting to placeholder credentials. - Updated 'app/lib_email.py' to explicitly validate SMTP server and port settings before connecting, preventing crashes with 'please run connect() first'. - Added email fallback logic in 'app/methods/person_methods.py' to use 'user_email' or 'primary_email' if the primary contact email is missing. - Aligned 'app/config.py.default' with the production structure, explicitly re-adding 'SMTP' and 'FILES_PATH' dictionaries. - Added comprehensive unit tests in 'tests/test_email_configuration.py' to verify configuration handling.
68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
import sys
|
|
import os
|
|
import logging
|
|
import unittest
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
# Add current directory to path
|
|
sys.path.append(os.getcwd())
|
|
|
|
# Mock html2text before importing app.lib_email
|
|
sys.modules['html2text'] = MagicMock()
|
|
|
|
# Configure logging
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
from app.lib_email import send_email
|
|
from app.config import settings
|
|
|
|
class TestEmail(unittest.TestCase):
|
|
def test_send_email_missing_settings(self):
|
|
print("\nTesting send_email with missing SMTP settings...")
|
|
# Backup original settings
|
|
original_smtp = getattr(settings, 'SMTP', {})
|
|
|
|
# Clear settings
|
|
settings.SMTP = {}
|
|
|
|
result = send_email(
|
|
from_email="test@example.com",
|
|
to_email="test@example.com",
|
|
subject="Test Email",
|
|
body_html="<p>Test</p>",
|
|
test=True
|
|
)
|
|
|
|
# Restore settings
|
|
settings.SMTP = original_smtp
|
|
|
|
print(f"Result (should be False): {result}")
|
|
self.assertFalse(result)
|
|
|
|
def test_send_email_invalid_port(self):
|
|
print("\nTesting send_email with invalid port...")
|
|
original_smtp = getattr(settings, 'SMTP', {})
|
|
|
|
settings.SMTP = {
|
|
'server': 'smtp.example.com',
|
|
'port': 'invalid',
|
|
'username': 'user',
|
|
'password': 'pass'
|
|
}
|
|
|
|
result = send_email(
|
|
from_email="test@example.com",
|
|
to_email="test@example.com",
|
|
subject="Test Email",
|
|
body_html="<p>Test</p>",
|
|
test=True
|
|
)
|
|
|
|
settings.SMTP = original_smtp
|
|
|
|
print(f"Result (should be False): {result}")
|
|
self.assertFalse(result)
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|