]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
fix the test cases
authorJonas Winkler <17569239+jonaswinkler@users.noreply.github.com>
Thu, 23 Feb 2023 23:03:28 +0000 (00:03 +0100)
committerJonas Winkler <17569239+jonaswinkler@users.noreply.github.com>
Thu, 23 Feb 2023 23:03:28 +0000 (00:03 +0100)
src/paperless_mail/mail.py
src/paperless_mail/tests/test_mail.py

index 0b35c90043f3ceae3945b4e79a54bdafb1a6a713..fae770b748cbb5d839035743ac05e0302d6f131a 100644 (file)
@@ -1,5 +1,6 @@
 import datetime
 import itertools
+import logging
 import os
 import re
 import tempfile
@@ -91,7 +92,7 @@ class DeleteMailAction(BaseMailAction):
     A mail action that deletes mails after processing.
     """
 
-    def post_consume(self, M, message_uid, parameter):
+    def post_consume(self, M: MailBox, message_uid: str, parameter: str):
         M.delete(message_uid)
 
 
@@ -103,7 +104,7 @@ class MarkReadMailAction(BaseMailAction):
     def get_criteria(self):
         return {"seen": False}
 
-    def post_consume(self, M, message_uid, parameter):
+    def post_consume(self, M: MailBox, message_uid: str, parameter: str):
         M.flag(message_uid, [MailMessageFlags.SEEN], True)
 
 
@@ -124,7 +125,7 @@ class FlagMailAction(BaseMailAction):
     def get_criteria(self):
         return {"flagged": False}
 
-    def post_consume(self, M, message_uid, parameter):
+    def post_consume(self, M: MailBox, message_uid: str, parameter: str):
         M.flag(message_uid, [MailMessageFlags.FLAGGED], True)
 
 
@@ -160,10 +161,9 @@ class TagMailAction(BaseMailAction):
         else:
             raise ValueError("This should never happen.")
 
-    def post_consume(self, M: MailBox, message_uid, parameter):
+    def post_consume(self, M: MailBox, message_uid: str, parameter: str):
         if re.search(r"gmail\.com$|googlemail\.com$", M._host):
-            for uid in message_uid:
-                M.client.uid("STORE", uid, "X-GM-LABELS", self.keyword)
+            M.client.uid("STORE", message_uid, "X-GM-LABELS", self.keyword)
 
         # AppleMail
         elif self.color:
@@ -190,6 +190,35 @@ class TagMailAction(BaseMailAction):
             raise MailError("No keyword specified.")
 
 
+def mailbox_login(mailbox: MailBox, account: MailAccount):
+    logger = logging.getLogger("paperless_mail")
+
+    try:
+
+        mailbox.login(account.username, account.password)
+
+    except UnicodeEncodeError:
+        logger.debug("Falling back to AUTH=PLAIN")
+
+        try:
+            mailbox.login_utf8(account.username, account.password)
+        except Exception as e:
+            logger.error(
+                "Unable to authenticate with mail server using AUTH=PLAIN",
+            )
+            raise MailError(
+                f"Error while authenticating account {account}",
+            ) from e
+    except Exception as e:
+        logger.error(
+            f"Error while authenticating account {account}: {e}",
+            exc_info=False,
+        )
+        raise MailError(
+            f"Error while authenticating account {account}",
+        ) from e
+
+
 @shared_task
 def apply_mail_action(
     result: List[str],
@@ -216,7 +245,7 @@ def apply_mail_action(
             port=account.imap_port,
             security=account.imap_security,
         ) as M:
-            M.login(username=account.username, password=account.password)
+            mailbox_login(M, account)
             M.folder.set(rule.folder)
             action.post_consume(M, message_uid, rule.action_parameter)
 
@@ -436,32 +465,7 @@ class MailAccountHandler(LoggingMixin):
                 self.log("debug", f"GMAIL Label Support: {supports_gmail_labels}")
                 self.log("debug", f"AUTH=PLAIN Support: {supports_auth_plain}")
 
-                try:
-
-                    M.login(account.username, account.password)
-
-                except UnicodeEncodeError:
-                    self.log("debug", "Falling back to AUTH=PLAIN")
-
-                    try:
-                        M.login_utf8(account.username, account.password)
-                    except Exception as e:
-                        self.log(
-                            "error",
-                            "Unable to authenticate with mail server using AUTH=PLAIN",
-                        )
-                        raise MailError(
-                            f"Error while authenticating account {account}",
-                        ) from e
-                except Exception as e:
-                    self.log(
-                        "error",
-                        f"Error while authenticating account {account}: {e}",
-                        exc_info=False,
-                    )
-                    raise MailError(
-                        f"Error while authenticating account {account}",
-                    ) from e
+                mailbox_login(M, account)
 
                 self.log(
                     "debug",
index b63d11614a9d849225280f89e3680749f043cb23..17972e10c3ebf25cae7e18a59a69a2667dcd9a3c 100644 (file)
@@ -912,13 +912,17 @@ class TestMail(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
         self.mail_account_handler.handle_mail_account(account)
 
         self._queue_consumption_tasks_mock.assert_called_once()
-        args, kwargs = self.async_task.call_args
 
         c = Correspondent.objects.get(name="amazon@amazon.de")
-        # should work
-        self.assertEqual(kwargs["override_correspondent_id"], c.id)
+        self.verify_queue_consumption_tasks_call_args(
+            [
+                [
+                    {"override_correspondent_id": c.id},
+                ],
+            ],
+        )
 
-        self.async_task.reset_mock()
+        self._queue_consumption_tasks_mock.reset_mock()
         self.reset_bogus_mailbox()
 
         with mock.patch("paperless_mail.mail.Correspondent.objects.get_or_create") as m:
@@ -926,9 +930,13 @@ class TestMail(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
 
             self.mail_account_handler.handle_mail_account(account)
 
-        args, kwargs = self.async_task.call_args
-        self.async_task.assert_called_once()
-        self.assertEqual(kwargs["override_correspondent_id"], None)
+        self.verify_queue_consumption_tasks_call_args(
+            [
+                [
+                    {"override_correspondent_id": None},
+                ],
+            ],
+        )
 
     def test_filters(self):