forked from mirror/django-mailbox
Adding a more-versatile condition-handling method for preventing integration tests from mashing on one another.
This commit is contained in:
parent
3e1f6b9909
commit
988cb7504f
6 changed files with 17 additions and 17 deletions
|
|
@ -387,7 +387,7 @@ class Mailbox(models.Model):
|
|||
msg.save()
|
||||
return msg
|
||||
|
||||
def get_new_mail(self):
|
||||
def get_new_mail(self, condition=None):
|
||||
"""Connect to this transport and fetch new messages."""
|
||||
new_mail = []
|
||||
connection = self.get_connection()
|
||||
|
|
|
|||
|
|
@ -55,12 +55,12 @@ class EmailMessageTestCase(TestCase):
|
|||
settings.EMAIL_USE_TLS = True
|
||||
super(EmailMessageTestCase, self).setUp()
|
||||
|
||||
def _get_new_messages(self, mailbox):
|
||||
def _get_new_messages(self, mailbox, condition=None):
|
||||
maximum_wait = time.time() + self.maximum_wait_seconds
|
||||
while True:
|
||||
if time.time() > maximum_wait:
|
||||
raise EmailIntegrationTimeout()
|
||||
messages = self.mailbox.get_new_mail()
|
||||
messages = self.mailbox.get_new_mail(condition)
|
||||
if messages:
|
||||
return messages
|
||||
time.sleep(5)
|
||||
|
|
|
|||
|
|
@ -24,12 +24,6 @@ class TestImap(EmailMessageTestCase):
|
|||
uri=self.get_connection_string()
|
||||
)
|
||||
self.arbitrary_identifier = str(uuid.uuid4())
|
||||
settings.DJANGO_MAILBOX_INTEGRATION_TESTING_SUBJECT = (
|
||||
self.arbitrary_identifier
|
||||
)
|
||||
|
||||
def tearDown(self):
|
||||
settings.DJANGO_MAILBOX_INTEGRATION_TESTING_SUBJECT = None
|
||||
|
||||
def get_connection_string(self):
|
||||
return "imap+ssl://{account}:{password}@{server}".format(
|
||||
|
|
@ -50,7 +44,10 @@ class TestImap(EmailMessageTestCase):
|
|||
)
|
||||
msg.send()
|
||||
|
||||
messages = self._get_new_messages(self.mailbox)
|
||||
messages = self._get_new_messages(
|
||||
self.mailbox,
|
||||
condition=lambda m: m['subject'] == self.arbitrary_identifier
|
||||
)
|
||||
|
||||
self.assertEqual(1, len(messages))
|
||||
self.assertEqual(messages[0].subject, self.arbitrary_identifier)
|
||||
|
|
|
|||
|
|
@ -16,10 +16,12 @@ class GenericFileMailbox(EmailTransport):
|
|||
def get_instance(self):
|
||||
return self._variant(self._path)
|
||||
|
||||
def get_message(self):
|
||||
def get_message(self, condition=None):
|
||||
repository = self.get_instance()
|
||||
repository.lock()
|
||||
for key, message in repository.items():
|
||||
if condition and not condition(message):
|
||||
continue
|
||||
repository.remove(key)
|
||||
yield message
|
||||
repository.unlock()
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ class ImapTransport(EmailTransport):
|
|||
pass
|
||||
return safe_message_ids
|
||||
|
||||
def get_message(self):
|
||||
def get_message(self, condition=None):
|
||||
message_ids = self._get_all_message_ids()
|
||||
|
||||
if not message_ids:
|
||||
|
|
@ -105,10 +105,7 @@ class ImapTransport(EmailTransport):
|
|||
continue
|
||||
message = self.get_email_from_bytes(msg_contents[0][1])
|
||||
|
||||
if (
|
||||
self.integration_testing_subject and
|
||||
message['Subject'] != self.integration_testing_subject
|
||||
):
|
||||
if condition and not condition(message):
|
||||
continue
|
||||
|
||||
yield message
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ class Pop3Transport(EmailTransport):
|
|||
return six.binary_type('\r\n', 'ascii').join(message_lines)
|
||||
return '\r\n'.join(message_lines)
|
||||
|
||||
def get_message(self):
|
||||
def get_message(self, condition=None):
|
||||
message_count = len(self.server.list()[1])
|
||||
for i in range(message_count):
|
||||
try:
|
||||
|
|
@ -36,6 +36,10 @@ class Pop3Transport(EmailTransport):
|
|||
self.server.retr(i + 1)[1]
|
||||
)
|
||||
message = self.get_email_from_bytes(msg_contents)
|
||||
|
||||
if condition and not condition(message):
|
||||
continue
|
||||
|
||||
yield message
|
||||
except MessageParseError:
|
||||
continue
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue