fix: throw error if folder select fails

This commit is contained in:
Leon
2025-08-06 21:23:11 +02:00
parent 95e14bac1a
commit f6d6743b4d
2 changed files with 15 additions and 3 deletions

View File

@@ -38,7 +38,13 @@ def _connect_to_imap(settings: Settings) -> imaplib.IMAP4_SSL | None:
logger.info(f"Connecting to IMAP server: {settings.imap_server}") logger.info(f"Connecting to IMAP server: {settings.imap_server}")
mail = imaplib.IMAP4_SSL(settings.imap_server) mail = imaplib.IMAP4_SSL(settings.imap_server)
mail.login(settings.imap_username, settings.imap_password) mail.login(settings.imap_username, settings.imap_password)
mail.select(settings.search_folder) status, messages = mail.select(settings.search_folder)
if status != "OK":
logger.error(
f"Failed to select mailbox: {settings.search_folder}, status: {status}, messages: {messages}"
)
mail.logout()
return None
logger.info(f"Selected mailbox: {settings.search_folder}") logger.info(f"Selected mailbox: {settings.search_folder}")
return mail return mail
except Exception as e: except Exception as e:

View File

@@ -65,8 +65,8 @@ def test_process_emails(mock_imap, db_session: Session):
# Mock IMAP connection and email fetching # Mock IMAP connection and email fetching
mock_mail = MagicMock() mock_mail = MagicMock()
mock_imap.return_value = mock_mail mock_imap.return_value = mock_mail
mock_mail.login.return_value = (None, None) mock_mail.login.return_value = ("OK", [b"Login successful"])
mock_mail.select.return_value = (None, None) mock_mail.select.return_value = ("OK", [b"1"])
mock_mail.search.return_value = ("OK", [b"1"]) mock_mail.search.return_value = ("OK", [b"1"])
# Mock email content # Mock email content
@@ -150,6 +150,8 @@ def test_process_emails_auto_add_sender(mock_imap, db_session: Session):
mock_mail = MagicMock() mock_mail = MagicMock()
mock_imap.return_value = mock_mail mock_imap.return_value = mock_mail
mock_mail.login.return_value = ("OK", [b"Login successful"])
mock_mail.select.return_value = ("OK", [b"1"])
mock_mail.search.return_value = ("OK", [b"1"]) mock_mail.search.return_value = ("OK", [b"1"])
mock_msg_bytes = b"From: New Sender <new@example.com>\nSubject: New Email\nMessage-ID: <new@new.com>\n\nHello" mock_msg_bytes = b"From: New Sender <new@example.com>\nSubject: New Email\nMessage-ID: <new@new.com>\n\nHello"
mock_mail.fetch.return_value = ("OK", [(None, mock_msg_bytes)]) mock_mail.fetch.return_value = ("OK", [(None, mock_msg_bytes)])
@@ -195,6 +197,8 @@ def test_process_emails_no_move_or_read(mock_imap, db_session: Session):
mock_mail = MagicMock() mock_mail = MagicMock()
mock_imap.return_value = mock_mail mock_imap.return_value = mock_mail
mock_mail.login.return_value = ("OK", [b"Login successful"])
mock_mail.select.return_value = ("OK", [b"1"])
mock_mail.search.return_value = ("OK", [b"1"]) mock_mail.search.return_value = ("OK", [b"1"])
mock_msg_bytes = b"From: newsletter@example.com\nSubject: Test Subject\nMessage-ID: <test@test.com>\n\nTest Body" mock_msg_bytes = b"From: newsletter@example.com\nSubject: Test Subject\nMessage-ID: <test@test.com>\n\nTest Body"
mock_mail.fetch.return_value = ("OK", [(None, mock_msg_bytes)]) mock_mail.fetch.return_value = ("OK", [(None, mock_msg_bytes)])
@@ -235,6 +239,8 @@ def test_process_emails_avoids_duplicates(mock_imap, db_session: Session):
mock_mail = MagicMock() mock_mail = MagicMock()
mock_imap.return_value = mock_mail mock_imap.return_value = mock_mail
mock_mail.login.return_value = ("OK", [b"Login successful"])
mock_mail.select.return_value = ("OK", [b"1"])
mock_mail.search.return_value = ("OK", [b"1"]) mock_mail.search.return_value = ("OK", [b"1"])
# This email has the same Message-ID as the one we just created # This email has the same Message-ID as the one we just created
mock_msg_bytes = b"From: newsletter@example.com\nSubject: Test Subject\nMessage-ID: <existing@message.com>\n\nTest Body" mock_msg_bytes = b"From: newsletter@example.com\nSubject: Test Subject\nMessage-ID: <existing@message.com>\n\nTest Body"