]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
See if this helps with intermittent mail test failure
authorshamoon <4887959+shamoon@users.noreply.github.com>
Sat, 16 Aug 2025 17:30:25 +0000 (10:30 -0700)
committershamoon <4887959+shamoon@users.noreply.github.com>
Sat, 16 Aug 2025 17:30:25 +0000 (10:30 -0700)
src/paperless_mail/tests/test_mail.py

index d7138fe4118fa1b0744bdc64a96f5c6f9d076a15..d81a130da10711f2d40e4b846ffc0ddecced86b8 100644 (file)
@@ -1,6 +1,7 @@
 import dataclasses
 import email.contentmanager
 import random
+import time
 import uuid
 from collections import namedtuple
 from contextlib import AbstractContextManager
@@ -385,6 +386,20 @@ class MailMocker(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
             apply_mail_action([], rule.pk, message.uid, message.subject, message.date)
 
 
+def assert_eventually_equals(getter_fn, expected_value, timeout=1.0, interval=0.05):
+    """
+    Repeatedly calls `getter_fn()` until the result equals `expected_value`,
+    or times out after `timeout` seconds.
+    """
+    deadline = time.time() + timeout
+    while time.time() < deadline:
+        if getter_fn() == expected_value:
+            return
+        time.sleep(interval)
+    actual = getter_fn()
+    raise AssertionError(f"Expected {expected_value}, but got {actual}")
+
+
 @mock.patch("paperless_mail.mail.magic.from_buffer", fake_magic_from_buffer)
 class TestMail(
     DirectoriesMixin,
@@ -818,7 +833,7 @@ class TestMail(
         self.mail_account_handler.handle_mail_account(account)
         self.mailMocker.apply_mail_actions()
 
-        self.assertEqual(len(self.mailMocker.bogus_mailbox.messages), 1)
+        assert_eventually_equals(lambda: len(self.mailMocker.bogus_mailbox.messages), 1)
 
     def test_handle_mail_account_delete_no_filters(self):
         account = MailAccount.objects.create(