This commit is contained in:
2025-08-05 14:37:49 -07:00
parent 27fc2e29a1
commit 5d87be1d96
10 changed files with 123 additions and 136 deletions

View File

@@ -3,61 +3,33 @@ from app import create_app
from app.models import User, db, Folder
class TestIMAPRoutes:
def test_imap_config_modal(self, client):
# Create a test user and log in
user = User(email='test@example.com', first_name='Test', last_name='User')
user.set_password('password')
db.session.add(user)
db.session.commit()
client.post('/auth/login', data={
'email': 'test@example.com',
'password': 'password'
})
response = client.get('/api/imap/config')
def test_imap_config_modal(self, authenticated_client):
response = authenticated_client.get('/api/imap/config')
assert response.status_code == 200
assert b'Configure IMAP Connection' in response.data
def test_imap_connection_test_success(self, client, app):
with app.app_context():
# Create a test user and log in
user = User(email='test2@example.com', first_name='Test', last_name='User')
user.set_password('password')
db.session.add(user)
db.session.commit()
client.post('/auth/login', data={
'email': 'test2@example.com',
'password': 'password'
})
response = client.post('/api/imap/test', data={
'server': 'test.com',
'port': '5153',
'username': 'user1@example.com',
'password': 'password1',
'use_ssl': 'off'
})
assert response.status_code == 200
# Should show either success or error message
assert b'Test Connection' in response.data
def test_imap_connection_test_success(self, authenticated_client, app):
response = authenticated_client.post('/api/imap/test', data={
'server': 'localhost',
'port': '5143',
'username': 'user1@example.com',
'password': 'password1',
'use_ssl': False
})
print(response.data)
assert response.status_code == 200
# Should show either success or error message
assert b'Test Connection' in response.data
def test_imap_sync_folders(self, client, app):
with app.app_context():
# Create a test user and log in
user = User(email='test3@example.com', first_name='Test', last_name='User')
user.set_password('password')
user.imap_config = {'server': 'test.com', 'port': 993, 'username': 'test', 'password': 'pass'}
db.session.add(user)
db.session.commit()
client.post('/auth/login', data={
'email': 'test3@example.com',
'password': 'password'
})
response = client.post('/api/imap/sync')
# Should fail without real IMAP server but return proper response
assert response.status_code in [200, 400]
def test_imap_sync_folders(self, authenticated_client, app, mock_user):
# Create a test user and log in
mock_user.imap_config = {'server': 'localhost', 'port': 5143, 'username': 'user1@example.com', 'password': 'password1', 'use_ssl': False}
db.session.commit()
folders = Folder.query.filter_by(user_id=mock_user.id).all()
response = authenticated_client.post('/api/imap/sync')
print('respo', response.data, response)
new_folders = Folder.query.filter_by(user_id=mock_user.id).all()
assert len(new_folders) > len(folders)
# Should fail without real IMAP server but return proper response
assert response.status_code in [200, 400]

View File

@@ -21,7 +21,6 @@ class TestIMAPService:
assert imap_service.user == user
assert imap_service.config == {}
@patch('app.imap_service.imaplib.IMAP4_SSL')
def test_test_connection_success(self, mock_imap, app):
with app.app_context():
# Mock successful connection
@@ -33,17 +32,14 @@ class TestIMAPService:
mock_connection.logout.return_value = None
user = User(email='test@example.com', first_name='Test', last_name='User')
user.imap_config = {'server': 'test.com', 'port': 993, 'username': 'user', 'password': 'pass'}
user.imap_config = {'server': 'localhost', 'port': 5143, 'username': 'user1@example.com', 'password': 'password1', 'use_ssl': False}
imap_service = IMAPService(user)
success, message = imap_service.test_connection()
assert success is True
assert message == "Connection successful"
mock_imap.assert_called_once_with('test.com', 993)
mock_connection.login.assert_called_once_with('user', 'pass')
assert success is True
@patch('app.imap_service.imaplib.IMAP4_SSL')
def test_test_connection_failure(self, mock_imap, app):
with app.app_context():
# Mock failed connection
@@ -153,68 +149,43 @@ class TestIMAPService:
assert len(folders) == 0
@patch('app.imap_service.imaplib.IMAP4_SSL')
def test_sync_folders_success(self, mock_imap, app):
with app.app_context():
# Mock successful folder listing and database operations
mock_connection = Mock()
mock_imap.return_value = mock_connection
mock_connection.login.return_value = None
mock_connection.list.return_value = ('OK', [b'(\\HasNoChildren) "INBOX"', b'(\\HasNoChildren) "CustomFolder"', b'(\\HasNoChildren) "AnotherFolder"'])
mock_connection.close.return_value = None
mock_connection.logout.return_value = None
user = User(email='test@example.com', first_name='Test', last_name='User')
user.imap_config = {'server': 'test.com', 'port': 993, 'username': 'user', 'password': 'pass'}
imap_service = IMAPService(user)
success, message = imap_service.sync_folders()
assert success is True
assert "Successfully synced 2 folders" in message
def test_sync_folders_success(self, app):
user = User(email='test@example.com', first_name='Test', last_name='User')
user.imap_config = {'server': 'localhost', 'port': 5143, 'username': 'user1@example.com', 'password': 'password1'}
imap_service = IMAPService(user)
success, message = imap_service.sync_folders()
assert success is True
assert "Successfully synced 2 folders" in message
@patch('app.imap_service.imaplib.IMAP4_SSL')
def test_sync_folders_no_config(self, mock_imap, app):
with app.app_context():
user = User(email='test@example.com', first_name='Test', last_name='User')
imap_service = IMAPService(user)
success, message = imap_service.sync_folders()
assert success is False
assert message == "No IMAP configuration found"
user = User(email='test@example.com', first_name='Test', last_name='User')
imap_service = IMAPService(user)
success, message = imap_service.sync_folders()
assert success is False
assert message == "No IMAP configuration found"
@patch('app.imap_service.imaplib.IMAP4_SSL')
def test_sync_folders_no_folders(self, mock_imap, app):
with app.app_context():
# Mock empty folder listing
mock_connection = Mock()
mock_imap.return_value = mock_connection
mock_connection.login.return_value = None
mock_connection.list.return_value = ('OK', [])
mock_connection.close.return_value = None
mock_connection.logout.return_value = None
user = User(email='test@example.com', first_name='Test', last_name='User')
user.imap_config = {'server': 'test.com', 'port': 993, 'username': 'user', 'password': 'pass'}
imap_service = IMAPService(user)
success, message = imap_service.sync_folders()
assert success is False
assert message == "No folders found on IMAP server"
user = User(email='test@example.com', first_name='Test', last_name='User')
user.imap_config = {'server': 'localhost', 'port': 5143, 'username': 'user1@example.com', 'password': 'password1', 'use_ssl': False}
imap_service = IMAPService(user)
success, message = imap_service.sync_folders()
assert success is False
assert message == "No folders found on IMAP server"
@patch('app.imap_service.imaplib.IMAP4_SSL')
def test_sync_folders_exception(self, mock_imap, app):
with app.app_context():
# Mock exception during sync
mock_imap.side_effect = Exception("Sync error")
def test_sync_folders_exception(self, app):
user = User(email='test@example.com', first_name='Test', last_name='User')
user.imap_config = {'server': 'test.com', 'port': 993, 'username': 'user', 'password': 'pass'}
imap_service = IMAPService(user)
success, message = imap_service.sync_folders()
assert success is False
assert "Sync error" in message
user = User(email='test@example.com', first_name='Test', last_name='User')
user.imap_config = {'server': 'localhost', 'port': 5143, 'username': 'user1@example.com', 'password': 'password1', 'use_ssl': False }
imap_service = IMAPService(user)
success, message = imap_service.sync_folders()
assert success is False
assert "Sync error" in message